)]}'
{"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"4f442484e34e2e50169e147884c9e5164186caa0","unresolved":false,"context_lines":[{"line_number":2545,"context_line":"    def test_federated_unscoped_token_with_multiple_groups(self):"},{"line_number":2546,"context_line":"        assertion \u003d \u0027ANOTHER_CUSTOMER_ASSERTION\u0027"},{"line_number":2547,"context_line":"        resp \u003d self._issue_unscoped_token(assertion\u003dassertion)"},{"line_number":2548,"context_line":"        self.assertEqual(247, len(resp.headers[\u0027X-Subject-Token\u0027]))"},{"line_number":2549,"context_line":"        self.assertValidMappedUser(resp.json_body[\u0027token\u0027])"},{"line_number":2550,"context_line":""},{"line_number":2551,"context_line":"    def test_validate_federated_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_3e22ac52","line":2548,"range":{"start_line":2548,"start_character":8,"end_line":2548,"end_character":67},"updated":"2016-07-06 15:15:03.000000000","message":"does this mean that the length of fernet tokens now depends on the length of username? Can i come to keystone with username of arbitrary length and break it?","commit_id":"241d98a52922f0cc11227514ac43c7dc75eb60d3"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"34f07c0c0a6f20475bb322d27d3de597b1320e5f","unresolved":false,"context_lines":[{"line_number":2545,"context_line":"    def test_federated_unscoped_token_with_multiple_groups(self):"},{"line_number":2546,"context_line":"        assertion \u003d \u0027ANOTHER_CUSTOMER_ASSERTION\u0027"},{"line_number":2547,"context_line":"        resp \u003d self._issue_unscoped_token(assertion\u003dassertion)"},{"line_number":2548,"context_line":"        self.assertEqual(247, len(resp.headers[\u0027X-Subject-Token\u0027]))"},{"line_number":2549,"context_line":"        self.assertValidMappedUser(resp.json_body[\u0027token\u0027])"},{"line_number":2550,"context_line":""},{"line_number":2551,"context_line":"    def test_validate_federated_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_d29c39c2","line":2548,"range":{"start_line":2548,"start_character":8,"end_line":2548,"end_character":67},"in_reply_to":"1aa78d24_3e22ac52","updated":"2016-07-06 16:10:45.000000000","message":"good question and I\u0027m afraid the answer is yes. that\u0027s why I put this patch up to get some feedback from others since I\u0027m not sure if this solution is the best for Fernet because it can extend the payload length close to the limit.","commit_id":"241d98a52922f0cc11227514ac43c7dc75eb60d3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6981464527c6b157907e034cabced06dba462d32","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("},{"line_number":2511,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2512,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2513,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"},{"line_number":2514,"context_line":"        r \u003d self.v3_create_token("},{"line_number":2515,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_f31e8d6e","line":2512,"updated":"2016-07-06 20:31:20.000000000","message":"Would it make sense to add this same assertion for the user id?","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"13c8a4c35eb4e3950f64535b677491adb3506c26","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("},{"line_number":2511,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2512,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2513,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"},{"line_number":2514,"context_line":"        r \u003d self.v3_create_token("},{"line_number":2515,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_83b96918","line":2512,"in_reply_to":"1aa78d24_2986e6da","updated":"2016-07-13 21:41:56.000000000","message":"Ah - that makes sense. Thanks!","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"34dde1f831f90e131ff5f73b5b022b115b06646f","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("},{"line_number":2511,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2512,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2513,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"},{"line_number":2514,"context_line":"        r \u003d self.v3_create_token("},{"line_number":2515,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_2986e6da","line":2512,"in_reply_to":"1aa78d24_f31e8d6e","updated":"2016-07-06 20:56:48.000000000","message":"Hm, the user_id is generated as a UUID on the fly so we don\u0027t have it in the EMPLOYEE_ASSERTION and we don\u0027t know its expected value.","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6981464527c6b157907e034cabced06dba462d32","unresolved":false,"context_lines":[{"line_number":2516,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2517,"context_line":"        self.assertEqual("},{"line_number":2518,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2519,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2520,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"},{"line_number":2521,"context_line":""},{"line_number":2522,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_53104159","line":2519,"updated":"2016-07-06 20:31:20.000000000","message":"Same comment here.","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6981464527c6b157907e034cabced06dba462d32","unresolved":false,"context_lines":[{"line_number":2545,"context_line":"    def test_federated_unscoped_token_with_multiple_groups(self):"},{"line_number":2546,"context_line":"        assertion \u003d \u0027ANOTHER_CUSTOMER_ASSERTION\u0027"},{"line_number":2547,"context_line":"        resp \u003d self._issue_unscoped_token(assertion\u003dassertion)"},{"line_number":2548,"context_line":"        self.assertEqual(247, len(resp.headers[\u0027X-Subject-Token\u0027]))"},{"line_number":2549,"context_line":"        self.assertValidMappedUser(resp.json_body[\u0027token\u0027])"},{"line_number":2550,"context_line":""},{"line_number":2551,"context_line":"    def test_validate_federated_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_9360e902","line":2548,"updated":"2016-07-06 20:31:20.000000000","message":"ooo this is just *barely* under the 255 limit","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"34dde1f831f90e131ff5f73b5b022b115b06646f","unresolved":false,"context_lines":[{"line_number":2545,"context_line":"    def test_federated_unscoped_token_with_multiple_groups(self):"},{"line_number":2546,"context_line":"        assertion \u003d \u0027ANOTHER_CUSTOMER_ASSERTION\u0027"},{"line_number":2547,"context_line":"        resp \u003d self._issue_unscoped_token(assertion\u003dassertion)"},{"line_number":2548,"context_line":"        self.assertEqual(247, len(resp.headers[\u0027X-Subject-Token\u0027]))"},{"line_number":2549,"context_line":"        self.assertValidMappedUser(resp.json_body[\u0027token\u0027])"},{"line_number":2550,"context_line":""},{"line_number":2551,"context_line":"    def test_validate_federated_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_69af4e2a","line":2548,"in_reply_to":"1aa78d24_9360e902","updated":"2016-07-06 20:56:48.000000000","message":"yup, that\u0027s the scary part with this patch..","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9310e08d6a007066df814a09390afa8b8f387eba","unresolved":false,"context_lines":[{"line_number":2507,"context_line":"    def test_user_name_and_id_in_federation_token(self):"},{"line_number":2508,"context_line":"        r \u003d self._issue_unscoped_token(assertion\u003d\u0027EMPLOYEE_ASSERTION\u0027)"},{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("},{"line_number":2511,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2512,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2513,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1e311eed","line":2510,"range":{"start_line":2510,"start_character":13,"end_line":2510,"end_character":24},"updated":"2016-07-08 20:17:55.000000000","message":"should be assertEqual(expected, actual)","commit_id":"85081726d3a4717d4b9ceb238c82788cc2df2cc5"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"60b6b4110438039f48c212bcdbf0a928c715b22f","unresolved":false,"context_lines":[{"line_number":2507,"context_line":"    def test_user_name_and_id_in_federation_token(self):"},{"line_number":2508,"context_line":"        r \u003d self._issue_unscoped_token(assertion\u003d\u0027EMPLOYEE_ASSERTION\u0027)"},{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("},{"line_number":2511,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2512,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2513,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_54d70723","line":2510,"range":{"start_line":2510,"start_character":13,"end_line":2510,"end_character":24},"in_reply_to":"1aa78d24_1e311eed","updated":"2016-07-08 21:11:47.000000000","message":"Done","commit_id":"85081726d3a4717d4b9ceb238c82788cc2df2cc5"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9310e08d6a007066df814a09390afa8b8f387eba","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        r \u003d self.v3_create_token("},{"line_number":2515,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"},{"line_number":2516,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2517,"context_line":"        self.assertEqual("},{"line_number":2518,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2519,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2520,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_9e722eac","line":2517,"range":{"start_line":2517,"start_character":13,"end_line":2517,"end_character":24},"updated":"2016-07-08 20:17:55.000000000","message":"should be assertEqual(expected, actual)","commit_id":"85081726d3a4717d4b9ceb238c82788cc2df2cc5"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"60b6b4110438039f48c212bcdbf0a928c715b22f","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        r \u003d self.v3_create_token("},{"line_number":2515,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"},{"line_number":2516,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2517,"context_line":"        self.assertEqual("},{"line_number":2518,"context_line":"            token[\u0027user\u0027][\u0027name\u0027],"},{"line_number":2519,"context_line":"            mapping_fixtures.EMPLOYEE_ASSERTION[\u0027UserName\u0027])"},{"line_number":2520,"context_line":"        self.assertNotEqual(token[\u0027user\u0027][\u0027name\u0027], token[\u0027user\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b4dc6b47","line":2517,"range":{"start_line":2517,"start_character":13,"end_line":2517,"end_character":24},"in_reply_to":"1aa78d24_9e722eac","updated":"2016-07-08 21:11:47.000000000","message":"Done","commit_id":"85081726d3a4717d4b9ceb238c82788cc2df2cc5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2091577f5e06753c648bff963805d561ef99c7bf","unresolved":false,"context_lines":[{"line_number":2504,"context_line":"                          self._issue_unscoped_token,"},{"line_number":2505,"context_line":"                          assertion\u003d\u0027ANOTHER_LOCAL_USER_ASSERTION\u0027)"},{"line_number":2506,"context_line":""},{"line_number":2507,"context_line":"    def test_user_name_and_id_in_federation_token(self):"},{"line_number":2508,"context_line":"        r \u003d self._issue_unscoped_token(assertion\u003d\u0027EMPLOYEE_ASSERTION\u0027)"},{"line_number":2509,"context_line":"        token \u003d r.json_body[\u0027token\u0027]"},{"line_number":2510,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_8bf22499","line":2507,"range":{"start_line":2507,"start_character":8,"end_line":2507,"end_character":49},"updated":"2016-07-18 05:41:47.000000000","message":"nice test","commit_id":"2042c955c81929deb47bc8cc77082b085faaa47d"}],"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"ff5716d4ffb29957070914201d080115b5bceb44","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        token \u003d token_data[\u0027token\u0027]"},{"line_number":141,"context_line":"        exp_user_info \u003d {"},{"line_number":142,"context_line":"            \u0027id\u0027: user_ref[\u0027id\u0027],"},{"line_number":143,"context_line":"            # FIXME: bug 1482701 - name should be user_ref[\u0027name\u0027]"},{"line_number":144,"context_line":"            \u0027name\u0027: user_ref[\u0027id\u0027],"},{"line_number":145,"context_line":"            \u0027domain\u0027: {\u0027id\u0027: CONF.federation.federated_domain_name,"},{"line_number":146,"context_line":"                       \u0027name\u0027: CONF.federation.federated_domain_name, },"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_6a9e1064","line":143,"updated":"2016-06-30 16:26:45.000000000","message":"Please add test that checks name in user_ref.\nIt should fail, so please use @wip decorator with bug reference.","commit_id":"e79292153cafda4d251b4df56f14cc9157fefa80"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4b928faf1266e4f83c8570f975c9f19fefa9513d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        token \u003d token_data[\u0027token\u0027]"},{"line_number":141,"context_line":"        exp_user_info \u003d {"},{"line_number":142,"context_line":"            \u0027id\u0027: user_ref[\u0027id\u0027],"},{"line_number":143,"context_line":"            # FIXME: bug 1482701 - name should be user_ref[\u0027name\u0027]"},{"line_number":144,"context_line":"            \u0027name\u0027: user_ref[\u0027id\u0027],"},{"line_number":145,"context_line":"            \u0027domain\u0027: {\u0027id\u0027: CONF.federation.federated_domain_name,"},{"line_number":146,"context_line":"                       \u0027name\u0027: CONF.federation.federated_domain_name, },"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_e0e69fae","line":143,"in_reply_to":"3aaa91ec_6a9e1064","updated":"2016-06-30 17:04:12.000000000","message":"+1","commit_id":"e79292153cafda4d251b4df56f14cc9157fefa80"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"8c3b88bf78f2a6938f20511d9b299fc3bb87159f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        token \u003d token_data[\u0027token\u0027]"},{"line_number":141,"context_line":"        exp_user_info \u003d {"},{"line_number":142,"context_line":"            \u0027id\u0027: user_ref[\u0027id\u0027],"},{"line_number":143,"context_line":"            # FIXME: bug 1482701 - name should be user_ref[\u0027name\u0027]"},{"line_number":144,"context_line":"            \u0027name\u0027: user_ref[\u0027id\u0027],"},{"line_number":145,"context_line":"            \u0027domain\u0027: {\u0027id\u0027: CONF.federation.federated_domain_name,"},{"line_number":146,"context_line":"                       \u0027name\u0027: CONF.federation.federated_domain_name, },"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_74ad1e88","line":143,"in_reply_to":"3aaa91ec_6a9e1064","updated":"2016-07-02 00:43:37.000000000","message":"Ended up fixing this in this review.","commit_id":"e79292153cafda4d251b4df56f14cc9157fefa80"}],"keystone/token/providers/common.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d156349fa9cdf40c7263f4176b2e2fc9e4dfd968","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    def _handle_mapped_tokens(self, auth_context, project_id, domain_id):"},{"line_number":635,"context_line":"        user_id \u003d auth_context[\u0027user_id\u0027]"},{"line_number":636,"context_line":"        user_name \u003d auth_context.get(\u0027user_name\u0027, None)"},{"line_number":637,"context_line":"        group_ids \u003d auth_context[\u0027group_ids\u0027]"},{"line_number":638,"context_line":"        idp \u003d auth_context[federation_constants.IDENTITY_PROVIDER]"},{"line_number":639,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_eb7fd814","line":636,"range":{"start_line":636,"start_character":50,"end_line":636,"end_character":54},"updated":"2016-06-29 19:40:55.000000000","message":"why not just:\n\n  user_id \u003d auth_context[\u0027user_id\u0027]\n  url_safe \u003d parse.unquote(user_id)\n  user_name \u003d auth_context.get(\u0027user_name\u0027, url_safe)\n\nand in the dict:\n\n  \u0027user\u0027: {\n    \u0027id\u0027: user_id,\n    \u0027name\u0027: user_name,\n    ...","commit_id":"8840a273abb57c722655b951904d0ea55f4bd1be"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"bbf4041d046066fa91651acd7245474a38282079","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    def _handle_mapped_tokens(self, auth_context, project_id, domain_id):"},{"line_number":635,"context_line":"        user_id \u003d auth_context[\u0027user_id\u0027]"},{"line_number":636,"context_line":"        user_name \u003d auth_context.get(\u0027user_name\u0027, None)"},{"line_number":637,"context_line":"        group_ids \u003d auth_context[\u0027group_ids\u0027]"},{"line_number":638,"context_line":"        idp \u003d auth_context[federation_constants.IDENTITY_PROVIDER]"},{"line_number":639,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_a9bb110e","line":636,"range":{"start_line":636,"start_character":50,"end_line":636,"end_character":54},"in_reply_to":"3aaa91ec_eb7fd814","updated":"2016-06-29 23:21:43.000000000","message":"I modified this in a similar way, maybe even simpler.","commit_id":"8840a273abb57c722655b951904d0ea55f4bd1be"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"febf0c842e588ab0b6dfeb2d24176512666b00a4","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_098b5869","line":647,"range":{"start_line":647,"start_character":37,"end_line":647,"end_character":38},"updated":"2016-07-11 23:28:20.000000000","message":"Not sure if I understand this. If shadow user is expected to exist, we should let UserNotFound exception bubble up. If this is an ephemeral user, wouldn\u0027t the old logic still applicable?","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ffdb8c0e01afba7d56a0b94d819e64e90d647f9f","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_4f02d20a","line":647,"range":{"start_line":647,"start_character":37,"end_line":647,"end_character":38},"in_reply_to":"1aa78d24_098b5869","updated":"2016-07-14 18:27:03.000000000","message":"Yes, you should let UserNotFound bubble up.","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"08c3329fdbb45c0b9db9b2e54809d506b2f8478c","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_f5f5c382","line":647,"range":{"start_line":647,"start_character":37,"end_line":647,"end_character":38},"in_reply_to":"1aa78d24_098b5869","updated":"2016-07-12 21:24:35.000000000","message":"good question. The reason for adding the try;except was because of this test failing: https://github.com/openstack/keystone/blob/master/keystone/tests/unit/token/test_fernet_provider.py#L114. that test calls issue_v3_token directly without authenticating so the shadow user is not in the database yet. If we think this can create an issue, maybe I should focus on modifying the test..?","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"519ccc5cee022128b768c1d81ebc93f2b80a6322","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_3e3c08bf","line":647,"in_reply_to":"1aa78d24_4377813b","updated":"2016-07-13 22:02:47.000000000","message":"Lance, right - that\u0027s my understanding as well. I will add Ron to the review, maybe we can get some shadow-users coaching from him..","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ffdb8c0e01afba7d56a0b94d819e64e90d647f9f","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_ef661eed","line":647,"in_reply_to":"1aa78d24_4377813b","updated":"2016-07-14 18:27:03.000000000","message":"That is correct Lance, after user authenticates, there is not reason to reference shadow users.","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"0335224f741ead073817f2cb360973524616a2c2","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"fad55976_e0f8027f","line":647,"in_reply_to":"1aa78d24_ef661eed","updated":"2016-07-15 23:39:12.000000000","message":"After using identity_api instead of shadow_users_api the culprit test that I was talking about works, so I eliminated the try/except block","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"de92ea897be9016bb6f29060ab84fef5a20e0ff5","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_4377813b","line":647,"in_reply_to":"1aa78d24_f5f5c382","updated":"2016-07-13 21:46:36.000000000","message":"When a federated user authenticates against keystone for the first time, we don\u0027t create the shadow user reference until *after* authentication is successful, right? We should get Ron\u0027s eyes on this, too.","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ffdb8c0e01afba7d56a0b94d819e64e90d647f9f","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        group_ids \u003d auth_context[\u0027group_ids\u0027]"},{"line_number":643,"context_line":"        idp \u003d auth_context[federation_constants.IDENTITY_PROVIDER]"},{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"},{"line_number":651,"context_line":"            \u0027user\u0027: {"},{"line_number":652,"context_line":"                \u0027id\u0027: user_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_d407771b","line":649,"range":{"start_line":645,"start_character":8,"end_line":649,"end_character":37},"updated":"2016-07-14 18:27:03.000000000","message":"Since the user has already authenticated, the user will be in the backend; thus, you don\u0027t need a try/except and you don\u0027t need to call shadow_users_api. Use the identity_api instead:\nuser_dict \u003d self.identity_api.get_user(user_id)","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"0335224f741ead073817f2cb360973524616a2c2","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        group_ids \u003d auth_context[\u0027group_ids\u0027]"},{"line_number":643,"context_line":"        idp \u003d auth_context[federation_constants.IDENTITY_PROVIDER]"},{"line_number":644,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":645,"context_line":"        try:"},{"line_number":646,"context_line":"            user_dict \u003d self.shadow_users_api.get_user(user_id)"},{"line_number":647,"context_line":"        except exception.UserNotFound:"},{"line_number":648,"context_line":"            return None"},{"line_number":649,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":650,"context_line":"        token_data \u003d {"},{"line_number":651,"context_line":"            \u0027user\u0027: {"},{"line_number":652,"context_line":"                \u0027id\u0027: user_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fad55976_60b6d2dd","line":649,"range":{"start_line":645,"start_character":8,"end_line":649,"end_character":37},"in_reply_to":"1aa78d24_d407771b","updated":"2016-07-15 23:39:12.000000000","message":"Done","commit_id":"dfe1d97ad9549ec85b44b4446493aafb4b1bdd35"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2091577f5e06753c648bff963805d561ef99c7bf","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        user_dict \u003d self.identity_api.get_user(user_id)"},{"line_number":646,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        token_data \u003d {"},{"line_number":649,"context_line":"            \u0027user\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_0b359445","line":646,"range":{"start_line":646,"start_character":8,"end_line":646,"end_character":37},"updated":"2016-07-18 05:41:47.000000000","message":"what if there is no name, or do we safe guard that by returning the ID?","commit_id":"2042c955c81929deb47bc8cc77082b085faaa47d"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"aebc0a0c62740fb7b459d377db179f319dc39967","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        user_dict \u003d self.identity_api.get_user(user_id)"},{"line_number":646,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        token_data \u003d {"},{"line_number":649,"context_line":"            \u0027user\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_25cfd3b1","line":646,"range":{"start_line":646,"start_character":8,"end_line":646,"end_character":37},"in_reply_to":"dada55a8_032baf83","updated":"2016-07-18 13:25:53.000000000","message":"yes correct, if the name is not defined, the user ID will be set as the name.","commit_id":"2042c955c81929deb47bc8cc77082b085faaa47d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d785cc53a9649a9acdc24f7cf8f24e8f15db3e6f","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        protocol \u003d auth_context[federation_constants.PROTOCOL]"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        user_dict \u003d self.identity_api.get_user(user_id)"},{"line_number":646,"context_line":"        user_name \u003d user_dict[\u0027name\u0027]"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        token_data \u003d {"},{"line_number":649,"context_line":"            \u0027user\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_032baf83","line":646,"range":{"start_line":646,"start_character":8,"end_line":646,"end_character":37},"in_reply_to":"dada55a8_0b359445","updated":"2016-07-18 11:18:41.000000000","message":"think the name field is set to the ID if not present in the mapped plugin","commit_id":"2042c955c81929deb47bc8cc77082b085faaa47d"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6981464527c6b157907e034cabced06dba462d32","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        (is_stored_as_bytes, user_id) \u003d payload[0]"},{"line_number":548,"context_line":"        if is_stored_as_bytes:"},{"line_number":549,"context_line":"            user_id \u003d cls.convert_uuid_bytes_to_hex(user_id)"},{"line_number":550,"context_line":"        user_name \u003d payload[1]"},{"line_number":551,"context_line":"        if isinstance(user_name, six.binary_type):"},{"line_number":552,"context_line":"            user_name \u003d user_name.decode(\u0027utf-8\u0027)"},{"line_number":553,"context_line":"        methods \u003d auth_plugins.convert_integer_to_method_list(payload[2])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_aed65cee","line":550,"updated":"2016-07-06 20:31:20.000000000","message":"Packing the username is only specific to federated fernet tokens, right? If that is the case should we just put it into the federated_info dictionary? Then the other token formatters don\u0027t have to change their method signatures for something they don\u0027t really need. The federated_info dict is essentially just a bunch of metadata about federated authentication for that user, user name could apply to that as well.","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"},{"author":{"_account_id":20398,"name":"Roxana Gherle","username":"gherle","inactive":true},"change_message_id":"34dde1f831f90e131ff5f73b5b022b115b06646f","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        (is_stored_as_bytes, user_id) \u003d payload[0]"},{"line_number":548,"context_line":"        if is_stored_as_bytes:"},{"line_number":549,"context_line":"            user_id \u003d cls.convert_uuid_bytes_to_hex(user_id)"},{"line_number":550,"context_line":"        user_name \u003d payload[1]"},{"line_number":551,"context_line":"        if isinstance(user_name, six.binary_type):"},{"line_number":552,"context_line":"            user_name \u003d user_name.decode(\u0027utf-8\u0027)"},{"line_number":553,"context_line":"        methods \u003d auth_plugins.convert_integer_to_method_list(payload[2])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_49f1b200","line":550,"in_reply_to":"1aa78d24_aed65cee","updated":"2016-07-06 20:56:48.000000000","message":"that\u0027s a great idea, let me try to do that. thanks!","commit_id":"bfa3da7f904a4bdc3160873db753a53129f98b68"}]}
