)]}'
{"keystone/common/authorization.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"36c9493f4822ebeb9f223a9b6d6ea0264b01bba5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        raise exception.Unauthorized()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"def validate_token_bind(context, token_ref):"},{"line_number":246,"context_line":"    bind_mode \u003d CONF.token.enforce_token_bind"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if bind_mode \u003d\u003d \u0027disabled\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a061dce_79396341","line":245,"updated":"2016-04-08 16:32:09.000000000","message":"This is not a private function, it has to be documented somewhere in follow-up patches.","commit_id":"3a696ff28c90825beda85fbac83a0100d0d8677e"}],"keystone/common/controller.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ce89491f6c17be136d08bebddd75178f05f9a3bd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    return auth_context"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"def enforce(self, context, function_name, callback\u003dNone, *args, **kwargs):"},{"line_number":111,"context_line":"    if \u0027is_admin\u0027 in context and context[\u0027is_admin\u0027]:"},{"line_number":112,"context_line":"        LOG.warning(_LW(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":113,"context_line":"    elif callback is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_af3832f0","line":110,"updated":"2016-02-11 20:58:54.000000000","message":"Move this to authorize.py so we can keep it non-controller specific.","commit_id":"76c799169ff7f6d67b7eb643516fa49248943b8d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ce89491f6c17be136d08bebddd75178f05f9a3bd","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                ref \u003d self.get_member_from_driver(kwargs[key])"},{"line_number":133,"context_line":"                policy_dict[\u0027target\u0027] \u003d {self.member_name: ref}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # TODO(henry-nash): Move this entire code to a member"},{"line_number":136,"context_line":"        # method inside v3 Auth"},{"line_number":137,"context_line":"        if context.get(\u0027subject_token_id\u0027) is not None:"},{"line_number":138,"context_line":"            token_ref \u003d token_model.KeystoneToken("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_cf2d6ea9","line":135,"updated":"2016-02-11 20:58:54.000000000","message":"drop this comment, and extract this method to a top level.","commit_id":"76c799169ff7f6d67b7eb643516fa49248943b8d"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"36c9493f4822ebeb9f223a9b6d6ea0264b01bba5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _protected(f):"},{"line_number":88,"context_line":"        @functools.wraps(f)"},{"line_number":89,"context_line":"        def wrapper(self, context, *args, **kwargs):"},{"line_number":90,"context_line":"            if \u0027is_admin\u0027 in context and context[\u0027is_admin\u0027]:"},{"line_number":91,"context_line":"                LOG.warning(_LW(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":92,"context_line":"            else:"},{"line_number":93,"context_line":"                # First build the dict of filter parameters"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a061dce_b91c9b14","line":90,"updated":"2016-04-08 16:32:09.000000000","message":"Why not to use context.get(\u0027is_admin\u0027)?","commit_id":"3a696ff28c90825beda85fbac83a0100d0d8677e"}],"keystone/policy/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"52a828d549e3d2780d9669dca40ebfb88bca56b1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        ref \u003d self.policy_api.create_policy(ref[\u0027id\u0027], ref, initiator)"},{"line_number":33,"context_line":"        return PolicyV3.wrap_member(context, ref)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @controller.protected(\u0027type\u0027)"},{"line_number":36,"context_line":"    def list_policies(self, context, filters):"},{"line_number":37,"context_line":"        hints \u003d PolicyV3.build_driver_hints(context, filters)"},{"line_number":38,"context_line":"        refs \u003d self.policy_api.list_policies(hints\u003dhints)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_1e97dbec","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":33},"updated":"2016-04-07 03:06:26.000000000","message":"should this be:\n\n  @controller.protected(filters\u003d[\u0027type\u0027])","commit_id":"148c503ca26e461b6f52bf9e7f4db4e8196eabc9"}]}
