)]}'
{"keystone/auth/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ba7a346bf1d9ea26c782e01fd9e1263b5726072","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        # of the attributes set by the plugins. This check to ensure"},{"line_number":530,"context_line":"        # `auth_context` is an instance of AuthContext is extra insurance and"},{"line_number":531,"context_line":"        # will prevent regressions."},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        if not isinstance(auth_context, AuthContext):"},{"line_number":534,"context_line":"            LOG.error("},{"line_number":535,"context_line":"                _LE(\u0027`auth_context` passed to the Auth controller \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_1b2360a8","line":532,"updated":"2017-01-30 15:05:13.000000000","message":"Unrelated whitespace change?","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ba7a346bf1d9ea26c782e01fd9e1263b5726072","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                resp \u003d external.authenticate(request,"},{"line_number":549,"context_line":"                                             auth_info,"},{"line_number":550,"context_line":"                                             auth_context)"},{"line_number":551,"context_line":"                if resp and resp.status:"},{"line_number":552,"context_line":"                    # NOTE(notmorgan): ``external`` plugin cannot be multi-step"},{"line_number":553,"context_line":"                    # it is either a plain success/fail."},{"line_number":554,"context_line":"                    auth_context.setdefault("}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_0015af47","line":551,"updated":"2017-01-30 15:05:13.000000000","message":"Shouldn\u0027t resp.status *always* be available if we have a response?","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7dd9dbbcfa6de633e4ffeb78aca0f80f60b96d03","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                resp \u003d external.authenticate(request,"},{"line_number":549,"context_line":"                                             auth_info,"},{"line_number":550,"context_line":"                                             auth_context)"},{"line_number":551,"context_line":"                if resp and resp.status:"},{"line_number":552,"context_line":"                    # NOTE(notmorgan): ``external`` plugin cannot be multi-step"},{"line_number":553,"context_line":"                    # it is either a plain success/fail."},{"line_number":554,"context_line":"                    auth_context.setdefault("}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_dbe398d7","line":551,"in_reply_to":"3a461143_0015af47","updated":"2017-01-30 15:06:05.000000000","message":"For some reason I was thinking of this as web requests, and not the Auth object.","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7ba7a346bf1d9ea26c782e01fd9e1263b5726072","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                                             auth_context)"},{"line_number":551,"context_line":"                if resp and resp.status:"},{"line_number":552,"context_line":"                    # NOTE(notmorgan): ``external`` plugin cannot be multi-step"},{"line_number":553,"context_line":"                    # it is either a plain success/fail."},{"line_number":554,"context_line":"                    auth_context.setdefault("},{"line_number":555,"context_line":"                        \u0027method_names\u0027, []).insert(0, \u0027external\u0027)"},{"line_number":556,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_9b46704d","line":553,"updated":"2017-01-30 15:05:13.000000000","message":"Do we document this anywhere?","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"}],"keystone/auth/plugins/base.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3bbcd65348b7ceaf9e1aef4eecd46281bb2e3e0d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AuthHandlerResponse \u003d collections.namedtuple(\u0027AuthHandlerResponse\u0027,"},{"line_number":24,"context_line":"                                             \u0027status, response_body\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_52a21b4c","line":24,"updated":"2017-01-30 21:53:38.000000000","message":"For me - `authenticated` seems like a natural replacement for `status`.\n\nWe could change this later - but we\u0027ll have to advertise the change since it will require folks maintaining their own auth plugins to make changes.\n\nWe should probably write a release note for those users, too.","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"96944aa8a0f3005a281216e769b697ca6cdca8f8","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AuthHandlerResponse \u003d collections.namedtuple(\u0027AuthHandlerResponse\u0027,"},{"line_number":24,"context_line":"                                             \u0027status, response_body\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_c372bf10","line":24,"in_reply_to":"3a461143_52a21b4c","updated":"2017-01-30 23:24:43.000000000","message":"It isn\u0027t really \"authenticated\" it really is a success/failure. Authentication isn\u0027t complete until all method handlers are run.\n\n*shrug* we could change it down the road.","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"}],"keystone/auth/plugins/external.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3bbcd65348b7ceaf9e1aef4eecd46281bb2e3e0d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if \u0027kerberos\u0027 in CONF.token.bind and auth_type \u003d\u003d \u0027negotiate\u0027:"},{"line_number":53,"context_line":"            auth_context[\u0027bind\u0027][\u0027kerberos\u0027] \u003d user_ref[\u0027name\u0027]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        return base.AuthHandlerResponse(status\u003dTrue, response_body\u003dNone)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @abc.abstractmethod"},{"line_number":58,"context_line":"    def _authenticate(self, request):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_52d4dbbb","line":55,"updated":"2017-01-30 21:53:38.000000000","message":"FWIW - just to make sure I\u0027m understanding this correctly. This now means (and enforces) external methods to be completely done authenticating a user at this point, correct? Multi-step authentication processes will not work with external authentication.\n\nBecause once `status` is set to `True` that user is authenticated.","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"96944aa8a0f3005a281216e769b697ca6cdca8f8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if \u0027kerberos\u0027 in CONF.token.bind and auth_type \u003d\u003d \u0027negotiate\u0027:"},{"line_number":53,"context_line":"            auth_context[\u0027bind\u0027][\u0027kerberos\u0027] \u003d user_ref[\u0027name\u0027]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        return base.AuthHandlerResponse(status\u003dTrue, response_body\u003dNone)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @abc.abstractmethod"},{"line_number":58,"context_line":"    def _authenticate(self, request):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_a375b3fa","line":55,"in_reply_to":"3a461143_52d4dbbb","updated":"2017-01-30 23:24:43.000000000","message":"Well, it means the plugin \"succeeded\", it doesn\u0027t mean the user is authenticated. the user must still end up with user_id in response_data by *one* of the auth plugins (all should do it,but techincally only one has to)\n\nYou can still do multistep (look at the ChallengeResponse plugin in the tests) if needed. External should also never hit this point until the auth is complete as it relies on REMOTE_USER env-var.","commit_id":"5dd81b99cbd1722ddcdb7f795ce670c60f118a6d"}]}
