)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f3e15fb6ca57cbdb5363f9144f7bbbbc9782140","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"da86d52c_7e21829e","updated":"2015-02-03 07:42:51.000000000","message":"mention \n\n  Implements: blueprint federated-identity\n\nsomewhere in this message","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3865db64f73e1e7c19f42f1bffc1d732f1159405","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Thai Tran \u003ctqtran@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-31 02:20:48 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP test websso stuff"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updated the following:"},{"line_number":10,"context_line":"* OPENSTACK_KEYSTONE_URL\u003d\"http://10.0.2.15:5000/v3\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_28dd5e15","line":7,"updated":"2015-01-31 02:25:41.000000000","message":"give this a better title :)","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4e05e8b7b3cad669c1602eac64786079dc5bbed5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Thai Tran \u003ctqtran@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-31 02:20:48 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP test websso stuff"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updated the following:"},{"line_number":10,"context_line":"* OPENSTACK_KEYSTONE_URL\u003d\"http://10.0.2.15:5000/v3\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_6883d6cc","line":7,"in_reply_to":"da86d52c_28dd5e15","updated":"2015-01-31 02:31:27.000000000","message":"Done","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3865db64f73e1e7c19f42f1bffc1d732f1159405","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* and the option to set identity to v3"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Added the following new options in settings.py"},{"line_number":14,"context_line":"* WEBSSO_ENABLED\u003dTrue"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"See also Keystone server side details:"},{"line_number":17,"context_line":"  https://review.openstack.org/#/c/136177/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_48e292d6","line":14,"updated":"2015-01-31 02:25:41.000000000","message":"not sure how much of this message is relevant","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4e05e8b7b3cad669c1602eac64786079dc5bbed5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* and the option to set identity to v3"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Added the following new options in settings.py"},{"line_number":14,"context_line":"* WEBSSO_ENABLED\u003dTrue"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"See also Keystone server side details:"},{"line_number":17,"context_line":"  https://review.openstack.org/#/c/136177/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_2879defc","line":14,"in_reply_to":"da86d52c_48e292d6","updated":"2015-01-31 02:31:27.000000000","message":"I think its useful to have it. Otherwise, how will people know how to test it?","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3865db64f73e1e7c19f42f1bffc1d732f1159405","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  https://review.openstack.org/#/c/136177/"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Rebase and some UI changes atm."},{"line_number":20,"context_line":"Depends on: "},{"line_number":21,"context_line":"https://review.openstack.org/#/c/151842/"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Co-Authored-By: Thai Tran \u003ctqtran@us.ibm.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_08c17a2e","line":20,"updated":"2015-01-31 02:25:41.000000000","message":"damn white space!","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4e05e8b7b3cad669c1602eac64786079dc5bbed5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  https://review.openstack.org/#/c/136177/"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Rebase and some UI changes atm."},{"line_number":20,"context_line":"Depends on: "},{"line_number":21,"context_line":"https://review.openstack.org/#/c/151842/"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Co-Authored-By: Thai Tran \u003ctqtran@us.ibm.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"da86d52c_88880ae9","line":20,"in_reply_to":"da86d52c_08c17a2e","updated":"2015-01-31 02:31:27.000000000","message":"Done","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7ebdeba79e69c53f5f820388d976bbe940856d53","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Thai Tran \u003ctqtran@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-13 15:55:23 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add authentication using websso"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To enable websso, make sure you have your environment configured."},{"line_number":10,"context_line":"Then add following to Horizon settings:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a80dd14_36d3b460","line":7,"updated":"2015-03-12 01:18:05.000000000","message":"I think we should take the term sso out, I don\u0027t think this is really sso.\n\nA property of SSO is if I already login to one app, and I opened horizon it should directly log me in.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b17f30e886b14ed03f66a1da4dc20473448d094d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add authentication using websso"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To enable websso, make sure you have your environment configured."},{"line_number":10,"context_line":"Then add following to Horizon settings:"},{"line_number":11,"context_line":"WEBSSO_ENABLED\u003dTrue"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends on:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a80dd14_cae1d1fd","line":10,"updated":"2015-03-11 23:05:30.000000000","message":"Note, mention that you need to enable KEYSTONE version as well.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"}],"openstack_auth/backend.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        keystone_client \u003d utils.get_keystone_client()"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            if \u0027token\u0027 in request.GET:"},{"line_number":91,"context_line":"                token \u003d request.GET.get(\"token\")"},{"line_number":92,"context_line":"                client \u003d keystone_client.Client(token\u003dtoken,"},{"line_number":93,"context_line":"                                                auth_url\u003dauth_url,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_905e0a11","line":90,"updated":"2015-01-29 18:27:21.000000000","message":"if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        keystone_client \u003d utils.get_keystone_client()"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            if \u0027token\u0027 in request.GET:"},{"line_number":91,"context_line":"                token \u003d request.GET.get(\"token\")"},{"line_number":92,"context_line":"                client \u003d keystone_client.Client(token\u003dtoken,"},{"line_number":93,"context_line":"                                                auth_url\u003dauth_url,"},{"line_number":94,"context_line":"                                                insecure\u003dinsecure,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_506492e4","line":91,"updated":"2015-01-29 18:27:21.000000000","message":"this should be in a post back now, so:\n\n  token \u003d request.POST.get(\"token\")","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            if \u0027token\u0027 in request.GET:"},{"line_number":91,"context_line":"                token \u003d request.GET.get(\"token\")"},{"line_number":92,"context_line":"                client \u003d keystone_client.Client(token\u003dtoken,"},{"line_number":93,"context_line":"                                                auth_url\u003dauth_url,"},{"line_number":94,"context_line":"                                                insecure\u003dinsecure,"},{"line_number":95,"context_line":"                                                cacert\u003dca_cert,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_90b52a33","line":92,"updated":"2015-01-29 18:27:21.000000000","message":"this should be re-worked to use keystoen auth plugins","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        unscoped_client \u003d keystone_client_class(session\u003dsession,"},{"line_number":105,"context_line":"                                                auth\u003dunscoped_auth)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # We list all the user\u0027s projects"},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":110,"context_line":"                projects \u003d unscoped_client.projects.list("}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_cc407b09","side":"PARENT","line":107,"updated":"2015-02-06 01:24:28.000000000","message":"why is this comment removed?","commit_id":"b7133dc77a72018e1cf7a9ce9aa0075cc984e427"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"277aa97468d57a0c1342f4d69b8e671dc5504d20","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        unscoped_client \u003d keystone_client_class(session\u003dsession,"},{"line_number":105,"context_line":"                                                auth\u003dunscoped_auth)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # We list all the user\u0027s projects"},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":110,"context_line":"                projects \u003d unscoped_client.projects.list("}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_085051d3","side":"PARENT","line":107,"in_reply_to":"da86d52c_cc407b09","updated":"2015-02-10 01:14:38.000000000","message":"was messing around and accidentally delete. will add it back in.","commit_id":"b7133dc77a72018e1cf7a9ce9aa0075cc984e427"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d5657ab8d37ace08bad8aa70b2ee6d0e6466a25b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        LOG.debug(\u0027Beginning user authentication for user \"%s\".\u0027 % username)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        interface \u003d getattr(settings, \u0027OPENSTACK_ENDPOINT_TYPE\u0027, \u0027public\u0027)"},{"line_number":73,"context_line":"        websso_enabled \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":74,"context_line":"        auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if auth_url is None:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_4e69a324","line":73,"updated":"2015-02-09 04:07:52.000000000","message":"Might want to rebase this on jamie\u0027s work in: https://review.openstack.org/#/c/153910/\n\nYou can create a TokenAuthPlugin:\n\n  class TokenPlugin(KeystonePlugin):\n\n    def get_plugin(self, auth_url\u003dNone, token\u003dNone, **kwargs):\n        if not token:\n            return None\n\n        if utils.get_keystone_version() \u003e\u003d 3:\n            return v3_auth.Token(...)\n\n        else:\n            return v2_auth.Token(...)\n\nCheck if websso_enabled, if yes, then check if \u0027token\u0027 in request.GET, then you can use the TokenPlugin","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"277aa97468d57a0c1342f4d69b8e671dc5504d20","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        LOG.debug(\u0027Beginning user authentication for user \"%s\".\u0027 % username)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        interface \u003d getattr(settings, \u0027OPENSTACK_ENDPOINT_TYPE\u0027, \u0027public\u0027)"},{"line_number":73,"context_line":"        websso_enabled \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":74,"context_line":"        auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if auth_url is None:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_2837d5b1","line":73,"in_reply_to":"da86d52c_4e69a324","updated":"2015-02-10 01:14:38.000000000","message":"Steve, there is already a token_auth_plugin method available for use. If Jamie is planning on rewriting all auth mechanisms as plugins, he can do that as an independent effort. I\u0027d like to see this go through without too many dependencies.","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d5657ab8d37ace08bad8aa70b2ee6d0e6466a25b","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        interface \u003d getattr(settings, \u0027OPENSTACK_ENDPOINT_TYPE\u0027, \u0027public\u0027)"},{"line_number":73,"context_line":"        websso_enabled \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":74,"context_line":"        auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if auth_url is None:"},{"line_number":77,"context_line":"            auth_url \u003d settings.OPENSTACK_KEYSTONE_URL"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_ae785ff9","line":74,"updated":"2015-02-09 04:07:52.000000000","message":"not sure what the point of auth_type is","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"277aa97468d57a0c1342f4d69b8e671dc5504d20","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        interface \u003d getattr(settings, \u0027OPENSTACK_ENDPOINT_TYPE\u0027, \u0027public\u0027)"},{"line_number":73,"context_line":"        websso_enabled \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":74,"context_line":"        auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if auth_url is None:"},{"line_number":77,"context_line":"            auth_url \u003d settings.OPENSTACK_KEYSTONE_URL"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_a84ae524","line":74,"in_reply_to":"da86d52c_ae785ff9","updated":"2015-02-10 01:14:38.000000000","message":"yeah, just left over code i was playing with. Will clean up.","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"26ada82ddb3d9e92ab8107e1ea84594f46688c0e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                       user_domain_name)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            if \u0027token\u0027 in request.GET:"},{"line_number":90,"context_line":"                import pdb; pdb.set_trace()"},{"line_number":91,"context_line":"                pass"},{"line_number":92,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_f3c21252","line":89,"updated":"2015-02-10 01:27:57.000000000","message":"we should remove this","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        auth_url \u003d utils.fix_auth_url_version(auth_url)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if \u0027token\u0027 in request.POST:"},{"line_number":84,"context_line":"            unscoped_auth \u003d utils.get_token_auth_plugin("},{"line_number":85,"context_line":"                auth_url,"},{"line_number":86,"context_line":"                request.POST.get(\u0027token\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_68735b4e","line":83,"updated":"2015-02-10 22:40:20.000000000","message":"I was going to suggest checking if request.method \u003d\u003d POST, but I think using \u0027in\u0027 is sufficient.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"97cbb6f9a4df928b9597be1bf087ff76a101b7aa","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        auth_url \u003d utils.fix_auth_url_version(auth_url)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if \u0027token\u0027 in request.POST:"},{"line_number":84,"context_line":"            unscoped_auth \u003d utils.get_token_auth_plugin("},{"line_number":85,"context_line":"                auth_url,"},{"line_number":86,"context_line":"                request.POST.get(\u0027token\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_332638cf","line":83,"in_reply_to":"da86d52c_68735b4e","updated":"2015-02-10 23:13:40.000000000","message":"Extra check doesn\u0027t hurt, but its pointless. Unless you POST, there won\u0027t be anything in there anyway. So I agree that it is sufficient for now.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        if \u0027token\u0027 in request.POST:"},{"line_number":84,"context_line":"            unscoped_auth \u003d utils.get_token_auth_plugin("},{"line_number":85,"context_line":"                auth_url,"},{"line_number":86,"context_line":"                request.POST.get(\u0027token\u0027))"},{"line_number":87,"context_line":"        else:"},{"line_number":88,"context_line":"            unscoped_auth \u003d utils.get_password_auth_plugin("},{"line_number":89,"context_line":"                auth_url,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_c8e367d7","line":86,"updated":"2015-02-10 22:40:20.000000000","message":"rather than changing openstack_auth/urls.py, you could just pass in `None` here\n\nset project_id \u003d None before the unscoped_auth declaration, and pass that in (add a comment of course :))","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"97cbb6f9a4df928b9597be1bf087ff76a101b7aa","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        if \u0027token\u0027 in request.POST:"},{"line_number":84,"context_line":"            unscoped_auth \u003d utils.get_token_auth_plugin("},{"line_number":85,"context_line":"                auth_url,"},{"line_number":86,"context_line":"                request.POST.get(\u0027token\u0027))"},{"line_number":87,"context_line":"        else:"},{"line_number":88,"context_line":"            unscoped_auth \u003d utils.get_password_auth_plugin("},{"line_number":89,"context_line":"                auth_url,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_13477478","line":86,"in_reply_to":"da86d52c_c8e367d7","updated":"2015-02-10 23:13:40.000000000","message":"I\u0027m not too familiar with how tokens are use, but do you envision that a project_id will usually be associated with a token? if they are not, I prefer to keep the current implementation, its a bit cleaner. If you think they are, then I can change.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"f36233e68eb84779949d76847b9e80335abfb352","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":118,"context_line":"                if websso_enabled:"},{"line_number":119,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    projects \u003d unscoped_client.projects.list("},{"line_number":122,"context_line":"                        user\u003dunscoped_auth_ref.user_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_569c43c0","line":119,"updated":"2015-02-12 00:46:57.000000000","message":"what happens if I\u0027m using credentials here?\n\ndoes federation.projects.list() handle that?","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4b45163c0925cc94b695a109ecc351b9dc825ed0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":118,"context_line":"                if websso_enabled:"},{"line_number":119,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    projects \u003d unscoped_client.projects.list("},{"line_number":122,"context_line":"                        user\u003dunscoped_auth_ref.user_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_8e71db46","line":119,"in_reply_to":"da86d52c_569c43c0","updated":"2015-02-13 23:43:55.000000000","message":"not sure, steve?","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7ebdeba79e69c53f5f820388d976bbe940856d53","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # We list all the user\u0027s projects"},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":118,"context_line":"                if websso_enabled:"},{"line_number":119,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    projects \u003d unscoped_client.projects.list("}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_5682e800","line":118,"updated":"2015-03-12 01:18:05.000000000","message":"If the user selected \"Keystone Credentials\" to login, it should call projects.list().\n\nThis code will always use federation.projects.list() regardless of what user picks if websso is enabled","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # We list all the user\u0027s projects"},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":118,"context_line":"                if websso_enabled:"},{"line_number":119,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    projects \u003d unscoped_client.projects.list("}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_abf1d66b","line":118,"in_reply_to":"9a80dd14_5682e800","updated":"2015-03-12 18:45:17.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2b9ee30cb61a0fde15e3f076c3b1ddd07a15cea7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except (keystone_exceptions.Unauthorized,"},{"line_number":98,"context_line":"                keystone_exceptions.Forbidden,"},{"line_number":99,"context_line":"                keystone_exceptions.NotFound) as exc:"},{"line_number":100,"context_line":"            msg \u003d _(\u0027Invalid user name or password.\u0027)"},{"line_number":101,"context_line":"            LOG.debug(str(exc))"},{"line_number":102,"context_line":"            raise exceptions.KeystoneAuthException(msg)"},{"line_number":103,"context_line":"        except (keystone_exceptions.ClientException,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_9aa299ac","line":100,"updated":"2015-03-12 19:01:18.000000000","message":"This isn\u0027t the right message in a federated environment if the token is rejected.","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"e1db667c95405c9eea4ed4f94860c77df375a43d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except (keystone_exceptions.Unauthorized,"},{"line_number":98,"context_line":"                keystone_exceptions.Forbidden,"},{"line_number":99,"context_line":"                keystone_exceptions.NotFound) as exc:"},{"line_number":100,"context_line":"            msg \u003d _(\u0027Invalid user name or password.\u0027)"},{"line_number":101,"context_line":"            LOG.debug(str(exc))"},{"line_number":102,"context_line":"            raise exceptions.KeystoneAuthException(msg)"},{"line_number":103,"context_line":"        except (keystone_exceptions.ClientException,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_c0a7c4bb","line":100,"in_reply_to":"9a80dd14_9aa299ac","updated":"2015-03-12 19:38:02.000000000","message":"I\u0027m thinking something close to \u0027Credentials not accepted.\u0027 because they may be valid, but not here.  I think you want 2 different messages because a single user name, password, or token not accepted implies that maybe they put in the wrong password at their idp - but I don\u0027t think that\u0027s the case.","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"da74af6685a7a02f9d027c11df96252fcb3680a0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except (keystone_exceptions.Unauthorized,"},{"line_number":98,"context_line":"                keystone_exceptions.Forbidden,"},{"line_number":99,"context_line":"                keystone_exceptions.NotFound) as exc:"},{"line_number":100,"context_line":"            msg \u003d _(\u0027Invalid user name or password.\u0027)"},{"line_number":101,"context_line":"            LOG.debug(str(exc))"},{"line_number":102,"context_line":"            raise exceptions.KeystoneAuthException(msg)"},{"line_number":103,"context_line":"        except (keystone_exceptions.ClientException,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_a0bd706a","line":100,"in_reply_to":"9a80dd14_c0a7c4bb","updated":"2015-03-12 19:47:15.000000000","message":"Actually, I think it should still be valid. The only time it would fail and do this check is when you manually enter the username and password. If you are using oidc or saml, the credential check is done on the paired authorization server.","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":131,"context_line":"                if unscoped_auth_ref.is_federated:"},{"line_number":132,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":133,"context_line":"                else:"},{"line_number":134,"context_line":"                    projects \u003d unscoped_client.projects.list("},{"line_number":135,"context_line":"                        user\u003dunscoped_auth_ref.user_id)"},{"line_number":136,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_a3364701","line":133,"updated":"2015-03-30 22:46:57.000000000","message":"this can be done relying on the plugin. \n\nreview for projects on plugin: https://review.openstack.org/#/c/168760/\nexample for federation: https://github.com/jamielennox/django-openstack-auth-websso/blob/master/openstack_auth_websso/plugin.py","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"041d2817fbae798cde428f1ccc71e588f87921ba","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":131,"context_line":"                if unscoped_auth_ref.is_federated:"},{"line_number":132,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":133,"context_line":"                else:"},{"line_number":134,"context_line":"                    projects \u003d unscoped_client.projects.list("},{"line_number":135,"context_line":"                        user\u003dunscoped_auth_ref.user_id)"},{"line_number":136,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_a4f4e8f1","line":133,"in_reply_to":"da9b358b_595e4b13","updated":"2015-03-31 18:12:37.000000000","message":"Done","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":131,"context_line":"                if unscoped_auth_ref.is_federated:"},{"line_number":132,"context_line":"                    projects \u003d unscoped_client.federation.projects.list()"},{"line_number":133,"context_line":"                else:"},{"line_number":134,"context_line":"                    projects \u003d unscoped_client.projects.list("},{"line_number":135,"context_line":"                        user\u003dunscoped_auth_ref.user_id)"},{"line_number":136,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_595e4b13","line":133,"in_reply_to":"da9b358b_a3364701","updated":"2015-03-31 00:20:55.000000000","message":"I know that patch is there, but didn\u0027t want to add the dependency.  I added a TODO for the mean time","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        unscoped_token \u003d unscoped_auth_ref.auth_token"},{"line_number":195,"context_line":"        user \u003d auth_user.create_user_from_token("},{"line_number":196,"context_line":"            request,"},{"line_number":197,"context_line":"            auth_user.Token(scoped_auth_ref, unscoped_token\u003dunscoped_token),"},{"line_number":198,"context_line":"            scoped_auth_ref.service_catalog.url_for(endpoint_type\u003dinterface))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if request is not None:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_232357bf","line":197,"updated":"2015-03-30 22:46:57.000000000","message":"why pass unscoped token to Token(), what\u0027s wrong with the session?","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        unscoped_token \u003d unscoped_auth_ref.auth_token"},{"line_number":195,"context_line":"        user \u003d auth_user.create_user_from_token("},{"line_number":196,"context_line":"            request,"},{"line_number":197,"context_line":"            auth_user.Token(scoped_auth_ref, unscoped_token\u003dunscoped_token),"},{"line_number":198,"context_line":"            scoped_auth_ref.service_catalog.url_for(endpoint_type\u003dinterface))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if request is not None:"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_d9a81bde","line":197,"in_reply_to":"da9b358b_232357bf","updated":"2015-03-31 00:20:55.000000000","message":"The accessInfo only have the scoped token, I also have to store the unscoped token now.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"}],"openstack_auth/forms.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":78,"context_line":"            # if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            dummy_url \u003d \u0027http://localhost:5000/v3/OS-FEDERATION/identity_providers/goog/protocols/oidc/auth/?websso\u003dTrue\u0027  # noqa"},{"line_number":83,"context_line":"            choices \u003d ((dummy_url, \u0027goog\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_d06242ac","line":80,"updated":"2015-01-29 18:27:21.000000000","message":"we no longer list idps, just support one","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            dummy_url \u003d \u0027http://localhost:5000/v3/OS-FEDERATION/identity_providers/goog/protocols/oidc/auth/?websso\u003dTrue\u0027  # noqa"},{"line_number":83,"context_line":"            choices \u003d ((dummy_url, \u0027goog\u0027))"},{"line_number":84,"context_line":"            idp \u003d forms.ChoiceField(label\u003d_(\"Identity Provider\"),"},{"line_number":85,"context_line":"                                    choices\u003dchoices)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_30739e81","line":82,"updated":"2015-01-29 18:27:21.000000000","message":"the url should be:\n\nkeystone.example.5000/v3/auth/OS-FEDERATION/websso/{protocol}?origin\u003dhttps%3A//horizon.example.com","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f59cff34c3353e78942401aae72f28826fb29822","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            dummy_url \u003d \u0027http://localhost:5000/v3/OS-FEDERATION/identity_providers/goog/protocols/oidc/auth/?websso\u003dTrue\u0027  # noqa"},{"line_number":83,"context_line":"            choices \u003d ((dummy_url, \u0027goog\u0027))"},{"line_number":84,"context_line":"            idp \u003d forms.ChoiceField(label\u003d_(\"Identity Provider\"),"},{"line_number":85,"context_line":"                                    choices\u003dchoices)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_fd455817","line":82,"in_reply_to":"fa81d914_30739e81","updated":"2015-02-03 19:48:00.000000000","message":"is this hardcoded? or is there a way for me to get the default URL?","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"68da1311fcc28e8a618e30e4f2003a05a6d85035","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            dummy_url \u003d \u0027http://localhost:5000/v3/OS-FEDERATION/identity_providers/goog/protocols/oidc/auth/?websso\u003dTrue\u0027  # noqa"},{"line_number":83,"context_line":"            choices \u003d ((dummy_url, \u0027goog\u0027))"},{"line_number":84,"context_line":"            idp \u003d forms.ChoiceField(label\u003d_(\"Identity Provider\"),"},{"line_number":85,"context_line":"                                    choices\u003dchoices)"},{"line_number":86,"context_line":"            self.fields[\u0027idp\u0027] \u003d idp"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_d00962de","line":84,"updated":"2015-01-29 18:27:21.000000000","message":"the only choice should be the default protocol/idp, or an identity service","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f59cff34c3353e78942401aae72f28826fb29822","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            dummy_url \u003d \u0027http://localhost:5000/v3/OS-FEDERATION/identity_providers/goog/protocols/oidc/auth/?websso\u003dTrue\u0027  # noqa"},{"line_number":83,"context_line":"            choices \u003d ((dummy_url, \u0027goog\u0027))"},{"line_number":84,"context_line":"            idp \u003d forms.ChoiceField(label\u003d_(\"Identity Provider\"),"},{"line_number":85,"context_line":"                                    choices\u003dchoices)"},{"line_number":86,"context_line":"            self.fields[\u0027idp\u0027] \u003d idp"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_5d5664d3","line":84,"in_reply_to":"fa81d914_d00962de","updated":"2015-02-03 19:48:00.000000000","message":"Done","commit_id":"5006b5f43ee0ba1ae70a5986e7b5514d5a817e7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3865db64f73e1e7c19f42f1bffc1d732f1159405","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":78,"context_line":"            # if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            choices \u003d ((\u0027credentials\u0027, \u0027Credentials\u0027),"},{"line_number":83,"context_line":"                       (\u0027idp\u0027, \u0027Identity Service\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_68e756e5","line":80,"updated":"2015-01-31 02:25:41.000000000","message":"you can remove lines 78-81 as they no longer apply. the URL to go to will be based on the IdP + protocol combination set in horizon settings.py","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4e05e8b7b3cad669c1602eac64786079dc5bbed5","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":78,"context_line":"            # if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            choices \u003d ((\u0027credentials\u0027, \u0027Credentials\u0027),"},{"line_number":83,"context_line":"                       (\u0027idp\u0027, \u0027Identity Service\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_a86cee37","line":80,"in_reply_to":"da86d52c_68e756e5","updated":"2015-01-31 02:31:27.000000000","message":"Do we still need the keystone_version check though? What if user enables websso but does not have keystonev3?","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e7632c50323a83252f160639f74436811248e22","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":78,"context_line":"            # if utils.get_keystone_version() \u003e\u003d 3:"},{"line_number":79,"context_line":"            # keystone_client \u003d utils.get_keystone_client()"},{"line_number":80,"context_line":"            # client.federation.identity_providers.list()"},{"line_number":81,"context_line":"            # TODO(stevemar): use public APIs"},{"line_number":82,"context_line":"            choices \u003d ((\u0027credentials\u0027, \u0027Credentials\u0027),"},{"line_number":83,"context_line":"                       (\u0027idp\u0027, \u0027Identity Service\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_eb2052b2","line":80,"in_reply_to":"da86d52c_a86cee37","updated":"2015-02-03 07:41:28.000000000","message":"definitely need the version check, this won\u0027t work if they are using v2","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        if (keystonev3 and websso):"},{"line_number":80,"context_line":"            label \u003d _(\"Authenticate using\")"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, \u0027Credentials\u0027)"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027default_protocol\u0027, \u0027Default Protocol\u0027)"},{"line_number":83,"context_line":"            choice3 \u003d (\u0027discovery_service\u0027, \u0027Discovery Service\u0027)"},{"line_number":84,"context_line":"            choices \u003d (choice1, choice2, choice3)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_0c053345","line":81,"updated":"2015-02-06 01:24:28.000000000","message":"value \"Credentials\" should be translatable","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4c921646e2fb7a43a3396a57de4bf899d84726ef","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        if (keystonev3 and websso):"},{"line_number":80,"context_line":"            label \u003d _(\"Authenticate using\")"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, \u0027Credentials\u0027)"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027default_protocol\u0027, \u0027Default Protocol\u0027)"},{"line_number":83,"context_line":"            choice3 \u003d (\u0027discovery_service\u0027, \u0027Discovery Service\u0027)"},{"line_number":84,"context_line":"            choices \u003d (choice1, choice2, choice3)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_f345b243","line":81,"in_reply_to":"da86d52c_0c053345","updated":"2015-02-10 01:15:46.000000000","message":"Done. Will update this last. Still waiting for final layout, style, and wording.","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        choice0 \u003d getattr(settings, \u0027WEBSSO_DEFAULT_PROTOCOL\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, _(\u0027Credentials\u0027))"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027oidc\u0027, _(\u0027OpenID Connect\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_68efdbb1","line":79,"updated":"2015-02-10 22:40:20.000000000","message":"If we are listing oidc and saml2, then I think we can remove \u0027WEBSSO_DEFAULT_PROTOCOL\u0027 entirely","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"f15b46976fba6267e1ebedbf80fef34f174a096e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        choice0 \u003d getattr(settings, \u0027WEBSSO_DEFAULT_PROTOCOL\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, _(\u0027Credentials\u0027))"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027oidc\u0027, _(\u0027OpenID Connect\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_56bb63e4","line":79,"updated":"2015-02-12 00:52:44.000000000","message":"While you\u0027re adding settings... I think one more around supported protocols should be added. If these 4 are the default list, that\u0027s fine, but it should be tunable.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"97cbb6f9a4df928b9597be1bf087ff76a101b7aa","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        choice0 \u003d getattr(settings, \u0027WEBSSO_DEFAULT_PROTOCOL\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, _(\u0027Credentials\u0027))"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027oidc\u0027, _(\u0027OpenID Connect\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_f3b3c097","line":79,"in_reply_to":"da86d52c_68efdbb1","updated":"2015-02-10 23:13:40.000000000","message":"The label is a bit misleading. Basically, its a user setting that determines which option from the drop down is selected first. So if I have it set to \u0027oidc\u0027 , when I land on the login page, oidc is automatically selected from the drop down first.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"f36233e68eb84779949d76847b9e80335abfb352","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, _(\u0027Credentials\u0027))"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027oidc\u0027, _(\u0027OpenID Connect\u0027))"},{"line_number":83,"context_line":"            choice3 \u003d (\u0027saml2\u0027, _(\u0027Security Assertion Markup Language\u0027))"},{"line_number":84,"context_line":"            choice4 \u003d (\u0027discovery\u0027, _(\u0027Discovery Service\u0027))"},{"line_number":85,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":86,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_76ef871e","line":83,"updated":"2015-02-12 00:46:57.000000000","message":"This is the option we\u0027re going to present to end users?","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"934c2a52d4a5237b7243ebff37166ec54defa763","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choice1 \u003d (\u0027credentials\u0027, _(\u0027Credentials\u0027))"},{"line_number":82,"context_line":"            choice2 \u003d (\u0027oidc\u0027, _(\u0027OpenID Connect\u0027))"},{"line_number":83,"context_line":"            choice3 \u003d (\u0027saml2\u0027, _(\u0027Security Assertion Markup Language\u0027))"},{"line_number":84,"context_line":"            choice4 \u003d (\u0027discovery\u0027, _(\u0027Discovery Service\u0027))"},{"line_number":85,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":86,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_d69c5760","line":83,"in_reply_to":"da86d52c_76ef871e","updated":"2015-02-13 18:45:34.000000000","message":"That was the general consensus in the ML. Do you have something else in mind?","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2f731677ea537a5d355f0abd2621c81f2c83b2f8","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                \u0027login_region\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_2279f12f","line":77,"updated":"2015-03-04 17:15:48.000000000","message":"Nit: extraneous parenthesis","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2e662a604d7b41018d563793c556ad5751bc776d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                \u0027login_region\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_b6b11a91","line":77,"in_reply_to":"9a80dd14_2279f12f","updated":"2015-03-06 22:29:45.000000000","message":"I prefer to have it here, since it shows more clearly what is getting assign to what.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2f731677ea537a5d355f0abd2621c81f2c83b2f8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_58eed2ed","line":79,"updated":"2015-03-04 17:15:48.000000000","message":"Would be nice to show an error if there is an improper set of conditions like keystone v2 + WEBSSO_ENABLED","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_eb474e75","line":79,"in_reply_to":"9a80dd14_102b18ec","updated":"2015-03-12 18:45:17.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7ebdeba79e69c53f5f820388d976bbe940856d53","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_102b18ec","line":79,"in_reply_to":"9a80dd14_1432ba5e","updated":"2015-03-12 01:18:05.000000000","message":"this line could be move inside the \"if\" condition, \"initial\" is not used if the condition is not satisfied.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2e662a604d7b41018d563793c556ad5751bc776d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_96b9767b","line":79,"in_reply_to":"9a80dd14_58eed2ed","updated":"2015-03-06 22:29:45.000000000","message":"I think this should be documented. Not sure what you mean by showing an error? as in logging this?","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"ce93eb185dc8ba85cda61bf6402c557d735201f0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        # if websso is enabled, prepend the select input"},{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_1432ba5e","line":79,"in_reply_to":"9a80dd14_96b9767b","updated":"2015-03-11 16:27:19.000000000","message":"I was thinking of logging the unworkable combination of configuration.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b17f30e886b14ed03f66a1da4dc20473448d094d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_aacd7d88","line":80,"updated":"2015-03-11 23:05:30.000000000","message":"Note: maybe log a warning if websso is enabled but keystone version isn\u0027t \u003e\u003d3","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2f731677ea537a5d355f0abd2621c81f2c83b2f8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_828ffd22","line":80,"updated":"2015-03-04 17:15:48.000000000","message":"more extraneous parenthesis","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2e662a604d7b41018d563793c556ad5751bc776d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_76cfa229","line":80,"in_reply_to":"9a80dd14_828ffd22","updated":"2015-03-06 22:29:45.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7ebdeba79e69c53f5f820388d976bbe940856d53","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        keystonev3 \u003d (utils.get_keystone_version() \u003e\u003d 3)"},{"line_number":78,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":79,"context_line":"        initial \u003d getattr(settings, \u0027WEBSSO_INITIAL_CHOICE\u0027, \u0027credentials\u0027)"},{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_7038d43d","line":80,"in_reply_to":"9a80dd14_aacd7d88","updated":"2015-03-12 01:18:05.000000000","message":"++ this seems a good place to add that","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2f731677ea537a5d355f0abd2621c81f2c83b2f8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"},{"line_number":84,"context_line":"                initial\u003dinitial)"},{"line_number":85,"context_line":"            self.fields.insert(0, \u0027auth_type\u0027, choicefield)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_18929a57","line":83,"updated":"2015-03-04 17:15:48.000000000","message":"WEBSSO_CHOICES are horizon configuration?  I\u0027m surprised this isn\u0027t driven by a keystone API call.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2e662a604d7b41018d563793c556ad5751bc776d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if (keystonev3 and websso):"},{"line_number":81,"context_line":"            choicefield \u003d forms.ChoiceField("},{"line_number":82,"context_line":"                label\u003d_(\"Authenticate using\"),"},{"line_number":83,"context_line":"                choices\u003dgetattr(settings, \u0027WEBSSO_CHOICES\u0027, ()),"},{"line_number":84,"context_line":"                initial\u003dinitial)"},{"line_number":85,"context_line":"            self.fields.insert(0, \u0027auth_type\u0027, choicefield)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_56ce1e2f","line":83,"in_reply_to":"9a80dd14_18929a57","updated":"2015-03-06 22:29:45.000000000","message":"David suggested adding an option to allow deployers to configure what protocol they want to show users. Deployer may choose to set up only oidc and so, it make sense to only show that to users.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"}],"openstack_auth/urls.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \u0027openstack_auth.views\u0027,"},{"line_number":24,"context_line":"    url(r\"^login/$\", \"login\", name\u003d\u0027login\u0027),"},{"line_number":25,"context_line":"    url(r\"^logout/$\", \u0027logout\u0027, name\u003d\u0027logout\u0027),"},{"line_number":26,"context_line":"    url(r\"^websso/$\", \"websso\", name\u003d\u0027websso\u0027),"},{"line_number":27,"context_line":"    url(r\u0027^switch/(?P\u003ctenant_id\u003e[^/]+)/$\u0027, \u0027switch\u0027, name\u003d\u0027switch_tenants\u0027),"},{"line_number":28,"context_line":"    url(r\u0027^switch_services_region/(?P\u003cregion_name\u003e[^/]+)/$\u0027, \u0027switch_region\u0027,"},{"line_number":29,"context_line":"        name\u003d\u0027switch_services_region\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_430d3b3d","line":26,"updated":"2015-03-30 22:46:57.000000000","message":"should have if settings.WEBSSO_ENABLED: urlpatters +\u003d ur(...)","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a6ee72fe52cedca841e3f1e1291541dc30834dbd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \u0027openstack_auth.views\u0027,"},{"line_number":24,"context_line":"    url(r\"^login/$\", \"login\", name\u003d\u0027login\u0027),"},{"line_number":25,"context_line":"    url(r\"^logout/$\", \u0027logout\u0027, name\u003d\u0027logout\u0027),"},{"line_number":26,"context_line":"    url(r\"^websso/$\", \"websso\", name\u003d\u0027websso\u0027),"},{"line_number":27,"context_line":"    url(r\u0027^switch/(?P\u003ctenant_id\u003e[^/]+)/$\u0027, \u0027switch\u0027, name\u003d\u0027switch_tenants\u0027),"},{"line_number":28,"context_line":"    url(r\u0027^switch_services_region/(?P\u003cregion_name\u003e[^/]+)/$\u0027, \u0027switch_region\u0027,"},{"line_number":29,"context_line":"        name\u003d\u0027switch_services_region\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_a81cdb13","line":26,"in_reply_to":"da9b358b_1930c39d","updated":"2015-03-31 04:18:12.000000000","message":"Done","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \u0027openstack_auth.views\u0027,"},{"line_number":24,"context_line":"    url(r\"^login/$\", \"login\", name\u003d\u0027login\u0027),"},{"line_number":25,"context_line":"    url(r\"^logout/$\", \u0027logout\u0027, name\u003d\u0027logout\u0027),"},{"line_number":26,"context_line":"    url(r\"^websso/$\", \"websso\", name\u003d\u0027websso\u0027),"},{"line_number":27,"context_line":"    url(r\u0027^switch/(?P\u003ctenant_id\u003e[^/]+)/$\u0027, \u0027switch\u0027, name\u003d\u0027switch_tenants\u0027),"},{"line_number":28,"context_line":"    url(r\u0027^switch_services_region/(?P\u003cregion_name\u003e[^/]+)/$\u0027, \u0027switch_region\u0027,"},{"line_number":29,"context_line":"        name\u003d\u0027switch_services_region\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_1930c39d","line":26,"in_reply_to":"da9b358b_430d3b3d","updated":"2015-03-31 00:20:55.000000000","message":"I initially had that, but there is something wrong with django tests.  It could resolve the url that is dynamically added when I changed the settings. \n\nWill try to see how if I figure it out","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"}],"openstack_auth/user.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d59ee841b90c7b1dce291750f777337a5de72d23","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        The id of the Keystone domain scoped for the current user/token."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    .. attribute:: federated_logins"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        Whether user authenticated using federation or credentials."},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_d3167c48","line":169,"updated":"2015-03-13 22:19:32.000000000","message":"federated_login*","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d59ee841b90c7b1dce291750f777337a5de72d23","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    .. attribute:: federated_logins"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        Whether user authenticated using federation or credentials."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    def __init__(self, id\u003dNone, token\u003dNone, user\u003dNone, tenant_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_331fd85c","line":171,"updated":"2015-03-13 22:19:32.000000000","message":"might want to say that this is a boolean\n\n  Whether user authenticated using federation or credentials. (Boolean)","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d59ee841b90c7b1dce291750f777337a5de72d23","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # List of variables to be deprecated."},{"line_number":201,"context_line":"        self.tenant_id \u003d self.project_id"},{"line_number":202,"context_line":"        self.tenant_name \u003d self.project_name"},{"line_number":203,"context_line":"        self.federated_login \u003d federated_login"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def __unicode__(self):"},{"line_number":206,"context_line":"        return self.username"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_b332e8ef","line":203,"updated":"2015-03-13 22:19:32.000000000","message":"put this in the grouping above, this group is part of a set to be deprecate","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c80ccb74e91de4862d9961360d7c235184e5eb68","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                roles\u003dtoken.roles,"},{"line_number":56,"context_line":"                endpoint\u003dendpoint,"},{"line_number":57,"context_line":"                services_region\u003dsvc_region,"},{"line_number":58,"context_line":"                federated\u003dtoken.user_federated,"},{"line_number":59,"context_line":"                unscoped_token\u003dtoken.unscoped_token)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da9b358b_d43ff5d4","line":58,"updated":"2015-03-29 01:24:50.000000000","message":"maybe call this is_federated? since it\u0027s a boolean","commit_id":"3fdec2e45231f92f5b04f9617275d0c2929c0da0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b207e261f1f53f9cc54f11a55060dda87288d2fd","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                roles\u003dtoken.roles,"},{"line_number":56,"context_line":"                endpoint\u003dendpoint,"},{"line_number":57,"context_line":"                services_region\u003dsvc_region,"},{"line_number":58,"context_line":"                federated\u003dtoken.user_federated,"},{"line_number":59,"context_line":"                unscoped_token\u003dtoken.unscoped_token)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da9b358b_2d3fc6b5","line":58,"in_reply_to":"da9b358b_d43ff5d4","updated":"2015-03-30 20:56:28.000000000","message":"Done","commit_id":"3fdec2e45231f92f5b04f9617275d0c2929c0da0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"fe3e80ccb5a81b099056576dbddc3b61963cd056","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # Federation-related attributes"},{"line_number":108,"context_line":"        # TODO(lhcheng) AccessInfo should be exposing information if the user"},{"line_number":109,"context_line":"        # is federated. This is a workaround until that is available."},{"line_number":110,"context_line":"        self.user_federated \u003d (\u0027OS-FEDERATION\u0027 in auth_ref.get(\u0027user\u0027, {}))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if auth_ref.version \u003d\u003d \u0027v2.0\u0027:"},{"line_number":113,"context_line":"            self.roles \u003d auth_ref[\u0027user\u0027].get(\u0027roles\u0027, [])"}],"source_content_type":"text/x-python","patch_set":25,"id":"da9b358b_db3718e2","line":110,"updated":"2015-03-30 04:32:21.000000000","message":"no need for this hack, accessInfo already exposed is_federated in  1.1.0","commit_id":"3fdec2e45231f92f5b04f9617275d0c2929c0da0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b207e261f1f53f9cc54f11a55060dda87288d2fd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # Federation-related attributes"},{"line_number":108,"context_line":"        # TODO(lhcheng) AccessInfo should be exposing information if the user"},{"line_number":109,"context_line":"        # is federated. This is a workaround until that is available."},{"line_number":110,"context_line":"        self.user_federated \u003d (\u0027OS-FEDERATION\u0027 in auth_ref.get(\u0027user\u0027, {}))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if auth_ref.version \u003d\u003d \u0027v2.0\u0027:"},{"line_number":113,"context_line":"            self.roles \u003d auth_ref[\u0027user\u0027].get(\u0027roles\u0027, [])"}],"source_content_type":"text/x-python","patch_set":25,"id":"da9b358b_ed48be5d","line":110,"in_reply_to":"da9b358b_db3718e2","updated":"2015-03-30 20:56:28.000000000","message":"Done","commit_id":"3fdec2e45231f92f5b04f9617275d0c2929c0da0"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.id \u003d hasher.hexdigest()"},{"line_number":88,"context_line":"            # If the scoped_token is long, then unscoped_token must be too."},{"line_number":89,"context_line":"            hasher.update(self.unscoped_token)"},{"line_number":90,"context_line":"            self.unscoped_token \u003d hasher.hexdigest()"},{"line_number":91,"context_line":"        self.expires \u003d auth_ref.expires"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Project-related attributes"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_5e0e3235","line":90,"updated":"2015-03-30 22:46:57.000000000","message":"why?","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.id \u003d hasher.hexdigest()"},{"line_number":88,"context_line":"            # If the scoped_token is long, then unscoped_token must be too."},{"line_number":89,"context_line":"            hasher.update(self.unscoped_token)"},{"line_number":90,"context_line":"            self.unscoped_token \u003d hasher.hexdigest()"},{"line_number":91,"context_line":"        self.expires \u003d auth_ref.expires"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Project-related attributes"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_39d14758","line":90,"in_reply_to":"da9b358b_5e0e3235","updated":"2015-03-31 00:20:55.000000000","message":"Otherwise, I may have a hashed scoped token and an un-hashed unscoped token.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.domain \u003d domain"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        # Federation-related attributes"},{"line_number":107,"context_line":"        self.is_federated \u003d auth_ref.is_federated"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if auth_ref.version \u003d\u003d \u0027v2.0\u0027:"},{"line_number":110,"context_line":"            self.roles \u003d auth_ref[\u0027user\u0027].get(\u0027roles\u0027, [])"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_9e04ba15","line":107,"updated":"2015-03-30 22:46:57.000000000","message":"can we make this private? i\u0027m getting more and more scared about the amount of stuff shared between DOA and horizon.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.domain \u003d domain"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        # Federation-related attributes"},{"line_number":107,"context_line":"        self.is_federated \u003d auth_ref.is_federated"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if auth_ref.version \u003d\u003d \u0027v2.0\u0027:"},{"line_number":110,"context_line":"            self.roles \u003d auth_ref[\u0027user\u0027].get(\u0027roles\u0027, [])"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_f90f5fdf","line":107,"in_reply_to":"da9b358b_9e04ba15","updated":"2015-03-31 00:20:55.000000000","message":"I think Horizon might need this info to be able to perform special handling because the project scoped token for a federated user does not work as is with the non-federated user.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"}],"openstack_auth/utils.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7ebdeba79e69c53f5f820388d976bbe940856d53","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    client \u003d get_keystone_client().Client(session\u003dsess, auth\u003dauth)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    else:"},{"line_number":251,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_d6f098cb","line":249,"updated":"2015-03-12 01:18:05.000000000","message":"if the user selected authentication type other than \"Keystone credentials\", this should be using federation.projects.list()","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"49f5098d4ff412e0d94f36d60f9b449070dec8a8","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    client \u003d get_keystone_client().Client(session\u003dsess, auth\u003dauth)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    else:"},{"line_number":251,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_e334fbe0","line":249,"in_reply_to":"9a80dd14_d6f098cb","updated":"2015-03-12 03:22:18.000000000","message":"thanks for finding this lin...","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    client \u003d get_keystone_client().Client(session\u003dsess, auth\u003dauth)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    else:"},{"line_number":251,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_77d500e4","line":249,"in_reply_to":"9a80dd14_e334fbe0","updated":"2015-03-12 18:45:17.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6024c194c36ec95beee2101e97aa20879e7cc9fa","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    elif getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":251,"context_line":"        projects \u003d client.federation.projects.list()"},{"line_number":252,"context_line":"    else:"},{"line_number":253,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_8b488db4","line":250,"updated":"2015-03-12 20:12:12.000000000","message":"shouldnt this also be if websso and auth_type is not credentials?","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"64d09e8f3718b06e56ffae3fdb8a3de20d103bcc","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    elif getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":251,"context_line":"        projects \u003d client.federation.projects.list()"},{"line_number":252,"context_line":"    else:"},{"line_number":253,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_914fdc33","line":250,"in_reply_to":"9a80dd14_8b488db4","updated":"2015-03-12 20:43:27.000000000","message":"++","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ffb4312f4585e8ac9c41ad8bce64f67ec4dd8b70","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":249,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":250,"context_line":"    elif getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":251,"context_line":"        projects \u003d client.federation.projects.list()"},{"line_number":252,"context_line":"    else:"},{"line_number":253,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_da0bfb21","line":250,"in_reply_to":"9a80dd14_914fdc33","updated":"2015-03-13 17:11:40.000000000","message":"Currently this method NOR the caller has access to the request object, which makes the check for auth_type difficult. Will look around with an alternative approach.","commit_id":"42177ad230ad8e0d51cb151556236e9cc2271241"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d59ee841b90c7b1dce291750f777337a5de72d23","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return client_v3"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"def is_websso_enabled():"},{"line_number":177,"context_line":"    \"\"\"Websso is supported in Keystone version 3.\"\"\""},{"line_number":178,"context_line":"    websso_enabled \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":179,"context_line":"    keystonev3_plus \u003d (get_keystone_version() \u003e\u003d 3)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_137ad487","line":176,"updated":"2015-03-13 22:19:32.000000000","message":"mark this as private by prepending with an underscore","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d59ee841b90c7b1dce291750f777337a5de72d23","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def is_federated_login(request):"},{"line_number":184,"context_line":"    \"\"\"Federated login requires websso to be enabled and requires request to"},{"line_number":185,"context_line":"    pass through the websso view.\"\"\""},{"line_number":186,"context_line":"    return is_websso_enabled() and getattr(request, \u0027federated_login\u0027, False)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_133d748f","line":185,"updated":"2015-03-13 22:19:32.000000000","message":"make the first line of the docstring a one line summary.\n\nrefer to lines 196 to 200","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"301e414f7874c5dde6502e6df747859c98dcfe98","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def is_federated_login(request):"},{"line_number":184,"context_line":"    \"\"\"Federated login requires websso to be enabled and requires request to"},{"line_number":185,"context_line":"    pass through the websso view.\"\"\""},{"line_number":186,"context_line":"    return is_websso_enabled() and getattr(request, \u0027federated_login\u0027, False)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_08661e2a","line":185,"in_reply_to":"9a80dd14_133d748f","updated":"2015-03-14 01:07:58.000000000","message":"this used to get ignored by DOA, I just fixed it recently. You have to follow the standard now :)","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"fe3e80ccb5a81b099056576dbddc3b61963cd056","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    if get_keystone_version() \u003c 3:"},{"line_number":247,"context_line":"        projects \u003d client.tenants.list()"},{"line_number":248,"context_line":"    elif user_federated:"},{"line_number":249,"context_line":"        projects \u003d client.federation.projects.list()"},{"line_number":250,"context_line":"    else:"},{"line_number":251,"context_line":"        projects \u003d client.projects.list(user\u003dkwargs.get(\u0027user_id\u0027))"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da9b358b_9b48705d","line":249,"updated":"2015-03-30 04:32:21.000000000","message":"see if using /auth/projects will work for project scoped token","commit_id":"3fdec2e45231f92f5b04f9617275d0c2929c0da0"}],"openstack_auth/views.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3865db64f73e1e7c19f42f1bffc1d732f1159405","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    # If the user filled in idp field, that authentication mechanism takes"},{"line_number":56,"context_line":"    # precedence, but only temporary fix, need to have a form that toggles"},{"line_number":57,"context_line":"    if getattr(settings, \u0027WEBSSO_ENABLED\u0027, False):"},{"line_number":58,"context_line":"        if \u0027idp\u0027 in request.POST:"},{"line_number":59,"context_line":"            idp \u003d request.POST.get(\u0027idp\u0027)"},{"line_number":60,"context_line":"            if idp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_28047e7d","line":57,"updated":"2015-01-31 02:25:41.000000000","message":"this function got a whole lot smaller :)","commit_id":"ff83155e3223cea4c8827ff03cdae00093922e89"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    # If the user enabled websso and selects default protocol"},{"line_number":56,"context_line":"    # from the dropdown, We need to redirect user to the websso url"},{"line_number":57,"context_line":"    websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":58,"context_line":"    auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":59,"context_line":"    if (websso and auth_type \u003d\u003d \u0027default_protocol\u0027):"},{"line_number":60,"context_line":"        websso_origin \u003d \u0027http://%s:%s/websso\u0027 % \\"},{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_ec11bf04","line":58,"updated":"2015-02-06 01:24:28.000000000","message":"Might be safer to add \"if request.method \u003d\u003d \"POST\":\" before doing any processing.","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ddaa4e7f238268e868911d67be1c2c04d3330d04","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    # If the user enabled websso and selects default protocol"},{"line_number":56,"context_line":"    # from the dropdown, We need to redirect user to the websso url"},{"line_number":57,"context_line":"    websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":58,"context_line":"    auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":59,"context_line":"    if (websso and auth_type \u003d\u003d \u0027default_protocol\u0027):"},{"line_number":60,"context_line":"        websso_origin \u003d \u0027http://%s:%s/websso\u0027 % \\"},{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_33610aa9","line":58,"in_reply_to":"da86d52c_ec11bf04","updated":"2015-02-10 22:08:11.000000000","message":"Done","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":58,"context_line":"    auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":59,"context_line":"    if (websso and auth_type \u003d\u003d \u0027default_protocol\u0027):"},{"line_number":60,"context_line":"        websso_origin \u003d \u0027http://%s:%s/websso\u0027 % \\"},{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"},{"line_number":62,"context_line":"             request.META[\u0027SERVER_PORT\u0027])"},{"line_number":63,"context_line":"        url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_6cd5cfe3","line":60,"updated":"2015-02-06 01:24:28.000000000","message":"This section will probably need some work:\n* protocol will not always be in \"http\", use the method: request.is_secure() to determine to use http or https\n* OPENSTACK_HOST is not correct. It is currently used this way: OPENSTACK_HOST \u003d \"127.0.0.1\"\nOPENSTACK_KEYSTONE_URL \u003d \"http://%s:5000/v2.0\" % OPENSTACK_HOST\n\nWould probably need to build this based from the information in the request object: https://docs.djangoproject.com/en/1.7/ref/request-response/","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ddaa4e7f238268e868911d67be1c2c04d3330d04","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":58,"context_line":"    auth_type \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":59,"context_line":"    if (websso and auth_type \u003d\u003d \u0027default_protocol\u0027):"},{"line_number":60,"context_line":"        websso_origin \u003d \u0027http://%s:%s/websso\u0027 % \\"},{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"},{"line_number":62,"context_line":"             request.META[\u0027SERVER_PORT\u0027])"},{"line_number":63,"context_line":"        url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_fca1d546","line":60,"in_reply_to":"da86d52c_6cd5cfe3","updated":"2015-02-10 22:08:11.000000000","message":"Done","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"},{"line_number":62,"context_line":"             request.META[\u0027SERVER_PORT\u0027])"},{"line_number":63,"context_line":"        url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"            (settings.OPENSTACK_KEYSTONE_URL,"},{"line_number":65,"context_line":"             settings.WEBSSO_PROTOCOL_ID,"},{"line_number":66,"context_line":"             websso_origin)"},{"line_number":67,"context_line":"        return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_4c480bcc","line":64,"updated":"2015-02-06 01:24:28.000000000","message":"Will not always work. Horizon can be configured with multiple KS endpoints. It will add a region dropdown on the login page.\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/local/local_settings.py.example#L132\n\n\nshould check first the value of \"region\", if not available  settings.OPENSTACK_KEYSTONE_URL","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ddaa4e7f238268e868911d67be1c2c04d3330d04","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            (settings.OPENSTACK_HOST,"},{"line_number":62,"context_line":"             request.META[\u0027SERVER_PORT\u0027])"},{"line_number":63,"context_line":"        url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"            (settings.OPENSTACK_KEYSTONE_URL,"},{"line_number":65,"context_line":"             settings.WEBSSO_PROTOCOL_ID,"},{"line_number":66,"context_line":"             websso_origin)"},{"line_number":67,"context_line":"        return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_3c87edb6","line":64,"in_reply_to":"da86d52c_4c480bcc","updated":"2015-02-10 22:08:11.000000000","message":"Done","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":134,"context_line":"@never_cache"},{"line_number":135,"context_line":"def websso(request):"},{"line_number":136,"context_line":"    \"\"\"Logs a user in using the :class:`~openstack_auth.forms.Login` form.\"\"\""},{"line_number":137,"context_line":"    auth_url \u003d getattr(settings, \u0027OPENSTACK_KEYSTONE_URL\u0027)"},{"line_number":138,"context_line":"    request.user \u003d auth.authenticate(request\u003drequest, auth_url\u003dauth_url)"},{"line_number":139,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":140,"context_line":"    auth.login(request, request.user)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_6c714f0b","line":137,"updated":"2015-02-06 01:24:28.000000000","message":"same comment about the auth_url, can make this smart to read this from the information of the server posting the request?","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ddaa4e7f238268e868911d67be1c2c04d3330d04","unresolved":false,"context_lines":[{"line_number":134,"context_line":"@never_cache"},{"line_number":135,"context_line":"def websso(request):"},{"line_number":136,"context_line":"    \"\"\"Logs a user in using the :class:`~openstack_auth.forms.Login` form.\"\"\""},{"line_number":137,"context_line":"    auth_url \u003d getattr(settings, \u0027OPENSTACK_KEYSTONE_URL\u0027)"},{"line_number":138,"context_line":"    request.user \u003d auth.authenticate(request\u003drequest, auth_url\u003dauth_url)"},{"line_number":139,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":140,"context_line":"    auth.login(request, request.user)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_adde450f","line":137,"in_reply_to":"da86d52c_6c714f0b","updated":"2015-02-10 22:08:11.000000000","message":"websso is the view that keystone redirects to (aka the origin from above). so it actually doesn\u0027t know about the host, but i can access the http referer and parse the result using regex. its not the cleanest but it\u0027ll work for multi-region.","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8bcb3acca2dad39cb42b56ea8861c0df69c67355","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":140,"context_line":"    auth.login(request, request.user)"},{"line_number":141,"context_line":"    if request.session.test_cookie_worked():"},{"line_number":142,"context_line":"        request.session.delete_test_cookie()"},{"line_number":143,"context_line":"    return django_http.HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_2cd917f3","line":142,"updated":"2015-02-06 01:24:28.000000000","message":"Will probably need to be something like: https://github.com/openstack/django_openstack_auth/blob/master/openstack_auth/forms.py#L111","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"ddaa4e7f238268e868911d67be1c2c04d3330d04","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":140,"context_line":"    auth.login(request, request.user)"},{"line_number":141,"context_line":"    if request.session.test_cookie_worked():"},{"line_number":142,"context_line":"        request.session.delete_test_cookie()"},{"line_number":143,"context_line":"    return django_http.HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_8dbee1ac","line":142,"in_reply_to":"da86d52c_2cd917f3","updated":"2015-02-10 22:08:11.000000000","message":"Hi Lin, that method is only available inside of a form. It looks like the way it is done is inline with how Django is doing it: https://docs.djangoproject.com/en/1.7/topics/http/sessions/#setting-test-cookies","commit_id":"86cefc0d8dffb04d12077d754c18cab809f197e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":52,"context_line":"@never_cache"},{"line_number":53,"context_line":"def login(request, template_name\u003dNone, extra_context\u003dNone, **kwargs):"},{"line_number":54,"context_line":"    \"\"\"Logs a user in using the :class:`~openstack_auth.forms.Login` form.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # If the user enabled websso and selects default protocol"},{"line_number":57,"context_line":"    # from the dropdown, We need to redirect user to the websso url"},{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_a8bd536a","line":55,"updated":"2015-02-10 22:40:20.000000000","message":"I\u0027m wondering what happens if credentials is selected? Will it work? I\u0027m not seeing any code to handle that","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"8b9bbc3176daf1a244fcf647f2dfaaf82d0bd897","unresolved":false,"context_lines":[{"line_number":52,"context_line":"@never_cache"},{"line_number":53,"context_line":"def login(request, template_name\u003dNone, extra_context\u003dNone, **kwargs):"},{"line_number":54,"context_line":"    \"\"\"Logs a user in using the :class:`~openstack_auth.forms.Login` form.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # If the user enabled websso and selects default protocol"},{"line_number":57,"context_line":"    # from the dropdown, We need to redirect user to the websso url"},{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_530acc26","line":55,"in_reply_to":"da86d52c_a8bd536a","updated":"2015-02-10 23:20:23.000000000","message":"yep, if credentials is selected, this entire block is skipped and it does what it current does today.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_48005734","line":61,"updated":"2015-02-10 22:40:20.000000000","message":"if (websso and protocol !\u003d \u0027credentials\u0027 and protocol !\u003d \u0027discovery\u0027):","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"8b9bbc3176daf1a244fcf647f2dfaaf82d0bd897","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_6e31a3ec","line":61,"in_reply_to":"da86d52c_48005734","updated":"2015-02-10 23:20:23.000000000","message":"good catch.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2914caec3b2a75fe1f12bda950774dc404b2a90a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_6e9d8766","line":61,"in_reply_to":"da86d52c_6e31a3ec","updated":"2015-02-13 23:43:09.000000000","message":"The more I think about it, the more it make sense for us not to handle discovery. If you have a discovery service, wouldn\u0027t you want users to land there first anyway? It doesn\u0027t make sense to have user land here first, then get redirected to a discovery service.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_e8090b85","line":62,"updated":"2015-02-10 22:40:20.000000000","message":"i\u0027m not sure how you got region?","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"8b9bbc3176daf1a244fcf647f2dfaaf82d0bd897","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_ee6bd3b6","line":62,"in_reply_to":"da86d52c_e8090b85","updated":"2015-02-10 23:20:23.000000000","message":"the list of region is generated from the form. https://github.com/openstack/django_openstack_auth/blob/master/openstack_auth/forms.py#L76\n\nwhen the user click on the submit/redirect button, that information is reposted and made available here.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if not request.is_ajax():"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_88488fb4","line":65,"updated":"2015-02-10 22:40:20.000000000","message":"if region ends up being None (as it\u0027s the defaulting to at line 62) then this string replacement will fail spectacularly","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"8b9bbc3176daf1a244fcf647f2dfaaf82d0bd897","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if not request.is_ajax():"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_2e97ab91","line":65,"in_reply_to":"da86d52c_88488fb4","updated":"2015-02-10 23:20:23.000000000","message":"yup, except that it will never default to none. code linked above pretty much guarantees that it wont. I suppose I can change it to just request.POST.get(\u0027region\u0027) to make that clearer.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4f869e3cdc2a4161a2992a29aebbd94e1edd3309","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if not request.is_ajax():"},{"line_number":69,"context_line":"        # If the user is already authenticated, redirect them to the"},{"line_number":70,"context_line":"        # dashboard straight away, unless the \u0027next\u0027 parameter is set as it"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_488777b5","line":67,"updated":"2015-02-10 22:40:20.000000000","message":"probably need an elif here to handle discovery, where it just go to a predetermined URL in the settings file.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"8b9bbc3176daf1a244fcf647f2dfaaf82d0bd897","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    if not request.is_ajax():"},{"line_number":69,"context_line":"        # If the user is already authenticated, redirect them to the"},{"line_number":70,"context_line":"        # dashboard straight away, unless the \u0027next\u0027 parameter is set as it"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_eef033ff","line":67,"in_reply_to":"da86d52c_488777b5","updated":"2015-02-10 23:20:23.000000000","message":"ok, so if it is discovery, we have a predetermined url that we will direct user toward. is that correct? i\u0027ll have to document this in horizon.","commit_id":"3a7fbd3ad47376c0bf96fd75cd9815f260ecd930"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"49f5098d4ff412e0d94f36d60f9b449070dec8a8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_63500b0b","line":61,"updated":"2015-03-12 03:22:18.000000000","message":"unnecessary params","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_174044a4","line":61,"in_reply_to":"9a80dd14_63500b0b","updated":"2015-03-12 18:45:17.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2f731677ea537a5d355f0abd2621c81f2c83b2f8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_18229ab9","line":62,"updated":"2015-03-04 17:15:48.000000000","message":"I don\u0027t think None is a workable value here - should be an error","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"ce93eb185dc8ba85cda61bf6402c557d735201f0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_f415269c","line":62,"in_reply_to":"9a80dd14_16010606","updated":"2015-03-11 16:27:19.000000000","message":"works for me!","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"2e662a604d7b41018d563793c556ad5751bc776d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_16010606","line":62,"in_reply_to":"9a80dd14_18229ab9","updated":"2015-03-06 22:29:45.000000000","message":"https://github.com/openstack/django_openstack_auth/blob/master/openstack_auth/forms.py#L76\n\nCode above guarantees that it will never be None. I\u0027ll change it to just request.POST.get(\u0027region\u0027)","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        websso \u003d getattr(settings, \u0027WEBSSO_ENABLED\u0027, False)"},{"line_number":60,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_971354b7","line":62,"in_reply_to":"9a80dd14_f415269c","updated":"2015-03-12 18:45:17.000000000","message":"Done","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"49f5098d4ff412e0d94f36d60f9b449070dec8a8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_c340d737","line":64,"updated":"2015-03-12 03:22:18.000000000","message":"gah, don\u0027t use \\, the slash police will find you\n\nurl \u003d (\u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 %\n                (region, protocol, origin))","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"dd861ce330206d511a3480fd8e550f167585096e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if (websso and protocol !\u003d \u0027credentials\u0027):"},{"line_number":62,"context_line":"            region \u003d request.POST.get(\u0027region\u0027, None)"},{"line_number":63,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":64,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":65,"context_line":"                (region, protocol, origin)"},{"line_number":66,"context_line":"            return shortcuts.redirect(url)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_3724680c","line":64,"in_reply_to":"9a80dd14_c340d737","updated":"2015-03-12 18:45:17.000000000","message":"Need it there, otherwise pep8 will complain.","commit_id":"1fa8a2f6bceaac2b12c020564c376387ffe7257f"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"301e414f7874c5dde6502e6df747859c98dcfe98","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    # from the dropdown, We need to redirect user to the websso url"},{"line_number":58,"context_line":"    if request.method \u003d\u003d \u0027POST\u0027:"},{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_686f9afc","line":60,"updated":"2015-03-14 01:07:58.000000000","message":"Need to check protocol is not None too","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"301e414f7874c5dde6502e6df747859c98dcfe98","unresolved":false,"context_lines":[{"line_number":131,"context_line":"@csrf_exempt"},{"line_number":132,"context_line":"@never_cache"},{"line_number":133,"context_line":"def websso(request):"},{"line_number":134,"context_line":"    \"\"\"Logs a user in using the :class:`~openstack_auth.forms.Login` form.\"\"\""},{"line_number":135,"context_line":"    referer \u003d request.META.get(\u0027HTTP_REFERER\u0027)"},{"line_number":136,"context_line":"    auth_url \u003d re.sub(r\u0027/auth.*\u0027, \u0027\u0027, referer)"},{"line_number":137,"context_line":"    request.federated_login \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_e87aaab8","line":134,"updated":"2015-03-14 01:07:58.000000000","message":"the comment seems incorrect? I don\u0027t see forms here","commit_id":"4e5612a1ac1045e8ca8480ccc1823f18872cb062"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"e2f6e9cfeae106fdb4a3ef2ece7d2e6e3f980164","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_0dd6c74f","line":62,"updated":"2015-03-23 20:16:06.000000000","message":"The origin assumes webroot is \u0027/\u0027, which may not be the case.","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6e6300c663167eff94ed2fb936799fca6485ad1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_0205b679","line":62,"updated":"2015-03-23 20:00:47.000000000","message":"we should chop off the /auth/websso bits here, we just need to know the dashboards host","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"aaaf9b360948fd6ddc8a22075db40228c333434e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_68af29e4","line":62,"in_reply_to":"1a6ced46_0dd6c74f","updated":"2015-03-23 20:38:06.000000000","message":"so keystone just needs the query parameter to represent the hostname of the dashboard server.\n\nwe don\u0027t really care about the path portion.\n\nif request.build_absolute_uri is called with no parameters, will it result in a value that is the dashboard hostname?","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"855d46a6d8f69f0624607d8b389bcb1753adbdf8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_4ccef884","line":62,"in_reply_to":"1a6ced46_31a59553","updated":"2015-03-24 01:32:11.000000000","message":"@Lin, yeah, let\u0027s do that.\nThis code can stay as-is and we\u0027ll relax the check or make keystone smarter","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"d7bb83d817091ceee07f2dc0e831f7b1e9baaea8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_db06f2cd","line":62,"in_reply_to":"1a6ced46_4ccef884","updated":"2015-03-24 21:30:29.000000000","message":"lets say we relax the check. keystone should be also able to figure out who is posting to it via request object. in which case, we do not need to pass origin at all.","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"99c9d95c8233519e271f37efe067114a4aa2e7c1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        protocol \u003d request.POST.get(\u0027auth_type\u0027, \u0027credentials\u0027)"},{"line_number":60,"context_line":"        if utils.is_websso_enabled() and protocol !\u003d \u0027credentials\u0027:"},{"line_number":61,"context_line":"            region \u003d request.POST.get(\u0027region\u0027)"},{"line_number":62,"context_line":"            origin \u003d request.build_absolute_uri(\u0027/auth/websso/\u0027)"},{"line_number":63,"context_line":"            url \u003d \u0027%s/auth/OS-FEDERATION/websso/%s?origin\u003d%s\u0027 % \\"},{"line_number":64,"context_line":"                (region, protocol, origin)"},{"line_number":65,"context_line":"            return shortcuts.redirect(url)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6ced46_31a59553","line":62,"in_reply_to":"1a6ced46_68af29e4","updated":"2015-03-24 01:05:12.000000000","message":"If we just pass the hostname in the origin,  we would need to hard code the  \u0027/auth/websso/\u0027 path in the HTML callback of keystone (https://github.com/openstack/keystone/blob/master/etc/sso_callback_template.html#L7)\n\n\nSteve: I wonder if we should relax the check for trusted_dashboard to just try to match the hostname rather than the full path of the origin.  Thoughts?","commit_id":"da188d049a3c8d1eb48c0de853a551c73055ebd6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7012e95135b20541ddf7cfdb79b5d37b78a60a3c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    referer \u003d request.META.get(\u0027HTTP_REFERER\u0027, settings.OPENSTACK_KEYSTONE_URL)"},{"line_number":136,"context_line":"    auth_url \u003d re.sub(r\u0027/auth.*\u0027, \u0027\u0027, referer)"},{"line_number":137,"context_line":"    token \u003d request.POST.get(\u0027token\u0027)"},{"line_number":138,"context_line":"    request.user \u003d auth.authenticate(request\u003drequest, auth_url\u003dauth_url,"},{"line_number":139,"context_line":"                                     token\u003dtoken)"},{"line_number":140,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":141,"context_line":"    auth.login(request, request.user)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_1e38aad2","line":138,"updated":"2015-03-30 22:46:57.000000000","message":"auth.authenticate is allowed to return None, you should test this result first.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cd70e3c88d4f19ebe11651bd9394baa9de2da3cd","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    referer \u003d request.META.get(\u0027HTTP_REFERER\u0027, settings.OPENSTACK_KEYSTONE_URL)"},{"line_number":136,"context_line":"    auth_url \u003d re.sub(r\u0027/auth.*\u0027, \u0027\u0027, referer)"},{"line_number":137,"context_line":"    token \u003d request.POST.get(\u0027token\u0027)"},{"line_number":138,"context_line":"    request.user \u003d auth.authenticate(request\u003drequest, auth_url\u003dauth_url,"},{"line_number":139,"context_line":"                                     token\u003dtoken)"},{"line_number":140,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":141,"context_line":"    auth.login(request, request.user)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_9992939e","line":138,"in_reply_to":"da9b358b_1e38aad2","updated":"2015-03-31 00:20:55.000000000","message":"good catch","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"450cf6c3c0f7c9016764952038e2caf97ab77bbd","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    referer \u003d request.META.get(\u0027HTTP_REFERER\u0027, settings.OPENSTACK_KEYSTONE_URL)"},{"line_number":136,"context_line":"    auth_url \u003d re.sub(r\u0027/auth.*\u0027, \u0027\u0027, referer)"},{"line_number":137,"context_line":"    token \u003d request.POST.get(\u0027token\u0027)"},{"line_number":138,"context_line":"    request.user \u003d auth.authenticate(request\u003drequest, auth_url\u003dauth_url,"},{"line_number":139,"context_line":"                                     token\u003dtoken)"},{"line_number":140,"context_line":"    auth_user.set_session_from_user(request, request.user)"},{"line_number":141,"context_line":"    auth.login(request, request.user)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da9b358b_42c89022","line":138,"in_reply_to":"da9b358b_9992939e","updated":"2015-03-31 03:04:40.000000000","message":"Fixed, I am going to raise an exception when no plugin is found. At any point in the authentication, it could raise an exception too. This way the error is obvious and can be handled in a standard way.","commit_id":"decb89cb29e430215262f2adaf3dcd47b51f636d"}]}
