)]}'
{"keystone/api/users.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2a209cbc1c01598d38a6ba18cfd2a83a023be501","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# This file handles all flask-restful resources for /v3/users"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import base64"},{"line_number":16,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_28559a1e","line":13,"updated":"2018-10-10 19:38:17.000000000","message":"Do we *have* to stick all of these endpoints in here? It\u0027s kind of an unfortunate shortsightedness that we glombed a bunch of stuff under /v3/users, but they\u0027re really separate APIs and creating a massive module to hold all of them is :(","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"1992ac3f0c3dc4809639d09156b58f412356f93f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# This file handles all flask-restful resources for /v3/users"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import base64"},{"line_number":16,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_94a4d5a5","line":13,"in_reply_to":"3f79a3b5_1ee01497","updated":"2018-10-12 15:32:32.000000000","message":"The \"keystone.api.users.*\" idea sounds good for breaking this up if we do in the future.","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"425b3978346ad01996fba81d5ef860dc2caf1fc7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# This file handles all flask-restful resources for /v3/users"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import base64"},{"line_number":16,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1ee01497","line":13,"in_reply_to":"3f79a3b5_28559a1e","updated":"2018-10-10 20:44:12.000000000","message":"We could split it into a module, but the design was to isolate the prefixes so you can always figure out where things are supposed to be (and not be surprised that changing keystone.api.users affected keystone.api.application_credentials for example because they hooked into the same paths with different routers).\n\nI think this also highlights short comings in our design and will help us move in the furture to less \"oh we can just make this part of \u0027users\u0027\" mentalitly).\n\nIt is possible to split this up, however, I\u0027d like to (at the very least) keep everything in keystone.api.users if it is prefixed /v3/users (even if that becomes something like keystone.api.users.application_credentials, etc)","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ee2b0b2e3737e2d7e25718de824c17b8d6b97761","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class UserChangePasswordResource(ks_flask.ResourceBase):"},{"line_number":196,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":197,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @ks_flask.unenforced_api"},{"line_number":200,"context_line":"    def get(self, user_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_405f7174","line":197,"range":{"start_line":196,"start_character":4,"end_line":197,"end_character":29},"updated":"2018-10-11 19:43:49.000000000","message":"Does this leak anywhere if it has to be defined? Even though there is only one other occurrence of this specific definition in keystone/api/auth.py, it would be nice to try and find a way for ks_flask.ResourceBase to deal with it.","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f2887d046ae503bd53caebca2f5f6b1135b4024c","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class UserChangePasswordResource(ks_flask.ResourceBase):"},{"line_number":196,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":197,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @ks_flask.unenforced_api"},{"line_number":200,"context_line":"    def get(self, user_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_368cfb2c","line":197,"range":{"start_line":196,"start_character":4,"end_line":197,"end_character":29},"in_reply_to":"3f79a3b5_405f7174","updated":"2018-10-11 20:54:23.000000000","message":"We can add an extra check to raise if it\u0027s set to __UNUSED__. or similar other object. I\u0027ll add it down the chain.\n\nI wont leak unless someone uses .wrap_member or .wrap_collection.","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ee2b0b2e3737e2d7e25718de824c17b8d6b97761","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    def get(self, user_id):"},{"line_number":398,"context_line":"        \"\"\"List OAuth1 Access Tokens for user."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        GET /v3/users/{user_id}/OS\u003dOAUTH1/access_tokens"},{"line_number":401,"context_line":"        \"\"\""},{"line_number":402,"context_line":"        ENFORCER.enforce_call(action\u003d\u0027identity:list_access_tokens\u0027)"},{"line_number":403,"context_line":"        if self.oslo_context.is_delegated_auth:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e0fd5d3b","line":400,"range":{"start_line":400,"start_character":34,"end_line":400,"end_character":35},"updated":"2018-10-11 19:43:49.000000000","message":"-*","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f2887d046ae503bd53caebca2f5f6b1135b4024c","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    def get(self, user_id):"},{"line_number":398,"context_line":"        \"\"\"List OAuth1 Access Tokens for user."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        GET /v3/users/{user_id}/OS\u003dOAUTH1/access_tokens"},{"line_number":401,"context_line":"        \"\"\""},{"line_number":402,"context_line":"        ENFORCER.enforce_call(action\u003d\u0027identity:list_access_tokens\u0027)"},{"line_number":403,"context_line":"        if self.oslo_context.is_delegated_auth:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_16977f3b","line":400,"range":{"start_line":400,"start_character":34,"end_line":400,"end_character":35},"in_reply_to":"3f79a3b5_e0fd5d3b","updated":"2018-10-11 20:54:23.000000000","message":"Fixed in followup. Damn, missed this one :P","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"}],"keystone/server/flask/common.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2a209cbc1c01598d38a6ba18cfd2a83a023be501","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        if token_ref.domain_scoped:"},{"line_number":922,"context_line":"            return token_ref.domain_id"},{"line_number":923,"context_line":"        elif token_ref.project_scoped:"},{"line_number":924,"context_line":"            return token_ref.project_domain[\u0027id\u0027]"},{"line_number":925,"context_line":"        else:"},{"line_number":926,"context_line":"            msg \u003d \u0027No domain information specified as part of list request\u0027"},{"line_number":927,"context_line":"            tr_msg \u003d _(\u0027No domain information specified as part of list \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4889f6c4","line":924,"updated":"2018-10-10 19:38:17.000000000","message":"Why did this change?","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"425b3978346ad01996fba81d5ef860dc2caf1fc7","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        if token_ref.domain_scoped:"},{"line_number":922,"context_line":"            return token_ref.domain_id"},{"line_number":923,"context_line":"        elif token_ref.project_scoped:"},{"line_number":924,"context_line":"            return token_ref.project_domain[\u0027id\u0027]"},{"line_number":925,"context_line":"        else:"},{"line_number":926,"context_line":"            msg \u003d \u0027No domain information specified as part of list request\u0027"},{"line_number":927,"context_line":"            tr_msg \u003d _(\u0027No domain information specified as part of list \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1ef9f44c","line":924,"in_reply_to":"3f79a3b5_4889f6c4","updated":"2018-10-10 20:44:12.000000000","message":"Was an unused reference and project_domain_id doesn\u0027t exist on the token model.","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2a209cbc1c01598d38a6ba18cfd2a83a023be501","unresolved":false,"context_lines":[{"line_number":942,"context_line":"            # AuthContextMiddleware."},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"            auth_context \u003d flask.request.environ.get("},{"line_number":945,"context_line":"                authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":946,"context_line":"            return auth_context[\u0027token\u0027]"},{"line_number":947,"context_line":"        except KeyError:"},{"line_number":948,"context_line":"            LOG.warning(\"Couldn\u0027t find the auth context.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_08bd3e66","line":945,"updated":"2018-10-10 19:38:17.000000000","message":"Why did this change?","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"425b3978346ad01996fba81d5ef860dc2caf1fc7","unresolved":false,"context_lines":[{"line_number":942,"context_line":"            # AuthContextMiddleware."},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"            auth_context \u003d flask.request.environ.get("},{"line_number":945,"context_line":"                authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":946,"context_line":"            return auth_context[\u0027token\u0027]"},{"line_number":947,"context_line":"        except KeyError:"},{"line_number":948,"context_line":"            LOG.warning(\"Couldn\u0027t find the auth context.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1e8ed4d0","line":945,"in_reply_to":"3f79a3b5_08bd3e66","updated":"2018-10-10 20:44:12.000000000","message":"because @property doesn\u0027t work as expected in classmethods, this was never used until users and thus didn\u0027t trigger a traceback until now.","commit_id":"eda68fe8418413e8a24bffaaa13513c0edad2884"}]}
