)]}'
{"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef9bbadcb058dcfafc091b52273cbfcbfd16056c","unresolved":true,"context_lines":[{"line_number":762,"context_line":"        self.location \u003d self.conf.location"},{"line_number":763,"context_line":"        self._timestamp \u003d None"},{"line_number":764,"context_line":"        self._secret \u003d None"},{"line_number":765,"context_line":"        self._chunk_signature_valid \u003d True"},{"line_number":766,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":767,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":768,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"}],"source_content_type":"text/x-python","patch_set":1,"id":"b99cb68c_73dd4435","side":"PARENT","line":765,"updated":"2025-02-13 15:11:03.000000000","message":"this irked me and partly motivated the change","commit_id":"cbfce216643ee593efc0f1e72c1087b48bc1a4cf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":762,"context_line":"        self.location \u003d self.conf.location"},{"line_number":763,"context_line":"        self._timestamp \u003d None"},{"line_number":764,"context_line":"        self._secret \u003d None"},{"line_number":765,"context_line":"        self._chunk_signature_valid \u003d True"},{"line_number":766,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":767,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":768,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"}],"source_content_type":"text/x-python","patch_set":1,"id":"6083c33c_18cc2cf6","side":"PARENT","line":765,"in_reply_to":"b99cb68c_73dd4435","updated":"2025-02-13 16:44:41.000000000","message":"Yeah, fair enough.","commit_id":"cbfce216643ee593efc0f1e72c1087b48bc1a4cf"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef9bbadcb058dcfafc091b52273cbfcbfd16056c","unresolved":true,"context_lines":[{"line_number":363,"context_line":"    def _check_signature(self, signature, string_to_sign):"},{"line_number":364,"context_line":"        raise NotImplementedError"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def check_signature(self, secret):"},{"line_number":367,"context_line":"        self._secret \u003d self._derive_secret(secret)"},{"line_number":368,"context_line":"        return self._check_signature(self.signature, self.string_to_sign)"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"60a8f5ed_039d05a8","line":366,"range":{"start_line":366,"start_character":8,"end_line":366,"end_character":23},"updated":"2025-02-13 15:11:03.000000000","message":"at one point I had this as ``__call__``, but in the v4 case it\u0027s not the only way external callers use the class, and I discovered that it\u0027s tricky to mock just ``__call__`` - I ended up mocking the class, but then that obvs loses the other methods.\n\nI ended up liking the explicit nature of how this checker is called.","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":472,"context_line":"            return False"},{"line_number":473,"context_line":"        # NB: string_to_sign is calculated using the previous signature"},{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"}],"source_content_type":"text/x-python","patch_set":1,"id":"27d266a9_c5fd9f40","line":475,"updated":"2025-02-13 16:44:41.000000000","message":"I don\u0027t think this should come up in practice, but there\u0027s an opportunity here for `self._chunk_signature_valid` to go `True -\u003e False -\u003e True` with subsequent calls -- I think I\u0027d prefer this to use an `\u0026\u003d`","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5989304d190b2bc4b96509a878f570ef438ae2ac","unresolved":true,"context_lines":[{"line_number":472,"context_line":"            return False"},{"line_number":473,"context_line":"        # NB: string_to_sign is calculated using the previous signature"},{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"}],"source_content_type":"text/x-python","patch_set":1,"id":"c13fcb5d_2436ac44","line":475,"in_reply_to":"27d266a9_c5fd9f40","updated":"2025-02-13 16:57:54.000000000","message":"good call, it should latch. perhaps rename to something like ``invalid_chunk_signature_detected`` ???","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3319c6b5c2ee9f02f543d7cc2fdc766c516fe7c5","unresolved":true,"context_lines":[{"line_number":472,"context_line":"            return False"},{"line_number":473,"context_line":"        # NB: string_to_sign is calculated using the previous signature"},{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"}],"source_content_type":"text/x-python","patch_set":1,"id":"91b68758_a9ac1b3e","line":475,"in_reply_to":"c13fcb5d_2436ac44","updated":"2025-02-13 18:27:49.000000000","message":"I suppose the early return was causing it to latch anyway, but still going for it.","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"57f7db06_09fa0704","line":477,"updated":"2025-02-13 16:44:41.000000000","message":"What about moving this line up one, like\n```\n        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)\n        self.signature \u003d signature\n        self._chunk_signature_valid \u003d self._check_signature(\n            self.signature, self.string_to_sign)\n```\n? At that point, every call to `_check_signature` has the same args, so we could drop them and always have it operate on the properties.","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5989304d190b2bc4b96509a878f570ef438ae2ac","unresolved":true,"context_lines":[{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"aac776e6_374cb95f","line":477,"in_reply_to":"57f7db06_09fa0704","updated":"2025-02-13 16:57:54.000000000","message":"ok, IIRC maybe it was that way in the original, I had a moment when I was very confused about the ordering until I grok\u0027d that the previous signature is used to get the string to sign.\n\nIn which case maybe ``_check_signature`` could become ``_calculate_signature`` and the comparison can be done in the common ``check_signature``","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3319c6b5c2ee9f02f543d7cc2fdc766c516fe7c5","unresolved":true,"context_lines":[{"line_number":474,"context_line":"        self.string_to_sign \u003d self._chunk_string_to_sign(chunk_sha256)"},{"line_number":475,"context_line":"        self._chunk_signature_valid \u003d self._check_signature("},{"line_number":476,"context_line":"            signature, self.string_to_sign)"},{"line_number":477,"context_line":"        self.signature \u003d signature"},{"line_number":478,"context_line":"        return self._chunk_signature_valid"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"13adc1b0_85854ecc","line":477,"in_reply_to":"aac776e6_374cb95f","updated":"2025-02-13 18:27:49.000000000","message":"Hmm -- except then this site won\u0027t be able to use either :-/","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @property"},{"line_number":487,"context_line":"    def _signature_version(self):"},{"line_number":488,"context_line":"        return \u00274\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    @property"},{"line_number":491,"context_line":"    def _is_query_auth(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3d10fd8d_9a9c4629","line":488,"updated":"2025-02-13 16:44:41.000000000","message":"We\u0027ll drop this again in the squash","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5989304d190b2bc4b96509a878f570ef438ae2ac","unresolved":true,"context_lines":[{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @property"},{"line_number":487,"context_line":"    def _signature_version(self):"},{"line_number":488,"context_line":"        return \u00274\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    @property"},{"line_number":491,"context_line":"    def _is_query_auth(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e99bdb21_87bc57d1","line":488,"in_reply_to":"3d10fd8d_9a9c4629","updated":"2025-02-13 16:57:54.000000000","message":"oops, sorry","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        return self._timestamp"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _install_sha256_hasher(self):"},{"line_number":538,"context_line":"        sig_checker \u003d SigCheckerV4(self)"},{"line_number":539,"context_line":"        aws_sha256 \u003d self.headers.get(\u0027x-amz-content-sha256\u0027)"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f6cbdc78_26d46219","line":537,"updated":"2025-02-13 16:44:41.000000000","message":"Maybe better as `_install_input_wrapper`?","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5989304d190b2bc4b96509a878f570ef438ae2ac","unresolved":true,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        return self._timestamp"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _install_sha256_hasher(self):"},{"line_number":538,"context_line":"        sig_checker \u003d SigCheckerV4(self)"},{"line_number":539,"context_line":"        aws_sha256 \u003d self.headers.get(\u0027x-amz-content-sha256\u0027)"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8b17c35d_ecbddd71","line":537,"in_reply_to":"f6cbdc78_26d46219","updated":"2025-02-13 16:57:54.000000000","message":"agree the name could be better","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef9bbadcb058dcfafc091b52273cbfcbfd16056c","unresolved":true,"context_lines":[{"line_number":535,"context_line":"        return self._timestamp"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _install_sha256_hasher(self):"},{"line_number":538,"context_line":"        sig_checker \u003d SigCheckerV4(self)"},{"line_number":539,"context_line":"        aws_sha256 \u003d self.headers.get(\u0027x-amz-content-sha256\u0027)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        if aws_sha256 in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"b45feade_3610f8bc","line":538,"updated":"2025-02-13 15:11:03.000000000","message":"by instantiating the SigCheckerV4 here in the mixin we can refer to it\u0027s check_chunk_signature method knowing it exists","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a63e559b08539582f079afdf2a60f987a94bfa87","unresolved":true,"context_lines":[{"line_number":916,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":917,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":918,"context_line":"        self._validate_headers()"},{"line_number":919,"context_line":"        self.sig_checker \u003d self._install_sha256_hasher()"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"        # Lock in string-to-sign now, before we start messing with query params"},{"line_number":922,"context_line":"        self.environ[\u0027s3api.auth_details\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"7710bc54_cc6cd977","line":919,"updated":"2025-02-13 16:44:41.000000000","message":"I feel like this would be better as something like\n```\nself.sig_checker \u003d self.sig_checker_cls()\nself._install_sha256_hasher()\n```\nIt\u0027s not obvious that `_install_sha256_hasher` should return a `BaseSigChecker`; if anything, it feels like it should return the hasher/input wrapper.","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5989304d190b2bc4b96509a878f570ef438ae2ac","unresolved":true,"context_lines":[{"line_number":916,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":917,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":918,"context_line":"        self._validate_headers()"},{"line_number":919,"context_line":"        self.sig_checker \u003d self._install_sha256_hasher()"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"        # Lock in string-to-sign now, before we start messing with query params"},{"line_number":922,"context_line":"        self.environ[\u0027s3api.auth_details\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"56647f3a_b97b31bb","line":919,"in_reply_to":"7710bc54_cc6cd977","updated":"2025-02-13 16:57:54.000000000","message":"IDK. I agree the name of the method could be better.\n\nI quite liked how it\u0027s obvious that the V4 ``_install_sha256_hasher`` creates the ``SigCheckerV4`` and so it\u0027s obviously reasonable to refer to its ``check_chunk_signature`` method in ``_install_sha256_hasher``, rather than just having to know that when reading ``_install_sha256_hasher`` the req.sig_checker happens to be a SigCheckerV4.\n\nI also wondered if I am gradually inching towards your previous refactor i.e. all the v2/v4 variation is hidden behind a single install-like method call ???","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef9bbadcb058dcfafc091b52273cbfcbfd16056c","unresolved":true,"context_lines":[{"line_number":1245,"context_line":"        # transfer, or a HTTP/1.0-style transfer (in which case swift will"},{"line_number":1246,"context_line":"        # reject with length-required and we\u0027ll translate back to"},{"line_number":1247,"context_line":"        # MissingContentLength)"},{"line_number":1248,"context_line":"        return sig_checker"},{"line_number":1249,"context_line":""},{"line_number":1250,"context_line":"    def _validate_headers(self):"},{"line_number":1251,"context_line":"        if \u0027CONTENT_LENGTH\u0027 in self.environ:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a619f425_d3c59503","line":1248,"updated":"2025-02-13 15:11:03.000000000","message":"so we now have a little bit of duplicated code here in order to have version specific SigCheckers instantiated, but maybe that is better for clarity anyway?","commit_id":"c9e5b27c6361dba72a98c746aed1d170c3fb2826"}]}
