)]}'
{"keystone/auth/plugins/federated/core.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from keystone.auth.plugins.federated import user_management"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"METHOD_NAME \u003d \"federated\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CONF \u003d config.CONF"},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1DU%3D","line":29,"updated":"2014-01-08 00:04:52.000000000","message":"So this should get dropped, and instead \"SAML\" etc should be used as the METHOD_NAMES, but in their own plugin files.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.user_management \u003d UserManager()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def authenticate(self, context, auth_payload, auth_context):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Authenticate the user, auth_payload should contain:"},{"line_number":51,"context_line":"           provider_id - an identifier for the identity provider"},{"line_number":52,"context_line":"           phase - the current authentication phase reached"},{"line_number":53,"context_line":"           protocol_data - an authentication assertion to be validated"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHEk%3D","line":50,"updated":"2014-01-17 14:50:58.000000000","message":"I think it\u0027s better to use \" instead of \u0027. This applies to all your docstrings.\nPlus http://www.python.org/dev/peps/pep-0257/  might be helpful.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        phase \u003d auth_payload.get(\"phase\", None)"},{"line_number":57,"context_line":"        msg \u003d (\"Federated Authentication Requests must specify which\""},{"line_number":58,"context_line":"               \"stage of authentication has been reached\")"},{"line_number":59,"context_line":"        if not phase:"},{"line_number":60,"context_line":"            return msg"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            phase_function \u003d getattr(self, phase)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHAk%3D","line":59,"updated":"2014-01-17 14:50:58.000000000","message":"How about changing to this:\n\nif phase is None:\n    return msg\n\n?","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            return \"Authentication phase not supported: \" + e.message"},{"line_number":65,"context_line":"        response \u003d phase_function(auth_payload)"},{"line_number":66,"context_line":"        if response.get(\"response\") is not None:"},{"line_number":67,"context_line":"            \u0027\u0027\u0027If a response is returned then authentication is not yet"},{"line_number":68,"context_line":"               complete, so return the response to the auth module\u0027\u0027\u0027"},{"line_number":69,"context_line":"            return response.get(\"response\")"},{"line_number":70,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG%2BA%3D","line":67,"updated":"2014-01-17 14:50:58.000000000","message":"Should not it be changed to comment with \u0027#\u0027 at the begining?","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return {\"response\": self.discovery_service.get_directory()}"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def request(self, auth_payload):"},{"line_number":100,"context_line":"        raise exception.NotImplemented"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def validate(self, auth_payload):"},{"line_number":103,"context_line":"        raise exception.NotImplemented"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGOQ%3D","line":100,"updated":"2014-01-17 14:50:58.000000000","message":"raise exception.NotImplemented()","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        raise exception.NotImplemented"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def validate(self, auth_payload):"},{"line_number":103,"context_line":"        raise exception.NotImplemented"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class Discovery(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGOM%3D","line":103,"updated":"2014-01-17 14:50:58.000000000","message":"raise exception.NotImplemented()","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":106,"context_line":"class Discovery(object):"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self):"},{"line_number":109,"context_line":"        \u0027\u0027\u0027Constructor.\u0027\u0027\u0027"},{"line_number":110,"context_line":"        self.catalog_api \u003d catalog.controllers.ServiceV3()"},{"line_number":111,"context_line":"        self.endpoint_api \u003d catalog.controllers.EndpointV3()"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG90%3D","line":109,"updated":"2014-01-17 14:50:58.000000000","message":"Remove this docstring.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def __init__(self):"},{"line_number":109,"context_line":"        \u0027\u0027\u0027Constructor.\u0027\u0027\u0027"},{"line_number":110,"context_line":"        self.catalog_api \u003d catalog.controllers.ServiceV3()"},{"line_number":111,"context_line":"        self.endpoint_api \u003d catalog.controllers.EndpointV3()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def get_directory(self):"},{"line_number":114,"context_line":"        \u0027\u0027\u0027Return services which match idp.*"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGNc%3D","line":111,"updated":"2014-01-17 14:50:58.000000000","message":"maybe the dependency.requires() decorator could do the work?","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        for service in services[\"services\"]:"},{"line_number":148,"context_line":"            if service[\"type\"].startswith(\"idp\"):"},{"line_number":149,"context_line":"                for endpoint in endpoints[\"endpoints\"]:"},{"line_number":150,"context_line":"                    if not endpoint[\"interface\"] \u003d\u003d \"public\":"},{"line_number":151,"context_line":"                        endpoints[\"endpoints\"].pop("},{"line_number":152,"context_line":"                            endpoints[\"endpoints\"].index(endpoint))"},{"line_number":153,"context_line":"                    elif endpoint[\"service_id\"] \u003d\u003d service[\"id\"]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG9M%3D","line":150,"updated":"2014-01-17 14:50:58.000000000","message":"I think changing to:\n\nif endpoint[\u0027interface\u0027] !\u003d \u0027public\u0027:\n\ncan slightly increase readability.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            requirement \u003d mapping.get(\"requirement\", \"any_one_of\")"},{"line_number":169,"context_line":"            external \u003d mapping.get(\"external\")"},{"line_number":170,"context_line":"            internal \u003d mapping.get(\"internal\")"},{"line_number":171,"context_line":"            if requirement \u003d\u003d \"any_one_of\":"},{"line_number":172,"context_line":"                valid \u003d True"},{"line_number":173,"context_line":"                for att in external:"},{"line_number":174,"context_line":"                    received \u003d attributes.get(att)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG60%3D","line":171,"updated":"2014-01-17 14:50:58.000000000","message":"keep in mind that the structure has changed - https://review.openstack.org/#/c/59848/","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                        found \u003d False"},{"line_number":179,"context_line":"                        for value in received:"},{"line_number":180,"context_line":"                            if value in external.get(att):"},{"line_number":181,"context_line":"                                found \u003d True"},{"line_number":182,"context_line":"                        if not found:"},{"line_number":183,"context_line":"                            valid \u003d False"},{"line_number":184,"context_line":"                if valid:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG40%3D","line":181,"updated":"2014-01-17 14:50:58.000000000","message":"If i understood your intentions correctly, once you set found variable to True you will not reset it to False inside that for. Maybe it\u0027s worth exiting that for loop after you set found to True? Apparently you don\u0027t alwas need to iterate over whole list.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                        valid \u003d False"},{"line_number":193,"context_line":"                    else:"},{"line_number":194,"context_line":"                        found \u003d False"},{"line_number":195,"context_line":"                        for value in received:"},{"line_number":196,"context_line":"                            if value in external.get(att):"},{"line_number":197,"context_line":"                                found \u003d True"},{"line_number":198,"context_line":"                        if not found:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FG4s%3D","line":195,"updated":"2014-01-17 14:50:58.000000000","message":"If i understood your intentions correctly, once you set found variable to True you will not reset it to False inside that for loop. Maybe it\u0027s worth exiting that loop after you set found to True? Then, you don\u0027t always need to iterate over whole list.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def check_issuers(self, attributes, provider_id):"},{"line_number":227,"context_line":"        policy \u003d self.issuing_policy.get(provider_id, None)"},{"line_number":228,"context_line":"        if not policy:"},{"line_number":229,"context_line":"            raise exception.Unauthorized"},{"line_number":230,"context_line":"        validated \u003d {}"},{"line_number":231,"context_line":"        for att_type in attributes:"},{"line_number":232,"context_line":"            values \u003d attributes.get(att_type, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGas%3D","line":229,"updated":"2014-01-17 14:50:58.000000000","message":"raise exception.Unauthorized()","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":247,"context_line":"sha \u003d hashlib.sha1()"},{"line_number":248,"context_line":"sha.update(temp_password)"},{"line_number":249,"context_line":"temp_password \u003d base64.b64encode(sha.digest())"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"class UserManager(object):"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGag%3D","line":250,"updated":"2014-01-17 14:50:58.000000000","message":"Move this block to function/method so temp_password is filled with new data evey time new user is created.","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                if new_id \u003d\u003d u[\"name\"]:"},{"line_number":273,"context_line":"                    user \u003d u"},{"line_number":274,"context_line":"        # Return user"},{"line_number":275,"context_line":"            return user[\"id\"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGZs%3D","line":275,"updated":"2014-01-17 14:50:58.000000000","message":"Why not return user\u0027s id just after the ids are matched in the for loop above? Do you intentionally look for last matching id?","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"}],"keystone/auth/plugins/federated/discovery/core.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"80d4e19b5adb50c567ba4235dbd49877e28d3ecb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027\u0027\u0027"},{"line_number":35,"context_line":"        return self.format_directory("},{"line_number":36,"context_line":"            self.catalog_api.list_services("},{"line_number":37,"context_line":"                {\"is_admin\": True, \"query_string\": {}, \"path\": \"/\"}))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def populate_auth_dict(self, federated, provider):"},{"line_number":40,"context_line":"        \u0027\u0027\u0027Populate the given federated dict with validation"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2Fuy4%3D","line":37,"updated":"2014-01-02 19:27:27.000000000","message":"Why we are calling with is_admin \u003d True?","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            self.catalog_api.list_services("},{"line_number":37,"context_line":"                {\"is_admin\": True, \"query_string\": {}, \"path\": \"/\"}))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def populate_auth_dict(self, federated, provider):"},{"line_number":40,"context_line":"        \u0027\u0027\u0027Populate the given federated dict with validation"},{"line_number":41,"context_line":"           and endpoint data for the specified provider."},{"line_number":42,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1EQ%3D","line":39,"updated":"2014-01-08 00:04:52.000000000","message":"Is this enumerating all endpoints?  I think that IdpS are not going to be in the endpoint lists, and this should only show IdPs.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027\u0027\u0027Populate the given federated dict with validation"},{"line_number":41,"context_line":"           and endpoint data for the specified provider."},{"line_number":42,"context_line":"        \u0027\u0027\u0027"},{"line_number":43,"context_line":"        endpoints \u003d self.endpoint_api.list_endpoints("},{"line_number":44,"context_line":"            {\"is_admin\": True, \"query_string\": {}, \"path\": \"/\"})"},{"line_number":45,"context_line":"        service \u003d self.catalog_api.get_service("},{"line_number":46,"context_line":"            {\"is_admin\": True}, provider)[\"service\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1Do%3D","line":43,"updated":"2014-01-08 00:04:52.000000000","message":"Youy don\u0027t need to set is_admin","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/auth/plugins/federated/issuing_policy/core.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.common import config"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from xml.etree import ElementTree"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1A8%3D","line":19,"updated":"2014-01-08 00:04:52.000000000","message":"JSON, not XML","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Default(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"},{"line_number":27,"context_line":"        issuing_policy_file \u003d CONF.auth.get(\"issuing_policy_file\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1BE%3D","line":24,"updated":"2014-01-08 00:04:52.000000000","message":"class should be IssuingPolicyParser.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/auth/plugins/federated/mapping/core.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.common import config"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from xml.etree import ElementTree"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1BI%3D","line":19,"updated":"2014-01-08 00:04:52.000000000","message":"USE JSON, not XML","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Default(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"},{"line_number":27,"context_line":"        mapping_file \u003d CONF.auth.get(\"mapping_file\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1CU%3D","line":24,"updated":"2014-01-08 00:04:52.000000000","message":"Bad class name.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/auth/plugins/federated/protocol/apache2.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone import exception"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.auth.plugins.federated.protocol import core"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1Dc%3D","line":17,"updated":"2014-01-08 00:04:52.000000000","message":"see how \"external\" auth is done in auth/controller.py , and integrate with that.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/auth/plugins/federated/user_management.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"temp_password \u003d base64.b64encode(sha.digest())"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class UserManager(object):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.identity_api \u003d identity.controllers.UserV3()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1Ck%3D","line":33,"updated":"2014-01-08 00:04:52.000000000","message":"use @depends(\"identity_api\") like the controllers etc do.","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"80d4e19b5adb50c567ba4235dbd49877e28d3ecb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                user\u003duser_ref)[\u0027user\u0027]"},{"line_number":49,"context_line":"            return user[\u0027id\u0027]"},{"line_number":50,"context_line":"        except exception.Conflict:"},{"line_number":51,"context_line":"            users \u003d self.identity_api.list_users("},{"line_number":52,"context_line":"                {\"is_admin\": True, \"query_string\": {}, \"path\": \"/\"})"},{"line_number":53,"context_line":"            for u in users[\"users\"]:"},{"line_number":54,"context_line":"                if new_id \u003d\u003d u[\"name\"]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2FuuI%3D","line":51,"updated":"2014-01-02 19:27:27.000000000","message":"Pulling the entire list will be heavy, can we get user by name/id in place of iterating through list?","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                user\u003duser_ref)[\u0027user\u0027]"},{"line_number":49,"context_line":"            return user[\u0027id\u0027]"},{"line_number":50,"context_line":"        except exception.Conflict:"},{"line_number":51,"context_line":"            users \u003d self.identity_api.list_users("},{"line_number":52,"context_line":"                {\"is_admin\": True, \"query_string\": {}, \"path\": \"/\"})"},{"line_number":53,"context_line":"            for u in users[\"users\"]:"},{"line_number":54,"context_line":"                if new_id \u003d\u003d u[\"name\"]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1DE%3D","line":51,"in_reply_to":"AAAAT3%2F%2FuuI%3D","updated":"2014-01-08 00:04:52.000000000","message":"++  Arvind is right","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/common/config.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        #deals with REMOTE_USER authentication"},{"line_number":253,"context_line":"        cfg.StrOpt(\u0027external\u0027,"},{"line_number":254,"context_line":"                   default\u003d\u0027keystone.auth.plugins.external.Default\u0027),"},{"line_number":255,"context_line":"        cfg.ListOpt(\u0027protocols\u0027, default\u003d_DEFAULT_AUTH_PROTOCOLS),"},{"line_number":256,"context_line":"        cfg.StrOpt(\u0027discovery\u0027,"},{"line_number":257,"context_line":"                   default\u003d(\u0027keystone.auth.plugins.\u0027"},{"line_number":258,"context_line":"                            \u0027federated.discovery.Default\u0027)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1B0%3D","line":255,"updated":"2014-01-08 00:04:52.000000000","message":"this option can go away","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        cfg.StrOpt(\u0027external\u0027,"},{"line_number":254,"context_line":"                   default\u003d\u0027keystone.auth.plugins.external.Default\u0027),"},{"line_number":255,"context_line":"        cfg.ListOpt(\u0027protocols\u0027, default\u003d_DEFAULT_AUTH_PROTOCOLS),"},{"line_number":256,"context_line":"        cfg.StrOpt(\u0027discovery\u0027,"},{"line_number":257,"context_line":"                   default\u003d(\u0027keystone.auth.plugins.\u0027"},{"line_number":258,"context_line":"                            \u0027federated.discovery.Default\u0027)),"},{"line_number":259,"context_line":"        cfg.StrOpt(\u0027attribute_mapper\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1Bo%3D","line":256,"updated":"2014-01-08 00:04:52.000000000","message":"Instead of a config option for each, they shouiod be operations supported buy the the plugin.  so  openid connect can say whether or niot it supports discovery, etc.  Should not be one per stage","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    for method_name in conf.auth.methods:"},{"line_number":292,"context_line":"        if method_name not in _DEFAULT_AUTH_METHODS:"},{"line_number":293,"context_line":"            conf.register_opt(cfg.StrOpt(method_name), group\u003d\u0027auth\u0027)"},{"line_number":294,"context_line":"    for protocol_name in CONF.auth.protocols:"},{"line_number":295,"context_line":"        if protocol_name not in _DEFAULT_AUTH_PROTOCOLS:"},{"line_number":296,"context_line":"            conf.register_opt(cfg.StrOpt(protocol_name), group\u003d\u0027auth\u0027)"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F1Bk%3D","line":294,"updated":"2014-01-08 00:04:52.000000000","message":"remove, and use the above mechanism","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"848a908083b67be33f939b5f59fef9467abdb7dc","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        cfg.StrOpt(\u0027config_prefix\u0027, default\u003d\u0027keystone.kvs\u0027),"},{"line_number":267,"context_line":"        cfg.BoolOpt(\u0027enable_key_mangler\u0027, default\u003dTrue),"},{"line_number":268,"context_line":"        cfg.IntOpt(\u0027default_lock_timeout\u0027, default\u003d5)],"},{"line_number":269,"context_line":"    \u0027federated\u0027: ["},{"line_number":270,"context_line":"        cfg.StrOpt(\u0027mapping_file\u0027, default\u003d\u0027/etc/keystone/mapping_file\u0027),"},{"line_number":271,"context_line":"        cfg.StrOpt(\u0027issuing_policy_file\u0027,"},{"line_number":272,"context_line":"                   default\u003d\u0027/etc/keystone/issuing_policy_file\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FGTY%3D","line":269,"updated":"2014-01-17 14:50:58.000000000","message":"So far we have been using \u0027federation\u0027 instead of \u0027federated\u0027  so maybe we could stick with that?","commit_id":"d6145f38ba8f163572fb51fb88a1f4a257353f16"}],"keystone/tests/issuing_policy_file":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"deaecd92383ec5e604d4fef4bd8b2484b3ca21b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cIssuingPolicy\u003e"},{"line_number":2,"context_line":"    \u003cIssuer service_id\u003d\"1\"\u003e"},{"line_number":3,"context_line":"        \u003cAttributes\u003e"},{"line_number":4,"context_line":"            \u003cAttribute type\u003d\"unikentaccountType\"\u003e"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUH%2F%2F1BQ%3D","line":1,"updated":"2014-01-08 00:04:52.000000000","message":"DO this in JSON, not XML","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}],"keystone/tests/mapping_file":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"80d4e19b5adb50c567ba4235dbd49877e28d3ecb","unresolved":false,"context_lines":[{"line_number":8,"context_line":"                \u003cAttributeValue\u003eproject_id\u003c/AttributeValue\u003e"},{"line_number":9,"context_line":"            \u003c/Attribute\u003e"},{"line_number":10,"context_line":"            \u003cAttribute type\u003d\"role\"\u003e"},{"line_number":11,"context_line":"                \u003cAttributeValue\u003erole_id\u003c/AttributeValue\u003e"},{"line_number":12,"context_line":"            \u003c/Attribute\u003e"},{"line_number":13,"context_line":"        \u003c/InternalAttributes\u003e"},{"line_number":14,"context_line":"    \u003c/AttributeMapping\u003e"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAT3%2F%2Futs%3D","line":11,"updated":"2014-01-02 19:27:27.000000000","message":"why not role_name","commit_id":"0e5f037b974f61b847489c616c1bda8b2c6e89ed"}]}
