)]}'
{"etc/keystone.conf":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"#Tells whether password user need to be hashed in the backend"},{"line_number":75,"context_line":"hash-password \u003d True"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"# Specify the global service ID to dictate how the global roles"},{"line_number":78,"context_line":"# are to be returned in validate token call. Middleware must"},{"line_number":79,"context_line":"# specify the global service ID inorder for Keystone to return"},{"line_number":80,"context_line":"# the global roles in validate token call."}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAC3%2F%2F%2FBw%3D","line":77,"updated":"2011-12-06 04:29:23.000000000","message":"Nice help!","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"# Specify the global service ID to dictate how the global roles"},{"line_number":78,"context_line":"# are to be returned in validate token call. Middleware must"},{"line_number":79,"context_line":"# specify the global service ID inorder for Keystone to return"},{"line_number":80,"context_line":"# the global roles in validate token call."},{"line_number":81,"context_line":"global_service_id \u003d global"},{"line_number":82,"context_line":""}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAC3%2F%2F%2FBs%3D","line":79,"updated":"2011-12-06 04:29:23.000000000","message":"\"Middleware must specify *this* (?) global service ID\"\n\n\"inorder\" -\u003e \"in order\"","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/backends/__init__.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        SHOULD_HASH_PASSWORD \u003d options[\"hash-password\"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    global GLOBAL_SERVICE_ID"},{"line_number":55,"context_line":"    if \"global_service_id\" in options:"},{"line_number":56,"context_line":"        GLOBAL_SERVICE_ID \u003d options[\"global_service_id\"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBk%3D","line":55,"updated":"2011-12-06 04:29:23.000000000","message":"You should be able to specify the default value here:\n\n    global GLOBAL_SERVICE_ID\n    GLOBAL_SERVICE_ID \u003d options.get(\u0027global_service_id\u0027, \u0027global\u0027)","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/backends/ldap/fakeldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # for serviceId, the backend is returning a list of numbers"},{"line_number":98,"context_line":"        # make sure we convert them to strings first before comparing"},{"line_number":99,"context_line":"        # them"},{"line_number":100,"context_line":"        str_sids \u003d map(lambda x: str(x), attrs[key])"},{"line_number":101,"context_line":"        return str(value) in str_sids"},{"line_number":102,"context_line":"    if key !\u003d \"objectclass\":"},{"line_number":103,"context_line":"        return value in attrs[key]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBg%3D","line":100,"updated":"2011-12-06 04:29:23.000000000","message":"Fancy ;)","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/logic/service.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    return auth.AuthData(token, user, endpoints, url_types\u003durl_types)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def get_validate_data(dtoken, duser, sids):"},{"line_number":240,"context_line":"    \"\"\"return ValidateData object for a token/user pair\"\"\""},{"line_number":241,"context_line":"    tenant \u003d None"},{"line_number":242,"context_line":"    if dtoken.tenant_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCk%3D","line":239,"updated":"2011-12-06 04:29:23.000000000","message":"Can you change `sids` to `service_ids`? `sids` isn\u0027t a convention used in keystone :)","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    token \u003d auth.Token(dtoken.expires, dtoken.id, tenant)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    ts \u003d get_tenant_roles_for_user_and_services(duser.id,"},{"line_number":249,"context_line":"                                                dtoken.tenant_id,"},{"line_number":250,"context_line":"                                                sids)"},{"line_number":251,"context_line":"    if not dtoken.tenant_id\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCg%3D","line":248,"updated":"2011-12-06 04:29:23.000000000","message":"Not sure what `ts` is supposed to be either, but that\u0027s not your fault :P","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        or backends.GLOBAL_SERVICE_ID in sids:"},{"line_number":253,"context_line":"        # return the global roles for unscoped tokens or"},{"line_number":254,"context_line":"        # its ID is in the service IDs"},{"line_number":255,"context_line":"        ts \u003d ts + get_global_roles_for_user(duser.id)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # Also get the user\u0027s tenant\u0027s name"},{"line_number":258,"context_line":"    tenant_name \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCM%3D","line":255,"updated":"2011-12-06 04:29:23.000000000","message":"ts.append ?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    return []"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"def validate_service_ids(sids):"},{"line_number":337,"context_line":"    \"\"\""},{"line_number":338,"context_line":"    Method to validate the service IDs."},{"line_number":339,"context_line":"    sids -- list of service IDs"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCc%3D","line":336,"updated":"2011-12-06 04:29:23.000000000","message":"`sids` -\u003e `service_ids`","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    if len(sids) \u003d\u003d 0:"},{"line_number":344,"context_line":"        raise fault.UnauthorizedFault(\"Missing service IDs\")"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    for sid in sids:"},{"line_number":347,"context_line":"        if not sid \u003d\u003d backends.GLOBAL_SERVICE_ID:"},{"line_number":348,"context_line":"            service \u003d api.SERVICE.get(sid)"},{"line_number":349,"context_line":"            if not service:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCY%3D","line":346,"updated":"2011-12-06 04:29:23.000000000","message":"`sid` -\u003e `service_id`","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/manage/api.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    obj \u003d db_models.Role()"},{"line_number":58,"context_line":"    obj.name \u003d name"},{"line_number":59,"context_line":"    sname \u003d None"},{"line_number":60,"context_line":"    if name.find(\":\") !\u003d -1:"},{"line_number":61,"context_line":"        # name has service prefix"},{"line_number":62,"context_line":"        names \u003d name.split(\":\")"},{"line_number":63,"context_line":"        if len(names) \u003d\u003d 2 and len(names[0]) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCE%3D","line":60,"updated":"2011-12-06 04:29:23.000000000","message":"if \":\" in name:","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # name has service prefix"},{"line_number":62,"context_line":"        names \u003d name.split(\":\")"},{"line_number":63,"context_line":"        if len(names) \u003d\u003d 2 and len(names[0]) \u003e 0:"},{"line_number":64,"context_line":"            sname \u003d names[0]"},{"line_number":65,"context_line":"    if service_name:"},{"line_number":66,"context_line":"        # name is prefixed by service, make sure it"},{"line_number":67,"context_line":"        # agrees with the given service_name"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FCA%3D","line":64,"updated":"2011-12-06 04:29:23.000000000","message":"(service_prefix, role_name) \u003d name.split(\":\") ?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    if service_name:"},{"line_number":66,"context_line":"        # name is prefixed by service, make sure it"},{"line_number":67,"context_line":"        # agrees with the given service_name"},{"line_number":68,"context_line":"        if sname and sname !\u003d service_name:"},{"line_number":69,"context_line":"            raise ValueError(\"service name mistmatch\")"},{"line_number":70,"context_line":"        sname \u003d service_name"},{"line_number":71,"context_line":"    if sname:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FB8%3D","line":68,"updated":"2011-12-06 04:29:23.000000000","message":"Why the `sname and `? Not sure what scenario you\u0027re checking for?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # agrees with the given service_name"},{"line_number":68,"context_line":"        if sname and sname !\u003d service_name:"},{"line_number":69,"context_line":"            raise ValueError(\"service name mistmatch\")"},{"line_number":70,"context_line":"        sname \u003d service_name"},{"line_number":71,"context_line":"    if sname:"},{"line_number":72,"context_line":"        # we have a service role, fill in the service ID"},{"line_number":73,"context_line":"        service \u003d db_api.SERVICE.get_by_name(name\u003dsname)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FB4%3D","line":70,"updated":"2011-12-06 04:29:23.000000000","message":"You just checked if they were equal, so is this redundant?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        if sname and sname !\u003d service_name:"},{"line_number":69,"context_line":"            raise ValueError(\"service name mistmatch\")"},{"line_number":70,"context_line":"        sname \u003d service_name"},{"line_number":71,"context_line":"    if sname:"},{"line_number":72,"context_line":"        # we have a service role, fill in the service ID"},{"line_number":73,"context_line":"        service \u003d db_api.SERVICE.get_by_name(name\u003dsname)"},{"line_number":74,"context_line":"        obj.service_id \u003d service.id"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FB0%3D","line":71,"updated":"2011-12-06 04:29:23.000000000","message":"Can these last two if blocks be merged into one?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/middleware/auth_token.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        service_ids \u003d conf.get(\u0027service_ids\u0027)"},{"line_number":140,"context_line":"        self.serviceId_qs \u003d \u0027\u0027"},{"line_number":141,"context_line":"        if service_ids:"},{"line_number":142,"context_line":"            self.serviceId_qs \u003d \u0027?serviceId\u003d%s\u0027 % (quote(service_ids))"},{"line_number":143,"context_line":"        if service_port:"},{"line_number":144,"context_line":"            self.service_port \u003d int(service_port)"},{"line_number":145,"context_line":"        self.service_url \u003d \u0027%s://%s:%s\u0027 % (self.service_protocol,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBc%3D","line":142,"updated":"2011-12-06 04:29:23.000000000","message":"The OS convention is to import modules wherever possible:\n\n  .. urllib.quote( ..","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/middleware/quantum_auth_token.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        role_refs \u003d token_info[\"access\"][\"user\"][\"roles\"]"},{"line_number":371,"context_line":"        if role_refs !\u003d None:"},{"line_number":372,"context_line":"            for role_ref in role_refs:"},{"line_number":373,"context_line":"                roles.append(role_ref[\"id\"])"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        token_info \u003d json.loads(data)"},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBM%3D","line":373,"updated":"2011-12-06 04:29:23.000000000","message":"Nice catch, does this need to be addressed downstream?","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/test/functional/test_auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # now validate the scoped token and ask the global roles"},{"line_number":186,"context_line":"        global_role \u003d self.create_role().json[\u0027role\u0027]"},{"line_number":187,"context_line":"        # crete a global role"},{"line_number":188,"context_line":"        self.put_user_role(self.user[\u0027id\u0027], global_role[\u0027id\u0027], None)"},{"line_number":189,"context_line":"        service_ids \u003d \"%s,global\" % (self.services[\u0027id\u0027])"},{"line_number":190,"context_line":"        r \u003d self.validate_token(scoped[\u0027token\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBY%3D","line":187,"updated":"2011-12-06 04:29:23.000000000","message":"create*","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/test/functional/test_issue_85.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"        \"\"\"Disabling a tenant should invalidate previously-issued tokens\"\"\""},{"line_number":10,"context_line":"        # Create a user for a specific tenant"},{"line_number":11,"context_line":"        tenant \u003d self.create_tenant().json[\u0027tenant\u0027]"},{"line_number":12,"context_line":"        services \u003d {}"},{"line_number":13,"context_line":"        services \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":14,"context_line":"        role \u003d self.create_role(service_name\u003dservices[\u0027name\u0027]).json[\u0027role\u0027]"},{"line_number":15,"context_line":"        password \u003d common.unique_str()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBQ%3D","line":12,"updated":"2011-12-06 04:29:23.000000000","message":"service*","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/test/functional/test_token.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.tenant \u003d self.create_tenant().json[\u0027tenant\u0027]"},{"line_number":27,"context_line":"        self.user \u003d self.create_user_with_known_password("},{"line_number":28,"context_line":"            tenant_id\u003dself.tenant[\u0027id\u0027]).json[\u0027user\u0027]"},{"line_number":29,"context_line":"        self.services \u003d {}"},{"line_number":30,"context_line":"        self.services \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":31,"context_line":"        another_service \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":32,"context_line":"        ar \u003d self.create_role(service_name\u003danother_service[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBI%3D","line":29,"updated":"2011-12-06 04:29:23.000000000","message":"service*","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def setUp(self, *args, **kwargs):"},{"line_number":114,"context_line":"        super(CheckToken, self).setUp(*args, **kwargs)"},{"line_number":115,"context_line":"        self.tenant \u003d self.create_tenant().json[\u0027tenant\u0027]"},{"line_number":116,"context_line":"        self.services \u003d {}"},{"line_number":117,"context_line":"        self.services \u003d self.create_service().json[\u0027OS-KSADM:service\u0027]"},{"line_number":118,"context_line":"        self.user \u003d self.create_user_with_known_password("},{"line_number":119,"context_line":"            tenant_id\u003dself.tenant[\u0027id\u0027]).json[\u0027user\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBE%3D","line":116,"updated":"2011-12-06 04:29:23.000000000","message":"service*","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}],"keystone/test/sampledata.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8a6d4f12e2d148702e8283e057b86d657b136beb","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    (\u0027tenant\u0027, \u0027disable\u0027, \u0027project-y\u0027),"},{"line_number":9,"context_line":"    (\u0027tenant\u0027, \u0027add\u0027, \u0027coffee-tea\u0027),"},{"line_number":10,"context_line":"# Add some services for the service roles"},{"line_number":11,"context_line":"    (\u0027service\u0027, \u0027add\u0027, \u0027coffee\u0027,"},{"line_number":12,"context_line":"        \u0027coffee service\u0027, \u0027coffee service\u0027),"},{"line_number":13,"context_line":"    (\u0027service\u0027, \u0027add\u0027, \u0027tea\u0027,"},{"line_number":14,"context_line":"        \u0027tea house\u0027, \u0027tea house\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F%2FBU%3D","line":11,"updated":"2011-12-06 04:29:23.000000000","message":"I like this; we should theme the entire sampledata file... and possibly some docs.","commit_id":"d5f106de7ec2f76f8c59af1d51d2363d93b8b52a"}]}
