)]}'
{"keystone/service.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"17bfa6f2b85cbace557b4a10d21d59611127ddde","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        if \u0027passwordCredentials\u0027 in auth:"},{"line_number":290,"context_line":"            user_id \u003d auth[\u0027passwordCredentials\u0027].get(\u0027userId\u0027, None)"},{"line_number":291,"context_line":"            username \u003d auth[\u0027passwordCredentials\u0027].get(\u0027username\u0027, \u0027\u0027)"},{"line_number":292,"context_line":"            password \u003d auth[\u0027passwordCredentials\u0027].get(\u0027password\u0027, \u0027\u0027)"},{"line_number":293,"context_line":"            tenant_name \u003d auth.get(\u0027tenantName\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FHYQ%3D","line":290,"updated":"2012-10-16 17:29:35.000000000","message":"With proper validation, we can remove the default values on 290, 291, 292 and 309.","commit_id":"24709f49ce6bde17d2981942e2ad33d3d1a907ca"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"17bfa6f2b85cbace557b4a10d21d59611127ddde","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                except exception.UserNotFound:"},{"line_number":301,"context_line":"                    raise exception.Unauthorized()"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"            if not user_id or not password:"},{"line_number":304,"context_line":"                raise exception.ValidationError("},{"line_number":305,"context_line":"                    attribute\u003d\u0027username and password\u0027,"},{"line_number":306,"context_line":"                    target\u003d\u0027passwordCredentials\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FHYY%3D","line":303,"updated":"2012-10-16 17:29:35.000000000","message":"As-is, the error message would be misleading if a userId was provided, but no password. The error message would imply that a userId was not expected, and that a username and password are required instead.\n\nUsername/userId should be checked ahead of line 295:\n\n    if user_id is None and username is None:\n        raise exception.ValidationError(\n            attribute\u003d\u0027username or userId\u0027,\n            target\u003d\u0027passwordCredentials\u0027)\n\nAnd password should be checked separately:\n\n    if password is None:\n        raise exception.ValidationError(\n            attribute\u003d\u0027password\u0027,\n            target\u003d\u0027passwordCredentials\u0027)","commit_id":"24709f49ce6bde17d2981942e2ad33d3d1a907ca"},{"author":{"_account_id":1633,"name":"unmesh-gurjar","email":"unmesh.gurjar@hp.com","username":"unmesh-gurjar"},"change_message_id":"69de461ef08badc692aee77425ad117dd4824212","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                except exception.UserNotFound:"},{"line_number":301,"context_line":"                    raise exception.Unauthorized()"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"            if not user_id or not password:"},{"line_number":304,"context_line":"                raise exception.ValidationError("},{"line_number":305,"context_line":"                    attribute\u003d\u0027username and password\u0027,"},{"line_number":306,"context_line":"                    target\u003d\u0027passwordCredentials\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F%2F2o%3D","line":303,"in_reply_to":"AAAALH%2F%2FHYY%3D","updated":"2012-10-22 11:56:29.000000000","message":"Done","commit_id":"24709f49ce6bde17d2981942e2ad33d3d1a907ca"}]}
