)]}'
{"ironic_inspector/test/unit/test_main.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bc917360d2d679e79e7054f5a194f61379f01b","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        res \u003d self.app.get(\u0027/\u0027)"},{"line_number":163,"context_line":"        self.assertEqual(200, res.status_code)"},{"line_number":164,"context_line":"        res \u003d self.app.get(\u0027/v1\u0027)"},{"line_number":165,"context_line":"        self.assertEqual(200, res.status_code)"},{"line_number":166,"context_line":"        res \u003d self.app.get(\u0027/v1/introspection\u0027)"},{"line_number":167,"context_line":"        self.assertEqual(401, res.status_code)"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_37ce0bb4","line":165,"updated":"2020-07-23 14:07:51.000000000","message":"nit: please add POST /v1/continue","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"5e4ae238e95e3a178d99e67c3b90f3d0d37dddad","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        res \u003d self.app.get(\u0027/\u0027)"},{"line_number":163,"context_line":"        self.assertEqual(200, res.status_code)"},{"line_number":164,"context_line":"        res \u003d self.app.get(\u0027/v1\u0027)"},{"line_number":165,"context_line":"        self.assertEqual(200, res.status_code)"},{"line_number":166,"context_line":"        res \u003d self.app.get(\u0027/v1/introspection\u0027)"},{"line_number":167,"context_line":"        self.assertEqual(401, res.status_code)"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_e22ccc4b","line":165,"in_reply_to":"bf51134e_37ce0bb4","updated":"2020-07-23 21:31:24.000000000","message":"continue uses the same is_public_api flag as / and /v1 so I\u0027m assuming this much testing is enough","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"}],"ironic_inspector/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cb0f46c2561cbeab362d5c8d3538ecd6fc7e7485","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        super(NoAvailableConductor, self).__init__(msg, code\u003d503, **kwargs)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"class DeferredBasicAuthMiddleware(object):"},{"line_number":175,"context_line":"    \"\"\"Middleware which sets X-Identity-Status header based on authentication"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_9599f6d1","line":174,"updated":"2020-07-22 09:00:33.000000000","message":"I know it will take a bit longer, but can we make this a flag of BasicAuthMiddleware? Similarly to delay_auth_decision in keystoneauth?","commit_id":"216658db4ede97059bb11941d896e0ffcc9aa2eb"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"7e4d64024d5835ad86bb87948d781b3bbdc50766","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        super(NoAvailableConductor, self).__init__(msg, code\u003d503, **kwargs)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"class DeferredBasicAuthMiddleware(object):"},{"line_number":175,"context_line":"    \"\"\"Middleware which sets X-Identity-Status header based on authentication"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_488b321d","line":174,"in_reply_to":"bf51134e_9599f6d1","updated":"2020-07-22 22:52:47.000000000","message":"Yes, but I just tested writing the X-Identity-Status header in a custom start_response function, and it happens after the call to check_auth.\n\nThis means to support delay_auth_decision in the ironic-lib middleware it will have to be converted to @webob.dec.wsgify, which is fine but will take a bit longer.\n\nSo its good that this can land in the meantime :)","commit_id":"216658db4ede97059bb11941d896e0ffcc9aa2eb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bc917360d2d679e79e7054f5a194f61379f01b","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            headers[\u0027X-Identity-Status\u0027] \u003d \u0027Invalid\u0027"},{"line_number":201,"context_line":"        except exception.IronicException as e:"},{"line_number":202,"context_line":"            status \u003d \u0027%s %s\u0027 % (int(e.code), str(e))"},{"line_number":203,"context_line":"            resp \u003d webob.Response(status\u003dstatus)"},{"line_number":204,"context_line":"            resp.headers.update(e.headers)"},{"line_number":205,"context_line":"            return resp"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_97c43794","line":203,"updated":"2020-07-23 14:07:51.000000000","message":"nit: status_code\u003dint(e.code)","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ce2f11829b03972f242bad975c1c1d79be1ac6db","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            headers[\u0027X-Identity-Status\u0027] \u003d \u0027Invalid\u0027"},{"line_number":201,"context_line":"        except exception.IronicException as e:"},{"line_number":202,"context_line":"            status \u003d \u0027%s %s\u0027 % (int(e.code), str(e))"},{"line_number":203,"context_line":"            resp \u003d webob.Response(status\u003dstatus)"},{"line_number":204,"context_line":"            resp.headers.update(e.headers)"},{"line_number":205,"context_line":"            return resp"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_8b06c81f","line":203,"in_reply_to":"bf51134e_02110005","updated":"2020-07-24 09:00:51.000000000","message":"We need to do it in the body, not via the status line. str(e) may be too long or even contain new lines. see my ironic-lib patch https://review.opendev.org/#/c/742643/","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"5e4ae238e95e3a178d99e67c3b90f3d0d37dddad","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            headers[\u0027X-Identity-Status\u0027] \u003d \u0027Invalid\u0027"},{"line_number":201,"context_line":"        except exception.IronicException as e:"},{"line_number":202,"context_line":"            status \u003d \u0027%s %s\u0027 % (int(e.code), str(e))"},{"line_number":203,"context_line":"            resp \u003d webob.Response(status\u003dstatus)"},{"line_number":204,"context_line":"            resp.headers.update(e.headers)"},{"line_number":205,"context_line":"            return resp"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_02110005","line":203,"in_reply_to":"bf51134e_97c43794","updated":"2020-07-23 21:31:24.000000000","message":"Doing it this way means the response text has a useful error message instead of the generic http text","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bc917360d2d679e79e7054f5a194f61379f01b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    :param target: dict-like structure to check rule against"},{"line_number":255,"context_line":"    :raises: utils.Error if access is denied"},{"line_number":256,"context_line":"    \"\"\""},{"line_number":257,"context_line":"    if CONF.auth_strategy not in (\u0027keystone\u0027, \u0027http_basic\u0027):"},{"line_number":258,"context_line":"        return"},{"line_number":259,"context_line":"    if not request.context.is_public_api:"},{"line_number":260,"context_line":"        if request.headers.get(\u0027X-Identity-Status\u0027, \u0027\u0027).lower() \u003d\u003d \u0027invalid\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_77bfe3fb","line":257,"updated":"2020-07-23 14:07:51.000000000","message":"nit: \u003d\u003d \u0027noauth\u0027","commit_id":"92c64226f43ebcef7a79ba11d4b428276c3fb37f"}]}
