)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"050fff47a6eeed0c052e0d31877ff7b45bf0b592","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alvaro Lopez Garcia \u003caloga@ifca.unican.es\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-17 17:29:45 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ExternalBase class to external plugins"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By using a base class we can be bit more DRYier in the actual plugins."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATH%2F%2FVgQ%3D","line":7,"updated":"2013-10-17 15:34:59.000000000","message":"it\u0027s not really ExternalBase anymore, external.Base.","commit_id":"ad77a5e1971fd83928cec557654bef31e5c84992"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"541b575603cccf328f03a0563e388194e11e3788","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alvaro Lopez Garcia \u003caloga@ifca.unican.es\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-17 17:29:45 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ExternalBase class to external plugins"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By using a base class we can be bit more DRYier in the actual plugins."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATH%2F%2FVaw%3D","line":7,"in_reply_to":"AAAATH%2F%2FVgQ%3D","updated":"2013-10-17 15:42:31.000000000","message":"Done","commit_id":"ad77a5e1971fd83928cec557654bef31e5c84992"}],"keystone/auth/plugins/external.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"99b5c5cc95a48cd7b48c02547c0c5065a4d9f9f7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def _authenticate(self, REMOTE_USER):"},{"line_number":55,"context_line":"        \"\"\"Look up the user in the identity backend."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        Return user_ref of raise exception.Unauthorized"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fj5Y%3D","line":57,"updated":"2013-10-14 14:52:03.000000000","message":"...or raise...","commit_id":"66fe62b48ab14dbc7d02a81c03d1bdd19512c576"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"78f4cea8c0a99e9fe2a88306f226ee8e44b60f3b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def _authenticate(self, REMOTE_USER):"},{"line_number":55,"context_line":"        \"\"\"Look up the user in the identity backend."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        Return user_ref of raise exception.Unauthorized"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fjd0%3D","line":57,"in_reply_to":"AAAATH%2F%2Fj5Y%3D","updated":"2013-10-14 15:54:57.000000000","message":"I agree.","commit_id":"66fe62b48ab14dbc7d02a81c03d1bdd19512c576"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"74f02cb6fc733f7abb34d4a2fd1275aba7633f2e","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ExternalDefault(ExternalBase):"},{"line_number":63,"context_line":"    def _authenticate(self, REMOTE_USER, auth_info):"},{"line_number":64,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend.\"\"\""},{"line_number":65,"context_line":"        names \u003d REMOTE_USER.split(\u0027@\u0027)"},{"line_number":66,"context_line":"        username \u003d names.pop(0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FjRA%3D","line":63,"updated":"2013-10-14 16:30:07.000000000","message":"Should this be in caps?","commit_id":"66fe62b48ab14dbc7d02a81c03d1bdd19512c576"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"def666edd97fe8185a1c192f318552a2c6506eb0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ExternalBase(auth.AuthMethodHandler):"},{"line_number":30,"context_line":"    _metaclass__ \u003d abc.ABCMeta"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVpc%3D","line":29,"updated":"2013-10-17 15:19:58.000000000","message":"why are all these classes prefixed with \"External\" when they\u0027re already in the external module? Suggest remove External and just call it Base.","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"59ddbaf46c82cb7e4edf8f210c3abcb8d2a9d594","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ExternalBase(auth.AuthMethodHandler):"},{"line_number":30,"context_line":"    _metaclass__ \u003d abc.ABCMeta"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVjc%3D","line":29,"in_reply_to":"AAAATH%2F%2FVpc%3D","updated":"2013-10-17 15:29:08.000000000","message":"Fair point. Done.","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"def666edd97fe8185a1c192f318552a2c6506eb0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ExternalBase(auth.AuthMethodHandler):"},{"line_number":30,"context_line":"    _metaclass__ \u003d abc.ABCMeta"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"},{"line_number":33,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVqY%3D","line":30,"updated":"2013-10-17 15:19:58.000000000","message":"see https://github.com/openstack/keystone/blob/master/keystone/identity/core.py#L561 for how we\u0027re doing abcs with python3 compatibility.","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"59ddbaf46c82cb7e4edf8f210c3abcb8d2a9d594","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ExternalBase(auth.AuthMethodHandler):"},{"line_number":30,"context_line":"    _metaclass__ \u003d abc.ABCMeta"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"},{"line_number":33,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVjQ%3D","line":30,"in_reply_to":"AAAATH%2F%2FVqY%3D","updated":"2013-10-17 15:29:08.000000000","message":"Done","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"def666edd97fe8185a1c192f318552a2c6506eb0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        auth_context is an in-out variable that will be updated with the"},{"line_number":36,"context_line":"        user_id from the actual user pointed by the REMOTE_USER"},{"line_number":37,"context_line":"        environment variable."},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVoo%3D","line":36,"updated":"2013-10-17 15:19:58.000000000","message":"change \"pointed by\" to \"from\"","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"59ddbaf46c82cb7e4edf8f210c3abcb8d2a9d594","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        auth_context is an in-out variable that will be updated with the"},{"line_number":36,"context_line":"        user_id from the actual user pointed by the REMOTE_USER"},{"line_number":37,"context_line":"        environment variable."},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVjM%3D","line":36,"in_reply_to":"AAAATH%2F%2FVoo%3D","updated":"2013-10-17 15:29:08.000000000","message":"Done","commit_id":"6052ce86ce87ddc3abc25ff6324d0b7fa92884a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"050fff47a6eeed0c052e0d31877ff7b45bf0b592","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":30,"context_line":"class Base(auth.AuthMethodHandler):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FVgE%3D","line":29,"updated":"2013-10-17 15:34:59.000000000","message":"will need to import abc, too?","commit_id":"ad77a5e1971fd83928cec557654bef31e5c84992"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"541b575603cccf328f03a0563e388194e11e3788","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":30,"context_line":"class Base(auth.AuthMethodHandler):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def authenticate(self, context, auth_info, auth_context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FVa0%3D","line":29,"in_reply_to":"AAAATH%2F%2FVgE%3D","updated":"2013-10-17 15:42:31.000000000","message":"fast fingers :-(","commit_id":"ad77a5e1971fd83928cec557654bef31e5c84992"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"050fff47a6eeed0c052e0d31877ff7b45bf0b592","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Default(Base):"},{"line_number":63,"context_line":"    def _authenticate(self, REMOTE_USER, auth_info):"},{"line_number":64,"context_line":"        \"\"\"Use REMOTE_USER to look up the user in the identity backend.\"\"\""},{"line_number":65,"context_line":"        names \u003d REMOTE_USER.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FVfI%3D","line":62,"updated":"2013-10-17 15:34:59.000000000","message":"I don\u0027t think we can change  ExternalDefault to Default without leaving the old names as deprecated aliases. Someone might have used them in their config file.","commit_id":"ad77a5e1971fd83928cec557654bef31e5c84992"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ca0f956a4ef8347c1a460867997ff2aa16c6e6cd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\"Keystone External Authentication Plugin\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from keystone import auth"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FVTo%3D","line":20,"updated":"2013-10-17 16:06:05.000000000","message":"may want to get rid of the extra line","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"371153b14c0096643947da19b05174e3fbd178a4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\"Keystone External Authentication Plugin\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from keystone import auth"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FT88%3D","line":20,"in_reply_to":"AAAATH%2F%2FVTo%3D","updated":"2013-10-17 22:06:32.000000000","message":"the way it is now follows the OpenStack hacking guidelines.","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ca0f956a4ef8347c1a460867997ff2aa16c6e6cd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            auth_context[\u0027user_id\u0027] \u003d user_ref[\u0027id\u0027]"},{"line_number":48,"context_line":"            if (\u0027kerberos\u0027 in CONF.token.bind and"},{"line_number":49,"context_line":"                    context.get(\u0027AUTH_TYPE\u0027, \u0027\u0027).lower() \u003d\u003d \u0027negotiate\u0027):"},{"line_number":50,"context_line":"                auth_context[\u0027bind\u0027][\u0027kerberos\u0027] \u003d user_ref[\"name\"]"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            msg \u003d _(\u0027Unable to lookup user %s\u0027) % (REMOTE_USER)"},{"line_number":53,"context_line":"            raise exception.Unauthorized(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FVUA%3D","line":50,"updated":"2013-10-17 16:06:05.000000000","message":"single quote. user_ref[\u0027name\u0027]","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ca0f956a4ef8347c1a460867997ff2aa16c6e6cd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def _authenticate(self, remote_user):"},{"line_number":57,"context_line":"        \"\"\"Look up the user in the identity backend."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        Return user_ref or raise exception.Unauthorized"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FVRo%3D","line":59,"updated":"2013-10-17 16:06:05.000000000","message":"I am not seeing any of the subclasses raise Unauthorized.","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"ab62872a5a0ab7fe6bedc7f6ade2b0d04afdac68","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def _authenticate(self, remote_user):"},{"line_number":57,"context_line":"        \"\"\"Look up the user in the identity backend."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        Return user_ref or raise exception.Unauthorized"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FS%2FQ%3D","line":59,"in_reply_to":"AAAATH%2F%2FT9E%3D","updated":"2013-10-18 07:35:51.000000000","message":"Indeed there is no need to raise anything here, since the caller would capture the exception and raise a proper Unauthorized.","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"371153b14c0096643947da19b05174e3fbd178a4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def _authenticate(self, remote_user):"},{"line_number":57,"context_line":"        \"\"\"Look up the user in the identity backend."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        Return user_ref or raise exception.Unauthorized"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FT9E%3D","line":59,"in_reply_to":"AAAATH%2F%2FVRo%3D","updated":"2013-10-17 22:06:32.000000000","message":"also, if the _authenticate can raise Unauthorized, then seems like the caller would re-raise it instead of eating it and raising a new Unauthorized (at line 51)","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"371153b14c0096643947da19b05174e3fbd178a4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class Default(Base):"},{"line_number":65,"context_line":"    def _authenticate(self, remote_user, auth_info):"},{"line_number":66,"context_line":"        \"\"\"Use remote_user to look up the user in the identity backend.\"\"\""},{"line_number":67,"context_line":"        names \u003d remote_user.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FT8s%3D","line":64,"updated":"2013-10-17 22:06:32.000000000","message":"The old names should be left as deprecated otherwise will break upgrades.\n\nAlternatively, don\u0027t rename these classes.","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"ab62872a5a0ab7fe6bedc7f6ade2b0d04afdac68","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class Default(Base):"},{"line_number":65,"context_line":"    def _authenticate(self, remote_user, auth_info):"},{"line_number":66,"context_line":"        \"\"\"Use remote_user to look up the user in the identity backend.\"\"\""},{"line_number":67,"context_line":"        names \u003d remote_user.split(\u0027@\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FS%2FM%3D","line":64,"in_reply_to":"AAAATH%2F%2FT8s%3D","updated":"2013-10-18 07:35:51.000000000","message":"Done","commit_id":"41322d98e310507e74b619f989b6974a8e15f88c"}]}
