)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0807d506_9e71cc25","updated":"2022-04-20 14:57:41.000000000","message":"i had some draft commnets - sorry if they overlap w/ Tim\n\nmostly I just think there should be more tests\n\nbut, i didn\u0027t verify the new /info message looks or how backwards comaptibility works","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"87b2ca26bd2dad6db03eeb5f96078c863071605e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"da39d015_5cf070f1","in_reply_to":"0807d506_9e71cc25","updated":"2022-05-24 09:45:01.000000000","message":"/info message:\n\n $ curl -s http://127.0.0.1:8080/info | jq \".formpost\"\n{\n  \"allowed_digests\": [\n    \"sha1\",\n    \"sha256\",\n    \"sha512\"\n  ]\n}\n\nThis is a bit different to the operator side, where there is a warning on the deprecated algo. I\u0027m wondering if an end-user should be informed as well that sha1 is allowed, but deprecated?","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"5f7b760ba908a6c98fa195ba81f78254caecb7fe","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"06f4bafc_d4864618","in_reply_to":"da39d015_5cf070f1","updated":"2022-05-24 09:47:31.000000000","message":"Scratch that for this patch, this comment is meant for the follow up on the deprecation patch.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"87b2ca26bd2dad6db03eeb5f96078c863071605e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9249c64f_54d601f1","updated":"2022-05-24 09:45:01.000000000","message":"I\u0027m close to a +2, some smaller nits inside.\nBesides this LGTM, works in my SAIO and does what it says. ","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"8ed9d75c7701aff2b3805ffb37766e916aa76df8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c91ee31f_7dae5171","updated":"2022-06-16 03:08:46.000000000","message":"Don\u0027t want to hold this up. Will whip up a follow up to cover the info extra assert you mention.","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d424a6bd_f5836bee","updated":"2022-06-14 20:23:01.000000000","message":"One thought on tests I\u0027d missed, but I think it could be a follow-up.","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a31dbd0ca0b03f91bc1225e57bc57ab66d6e56db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0fce4a24_da33cd7d","updated":"2022-06-16 04:18:10.000000000","message":"recheck","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a0e4cd01a34da104004c9c966ccf097a79ac4de6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"890abeb1_09df3b38","updated":"2022-06-16 16:56:38.000000000","message":"I think the previous probe test failures were either base-image problems or repo mirror problems. We\u0027ll see whether they\u0027ve resolved on their own or not...","commit_id":"ef31baf3fc064f7c83c7116d8d4374295915ec1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f61e97afa3edb323f65acdb4d9c281bd2f6d7a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b0d07b7b_cbcb0949","updated":"2022-06-17 20:11:01.000000000","message":"recheck\n\nSome sort of devstack error -- let\u0027s see if it has resolved on its own.","commit_id":"ef31baf3fc064f7c83c7116d8d4374295915ec1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3fd1ffaa97ea69dc907f6e9353033847af439de5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0c2fcbe5_81dccb64","updated":"2022-06-18 16:37:15.000000000","message":"recheck\n\nWe might have a flakey probe test...","commit_id":"ef31baf3fc064f7c83c7116d8d4374295915ec1c"}],"swift/common/middleware/formpost.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab0ec43c55222225012970887ab8fb66b4cdd47d","unresolved":true,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        has_valid_sig \u003d False"},{"line_number":414,"context_line":"        signature \u003d attributes.get(\u0027signature\u0027, \u0027\u0027)"},{"line_number":415,"context_line":"        hash_algorithm \u003d \u0027sha512\u0027"},{"line_number":416,"context_line":"        if \u0027:\u0027 in signature:"},{"line_number":417,"context_line":"            hash_algorithm, signature \u003d signature.split(\u0027:\u0027, 1)"},{"line_number":418,"context_line":"            attributes[\u0027signature\u0027] \u003d signature"}],"source_content_type":"text/x-python","patch_set":1,"id":"52df2f22_d9504e58","line":415,"updated":"2022-04-20 05:44:49.000000000","message":"Oh, interesting... so you can specify prefixed guys like\n\n sha1:...\n sha256:...\n sha512:...\n\nBut if you go unprefixed, it can handle *either* sha1 or sha512? I wonder if we should add some length-detection for sha256, too...","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a6dd380d85f4a59999daa08fd4efd0c8be890879","unresolved":false,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        has_valid_sig \u003d False"},{"line_number":414,"context_line":"        signature \u003d attributes.get(\u0027signature\u0027, \u0027\u0027)"},{"line_number":415,"context_line":"        hash_algorithm \u003d \u0027sha512\u0027"},{"line_number":416,"context_line":"        if \u0027:\u0027 in signature:"},{"line_number":417,"context_line":"            hash_algorithm, signature \u003d signature.split(\u0027:\u0027, 1)"},{"line_number":418,"context_line":"            attributes[\u0027signature\u0027] \u003d signature"}],"source_content_type":"text/x-python","patch_set":1,"id":"9e6e19a0_527ecc62","line":415,"in_reply_to":"52df2f22_d9504e58","updated":"2022-04-27 23:05:07.000000000","message":"Ack","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab0ec43c55222225012970887ab8fb66b4cdd47d","unresolved":true,"context_lines":[{"line_number":419,"context_line":"            if hash_algorithm not in self.allowed_digests:"},{"line_number":420,"context_line":"                raise FormUnauthorized(\u0027invalid signature\u0027)"},{"line_number":421,"context_line":"        elif len(signature) \u003d\u003d 40:"},{"line_number":422,"context_line":"            hash_algorithm \u003d \u0027sha1\u0027"},{"line_number":423,"context_line":"        if six.PY2:"},{"line_number":424,"context_line":"            hash_algorithm \u003d getattr(hashlib, hash_algorithm)"},{"line_number":425,"context_line":"        for key in keys:"}],"source_content_type":"text/x-python","patch_set":1,"id":"84aae69b_7ae42f3d","line":422,"updated":"2022-04-20 05:44:49.000000000","message":"Do we have test coverage for this? The gate\u0027s reports make me think no...\n\nMainly worried because this is our primary upgrade path.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            if hash_algorithm not in self.allowed_digests:"},{"line_number":420,"context_line":"                raise FormUnauthorized(\u0027invalid signature\u0027)"},{"line_number":421,"context_line":"        elif len(signature) \u003d\u003d 40:"},{"line_number":422,"context_line":"            hash_algorithm \u003d \u0027sha1\u0027"},{"line_number":423,"context_line":"        if six.PY2:"},{"line_number":424,"context_line":"            hash_algorithm \u003d getattr(hashlib, hash_algorithm)"},{"line_number":425,"context_line":"        for key in keys:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4547bc1_5798f25c","line":422,"in_reply_to":"7b16145e_a01764dc","updated":"2022-06-14 20:23:01.000000000","message":"Done","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d973c8760951fec7a8b5d08189f537550c5b8bc0","unresolved":true,"context_lines":[{"line_number":419,"context_line":"            if hash_algorithm not in self.allowed_digests:"},{"line_number":420,"context_line":"                raise FormUnauthorized(\u0027invalid signature\u0027)"},{"line_number":421,"context_line":"        elif len(signature) \u003d\u003d 40:"},{"line_number":422,"context_line":"            hash_algorithm \u003d \u0027sha1\u0027"},{"line_number":423,"context_line":"        if six.PY2:"},{"line_number":424,"context_line":"            hash_algorithm \u003d getattr(hashlib, hash_algorithm)"},{"line_number":425,"context_line":"        for key in keys:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b16145e_a01764dc","line":422,"in_reply_to":"84aae69b_7ae42f3d","updated":"2022-05-02 01:53:29.000000000","message":"Do now :)","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    if not_supported:"},{"line_number":492,"context_line":"        logger.warning(\u0027The following digest algorithms are configured but \u0027"},{"line_number":493,"context_line":"                       \u0027not supported: %s\u0027, \u0027, \u0027.join(not_supported))"},{"line_number":494,"context_line":"        allowed_digests -\u003d not_supported"},{"line_number":495,"context_line":"    if not allowed_digests:"},{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae82cef1_40d3253d","line":494,"updated":"2022-04-20 14:57:41.000000000","message":"i wonder if modifying if someone adds \"fizzbuzz\" to the list of algos, if we\u0027re better off modifying the configuration or refusing to start?\n\nI could see an argument that at somepoint in the future if we deprecate a algo that used to be allowed we might want to log a warning before we invalidate and refuse to start with the unsupported config.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"455e2a7fecdadd38bea816e18c3a5ed99e6cbd28","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    if not_supported:"},{"line_number":492,"context_line":"        logger.warning(\u0027The following digest algorithms are configured but \u0027"},{"line_number":493,"context_line":"                       \u0027not supported: %s\u0027, \u0027, \u0027.join(not_supported))"},{"line_number":494,"context_line":"        allowed_digests -\u003d not_supported"},{"line_number":495,"context_line":"    if not allowed_digests:"},{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c99c1613_a6067860","line":494,"in_reply_to":"34597f20_149f0d6f","updated":"2022-05-27 05:44:37.000000000","message":"I can appreciate the argument for consistency with tempurl. FWIW, I think my original thinking there was that if we ever add more supported digests, ops might want to be able to add to their config ahead of upgrading Swift, and have it take effect whenever they actually get to upgrading the node.\n\nI\u0027d be fine with turning up the severity, though. Or even turning it into a hard error, w/e.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"69f9ea676c3f3fd6661a11fa320c241aa3c31bba","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    if not_supported:"},{"line_number":492,"context_line":"        logger.warning(\u0027The following digest algorithms are configured but \u0027"},{"line_number":493,"context_line":"                       \u0027not supported: %s\u0027, \u0027, \u0027.join(not_supported))"},{"line_number":494,"context_line":"        allowed_digests -\u003d not_supported"},{"line_number":495,"context_line":"    if not allowed_digests:"},{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"de576691_a7b813e6","line":494,"in_reply_to":"ae82cef1_40d3253d","updated":"2022-04-22 05:59:51.000000000","message":"The next patch adds sha1 to deprecated so it\u0027ll warn. Left it out here because we had nothing atm to deprecate.\n\nThe idea is, the digest can be prepended, so some of them might stil be useful. But thinking about it, it might be nice to fail to start if there is a misconfiguration, like a digest we don\u0027t support. I\u0027ll raise an error in it.\n\nMost of this is pulled from the tempurl code and so it also just warns, not errors out. But might be worth the change in both.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d973c8760951fec7a8b5d08189f537550c5b8bc0","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    if not_supported:"},{"line_number":492,"context_line":"        logger.warning(\u0027The following digest algorithms are configured but \u0027"},{"line_number":493,"context_line":"                       \u0027not supported: %s\u0027, \u0027, \u0027.join(not_supported))"},{"line_number":494,"context_line":"        allowed_digests -\u003d not_supported"},{"line_number":495,"context_line":"    if not allowed_digests:"},{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e705d517_a76c6fb2","line":494,"in_reply_to":"de576691_a7b813e6","updated":"2022-05-02 01:53:29.000000000","message":"Still need to think about whether to fail to start on this or not. Currently we don\u0027t in tempurl.. but maybe we should be (as clay mentions).","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"87b2ca26bd2dad6db03eeb5f96078c863071605e","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    if not_supported:"},{"line_number":492,"context_line":"        logger.warning(\u0027The following digest algorithms are configured but \u0027"},{"line_number":493,"context_line":"                       \u0027not supported: %s\u0027, \u0027, \u0027.join(not_supported))"},{"line_number":494,"context_line":"        allowed_digests -\u003d not_supported"},{"line_number":495,"context_line":"    if not allowed_digests:"},{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"34597f20_149f0d6f","line":494,"in_reply_to":"e705d517_a76c6fb2","updated":"2022-05-24 09:45:01.000000000","message":"Nit: in case of the unsupported algorithms - maybe the logging should be error in that case? Warning if deprecated, error if using unsupported? Goes both for tempurl and formpost.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":true,"context_lines":[{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"},{"line_number":498,"context_line":"    info \u003d {\u0027allowed_digests\u0027: sorted(allowed_digests)}"},{"line_number":499,"context_line":"    register_swift_info(\u0027formpost\u0027, **info)"},{"line_number":500,"context_line":"    conf.update(info)"},{"line_number":501,"context_line":"    return lambda app: FormPost(app, conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb6f82e4_2d464a35","line":499,"updated":"2022-04-20 14:57:41.000000000","message":"is any of this tested?","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d973c8760951fec7a8b5d08189f537550c5b8bc0","unresolved":true,"context_lines":[{"line_number":496,"context_line":"        raise ValueError(\u0027No valid digest algorithms are configured \u0027"},{"line_number":497,"context_line":"                         \u0027for formpost\u0027)"},{"line_number":498,"context_line":"    info \u003d {\u0027allowed_digests\u0027: sorted(allowed_digests)}"},{"line_number":499,"context_line":"    register_swift_info(\u0027formpost\u0027, **info)"},{"line_number":500,"context_line":"    conf.update(info)"},{"line_number":501,"context_line":"    return lambda app: FormPost(app, conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3270b1df_8f071656","line":499,"in_reply_to":"bb6f82e4_2d464a35","updated":"2022-05-02 01:53:29.000000000","message":"is now.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"455e2a7fecdadd38bea816e18c3a5ed99e6cbd28","unresolved":true,"context_lines":[{"line_number":414,"context_line":"        signature \u003d attributes.get(\u0027signature\u0027, \u0027\u0027)"},{"line_number":415,"context_line":"        hash_algorithm \u003d \u0027sha512\u0027"},{"line_number":416,"context_line":"        if \u0027:\u0027 in signature:"},{"line_number":417,"context_line":"            hash_algorithm, signature \u003d signature.split(\u0027:\u0027, 1)"},{"line_number":418,"context_line":"            attributes[\u0027signature\u0027] \u003d signature"},{"line_number":419,"context_line":"            if hash_algorithm not in self.allowed_digests:"},{"line_number":420,"context_line":"                raise FormUnauthorized(\u0027invalid signature\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bbf0e800_b8ab0e46","line":417,"updated":"2022-05-27 05:44:37.000000000","message":"So these sigs are always hex and the base64 stuff I added for tempurl is not available here, yeah?","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        signature \u003d attributes.get(\u0027signature\u0027, \u0027\u0027)"},{"line_number":415,"context_line":"        hash_algorithm \u003d \u0027sha512\u0027"},{"line_number":416,"context_line":"        if \u0027:\u0027 in signature:"},{"line_number":417,"context_line":"            hash_algorithm, signature \u003d signature.split(\u0027:\u0027, 1)"},{"line_number":418,"context_line":"            attributes[\u0027signature\u0027] \u003d signature"},{"line_number":419,"context_line":"            if hash_algorithm not in self.allowed_digests:"},{"line_number":420,"context_line":"                raise FormUnauthorized(\u0027invalid signature\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2955883a_924b5067","line":417,"in_reply_to":"bbf0e800_b8ab0e46","updated":"2022-06-14 20:23:01.000000000","message":"Done","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"}],"swift/common/utils.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"8ed9d75c7701aff2b3805ffb37766e916aa76df8","unresolved":true,"context_lines":[{"line_number":319,"context_line":"        }.get(len(value))"},{"line_number":320,"context_line":"        if not algo:"},{"line_number":321,"context_line":"            raise ValueError(\u0027Bad digest length\u0027)"},{"line_number":322,"context_line":"    return algo, value"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"def get_hmac(request_method, path, expires, key, digest\u003d\"sha1\","}],"source_content_type":"text/x-python","patch_set":6,"id":"00381b78_76a9ac8f","line":322,"updated":"2022-06-16 03:08:46.000000000","message":"Nice refactor! Thanks Tim!","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"}],"test/unit/common/middleware/test_formpost.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":true,"context_lines":[{"line_number":188,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":189,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":190,"context_line":"            \u0027\u0027,"},{"line_number":191,"context_line":"            sig,"},{"line_number":192,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":193,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":194,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d861a9fd_a6133291","side":"PARENT","line":191,"updated":"2022-04-20 14:57:41.000000000","message":"is there any tests that cover the old default sha1 style signatures that do not include the algo?","commit_id":"c8aad9b87a60dfff701f31cdee74748172a06669"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab0ec43c55222225012970887ab8fb66b4cdd47d","unresolved":true,"context_lines":[{"line_number":193,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":194,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":195,"context_line":"            \u0027\u0027,"},{"line_number":196,"context_line":"            \"%s:%s\" % (alg_name, sig),"},{"line_number":197,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":198,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":199,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9d4fc3f9_4740475a","line":196,"updated":"2022-04-20 05:44:49.000000000","message":"So _make_sig_env_body always does prefixed sigs...","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a6dd380d85f4a59999daa08fd4efd0c8be890879","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":194,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":195,"context_line":"            \u0027\u0027,"},{"line_number":196,"context_line":"            \"%s:%s\" % (alg_name, sig),"},{"line_number":197,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":198,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":199,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccde64fa_2163fd1b","line":196,"in_reply_to":"9d4fc3f9_4740475a","updated":"2022-04-27 23:05:07.000000000","message":"Done","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab0ec43c55222225012970887ab8fb66b4cdd47d","unresolved":true,"context_lines":[{"line_number":323,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":324,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":325,"context_line":"            \u0027\u0027,"},{"line_number":326,"context_line":"            sig,"},{"line_number":327,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":328,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":329,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6c4e1c_93945102","line":326,"range":{"start_line":326,"start_character":12,"end_line":326,"end_character":15},"updated":"2022-04-20 05:44:49.000000000","message":"Cool, so we\u0027ve got coverage for the non-prefixed sha512 sigs.","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":324,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":325,"context_line":"            \u0027\u0027,"},{"line_number":326,"context_line":"            sig,"},{"line_number":327,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":328,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":329,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4857b884_d3d66067","line":326,"range":{"start_line":326,"start_character":12,"end_line":326,"end_character":15},"in_reply_to":"9f6c4e1c_93945102","updated":"2022-06-14 20:23:01.000000000","message":"Ack","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":true,"context_lines":[{"line_number":1584,"context_line":"                self.formpost \u003d formpost.filter_factory("},{"line_number":1585,"context_line":"                    {"},{"line_number":1586,"context_line":"                        \u0027allowed_digests\u0027:"},{"line_number":1587,"context_line":"                            formpost.DEFAULT_ALLOWED_DIGESTS})(self.auth)"},{"line_number":1588,"context_line":"            status \u003d [None]"},{"line_number":1589,"context_line":"            headers \u003d [None]"},{"line_number":1590,"context_line":"            exc_info \u003d [None]"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa91644a_dedcc6b8","line":1587,"updated":"2022-04-20 14:57:41.000000000","message":"do we test any other configurations?","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"663a17472894fb2d1d1a10596fbbfabc86360faf","unresolved":true,"context_lines":[{"line_number":1598,"context_line":"            status \u003d status[0]"},{"line_number":1599,"context_line":"            headers \u003d headers[0]"},{"line_number":1600,"context_line":"            exc_info \u003d exc_info[0]"},{"line_number":1601,"context_line":"            if expect_unauth:"},{"line_number":1602,"context_line":"                self.assertEqual(status, \u0027401 Unauthorized\u0027)"},{"line_number":1603,"context_line":"                return"},{"line_number":1604,"context_line":"            self.assertEqual(status, \u0027303 See Other\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e83ef69e_6c7ae371","line":1601,"updated":"2022-04-20 14:57:41.000000000","message":"this kind of feels like a different test than the others; maybe the helper should just do the request and capture and return the response - then the \"success\" test does some assertions and a \"fail\" test does some (different) assertions","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a6dd380d85f4a59999daa08fd4efd0c8be890879","unresolved":false,"context_lines":[{"line_number":1598,"context_line":"            status \u003d status[0]"},{"line_number":1599,"context_line":"            headers \u003d headers[0]"},{"line_number":1600,"context_line":"            exc_info \u003d exc_info[0]"},{"line_number":1601,"context_line":"            if expect_unauth:"},{"line_number":1602,"context_line":"                self.assertEqual(status, \u0027401 Unauthorized\u0027)"},{"line_number":1603,"context_line":"                return"},{"line_number":1604,"context_line":"            self.assertEqual(status, \u0027303 See Other\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e8a3b71_e3f41484","line":1601,"in_reply_to":"e83ef69e_6c7ae371","updated":"2022-04-27 23:05:07.000000000","message":"Done","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab0ec43c55222225012970887ab8fb66b4cdd47d","unresolved":true,"context_lines":[{"line_number":1613,"context_line":"            self.assertEqual(self.app.requests[0].body, b\u0027Test File\\nOne\\n\u0027)"},{"line_number":1614,"context_line":"            self.assertEqual(self.app.requests[1].body, b\u0027Test\\nFile\\nTwo\\n\u0027)"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        for algorithm in formpost.DEFAULT_ALLOWED_DIGESTS.split():"},{"line_number":1617,"context_line":"            do_test(algorithm)"},{"line_number":1618,"context_line":""},{"line_number":1619,"context_line":"        # unsupported"}],"source_content_type":"text/x-python","patch_set":1,"id":"85f9a0fe_974ba9d4","line":1616,"range":{"start_line":1616,"start_character":34,"end_line":1616,"end_character":57},"updated":"2022-04-20 05:44:49.000000000","message":"Bugs me a little that we\u0027re obscuring what these actually are. Like, does this cover the sha1 case or not? :-/","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a6dd380d85f4a59999daa08fd4efd0c8be890879","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"            self.assertEqual(self.app.requests[0].body, b\u0027Test File\\nOne\\n\u0027)"},{"line_number":1614,"context_line":"            self.assertEqual(self.app.requests[1].body, b\u0027Test\\nFile\\nTwo\\n\u0027)"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        for algorithm in formpost.DEFAULT_ALLOWED_DIGESTS.split():"},{"line_number":1617,"context_line":"            do_test(algorithm)"},{"line_number":1618,"context_line":""},{"line_number":1619,"context_line":"        # unsupported"}],"source_content_type":"text/x-python","patch_set":1,"id":"75274c7c_98056293","line":1616,"range":{"start_line":1616,"start_character":34,"end_line":1616,"end_character":57},"in_reply_to":"85f9a0fe_974ba9d4","updated":"2022-04-27 23:05:07.000000000","message":"Done","commit_id":"0644def3daa8d92d157e979255dbb82c23eff808"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"455e2a7fecdadd38bea816e18c3a5ed99e6cbd28","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":195,"context_line":"            \u0027\u0027,"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            \"%s\" % (\"%s:%s\" % (alg_name, sig) if prefix else sig),"},{"line_number":198,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":200,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"de06089a_797ffcc0","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":18},"updated":"2022-05-27 05:44:37.000000000","message":"nit: The `\"%s\" %` is unnecessary.","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"signature\"\u0027,"},{"line_number":195,"context_line":"            \u0027\u0027,"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            \"%s\" % (\"%s:%s\" % (alg_name, sig) if prefix else sig),"},{"line_number":198,"context_line":"            \u0027------WebKitFormBoundaryNcxTqxSlX7t4TDkR\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Disposition: form-data; name\u003d\"file1\"; \u0027"},{"line_number":200,"context_line":"            \u0027filename\u003d\"testfile1.txt\"\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"4392fbb0_e6225fde","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":18},"in_reply_to":"de06089a_797ffcc0","updated":"2022-06-14 20:23:01.000000000","message":"Done","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"87b2ca26bd2dad6db03eeb5f96078c863071605e","unresolved":true,"context_lines":[{"line_number":1492,"context_line":"            body \u003d b\u0027\u0027.join(self.formpost(env, start_response))"},{"line_number":1493,"context_line":"            status \u003d status[0]"},{"line_number":1494,"context_line":"            headers \u003d headers[0]"},{"line_number":1495,"context_line":"            exc_info \u003d exc_info[0]"},{"line_number":1496,"context_line":"            self.assertEqual(status, \u0027201 Created\u0027)"},{"line_number":1497,"context_line":"            location \u003d None"},{"line_number":1498,"context_line":"            for h, v in headers:"}],"source_content_type":"text/x-python","patch_set":4,"id":"00de7d5a_744d9919","line":1495,"updated":"2022-05-24 09:45:01.000000000","message":"There\u0027s some repeated code further below - basically everything the do_test until the exc_info line, wondering if this could be common code? Might be a follow up as well.","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"455e2a7fecdadd38bea816e18c3a5ed99e6cbd28","unresolved":true,"context_lines":[{"line_number":1536,"context_line":"            body \u003d b\u0027\u0027.join(self.formpost(env, start_response))"},{"line_number":1537,"context_line":"            status \u003d status[0]"},{"line_number":1538,"context_line":"            headers \u003d headers[0]"},{"line_number":1539,"context_line":"            exc_info \u003d exc_info[0]"},{"line_number":1540,"context_line":"            self.assertEqual(status, \u0027401 Unauthorized\u0027)"},{"line_number":1541,"context_line":""},{"line_number":1542,"context_line":"        for digest in (\u0027md5\u0027, \u0027sha224\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"953cba4c_7b8a5be0","line":1539,"updated":"2022-05-27 05:44:37.000000000","message":"Looks like neither headers nor exc_info is meaningfully used -- we should either make assertions on them or stop tracking them.","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"            body \u003d b\u0027\u0027.join(self.formpost(env, start_response))"},{"line_number":1537,"context_line":"            status \u003d status[0]"},{"line_number":1538,"context_line":"            headers \u003d headers[0]"},{"line_number":1539,"context_line":"            exc_info \u003d exc_info[0]"},{"line_number":1540,"context_line":"            self.assertEqual(status, \u0027401 Unauthorized\u0027)"},{"line_number":1541,"context_line":""},{"line_number":1542,"context_line":"        for digest in (\u0027md5\u0027, \u0027sha224\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4f55ea9a_c3f5270a","line":1539,"in_reply_to":"953cba4c_7b8a5be0","updated":"2022-06-14 20:23:01.000000000","message":"Done","commit_id":"1834becb99ba973559e1014d80447847af15ccb2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1c3eb8e9701e00c9e515eb3a99fb6bed1318a5a3","unresolved":true,"context_lines":[{"line_number":2251,"context_line":"        self.assertIn(\u0027formpost\u0027, swift_info)"},{"line_number":2252,"context_line":"        info \u003d swift_info[\u0027formpost\u0027]"},{"line_number":2253,"context_line":"        self.assertIn(\u0027allowed_digests\u0027, info)"},{"line_number":2254,"context_line":"        self.assertEqual(info[\u0027allowed_digests\u0027], [\u0027sha1\u0027, \u0027sha512\u0027])"},{"line_number":2255,"context_line":""},{"line_number":2256,"context_line":"    def test_bad_config(self):"},{"line_number":2257,"context_line":"        with self.assertRaises(ValueError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"4cde1594_d9c7d008","line":2254,"updated":"2022-06-14 20:23:01.000000000","message":"Should probably assert some logging about the md5 and not-a-valid-digest entries.","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a0e4cd01a34da104004c9c966ccf097a79ac4de6","unresolved":false,"context_lines":[{"line_number":2251,"context_line":"        self.assertIn(\u0027formpost\u0027, swift_info)"},{"line_number":2252,"context_line":"        info \u003d swift_info[\u0027formpost\u0027]"},{"line_number":2253,"context_line":"        self.assertIn(\u0027allowed_digests\u0027, info)"},{"line_number":2254,"context_line":"        self.assertEqual(info[\u0027allowed_digests\u0027], [\u0027sha1\u0027, \u0027sha512\u0027])"},{"line_number":2255,"context_line":""},{"line_number":2256,"context_line":"    def test_bad_config(self):"},{"line_number":2257,"context_line":"        with self.assertRaises(ValueError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f25404c_bbd1e59a","line":2254,"in_reply_to":"4cde1594_d9c7d008","updated":"2022-06-16 16:56:38.000000000","message":"Done","commit_id":"f87968a5b73f3a8ddeaece0fc1e201ffc4fa48e8"}]}
