)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Verify token binding in auth_token middleware"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The server side has had token bind checking implemented for a while. Now"},{"line_number":10,"context_line":"that it is possible to generated bound tokens auth_token middleware"},{"line_number":11,"context_line":"should be capable of verifying them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I4f9c5855ab3102333b0738864c506e2501bf9c7e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAT3%2F%2F3Nc%3D","line":10,"updated":"2013-12-29 23:54:39.000000000","message":"change \"generated\" to \"generate\"","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"}],"keystoneclient/middleware/auth_token.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"57c2ad6fda8b870cb82f54f0d0f2f3b98311194d","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        return expires"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    def _confirm_token_bind(self, data, env):"},{"line_number":1049,"context_line":"        bind_mode \u003d self._conf_get(\u0027enforce_token_bind\u0027)"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        if bind_mode \u003d\u003d \u0027disabled\u0027:"},{"line_number":1052,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2F7OE%3D","line":1049,"updated":"2013-10-08 00:17:53.000000000","message":"if bin_mode not in (\u0027disabled\u0027, \u0027permissive\u0027, \u0027stricted\u0027, \u0027required\u0027):\n    raise ConfigurationError(...)","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e7608e692e0209015592352ea4e12ae81fbd3786","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        return expires"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    def _confirm_token_bind(self, data, env):"},{"line_number":1049,"context_line":"        bind_mode \u003d self._conf_get(\u0027enforce_token_bind\u0027)"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        if bind_mode \u003d\u003d \u0027disabled\u0027:"},{"line_number":1052,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeDs%3D","line":1049,"in_reply_to":"AAAATH%2F%2F688%3D","updated":"2013-10-19 02:11:33.000000000","message":"Sigh.  I miss type safety","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"71d4846cd22a0d70edc1a9137945880d32ee161a","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        return expires"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    def _confirm_token_bind(self, data, env):"},{"line_number":1049,"context_line":"        bind_mode \u003d self._conf_get(\u0027enforce_token_bind\u0027)"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        if bind_mode \u003d\u003d \u0027disabled\u0027:"},{"line_number":1052,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2F688%3D","line":1049,"in_reply_to":"AAAATH%2F%2F7OE%3D","updated":"2013-10-08 01:33:16.000000000","message":"We can\u0027t, because we support bind_mode \u003d \u0027kerberos\u0027 for requiring kerberos and we\u0027ll have the same for \u0027x509\u0027 later.","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"57c2ad6fda8b870cb82f54f0d0f2f3b98311194d","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"                raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        # get the named mode if bind_mode is not one of the known"},{"line_number":1079,"context_line":"        name \u003d None if permissive or bind_mode \u003d\u003d \u0027required\u0027 else bind_mode"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"        if name and name not in bind:"},{"line_number":1082,"context_line":"            self.LOG.info(\"Named bind mode %s not in bind information\", name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2F7Ng%3D","line":1079,"updated":"2013-10-08 00:17:53.000000000","message":"I don\u0027t understand this statement. By the time we get to this line the condition is always True. Do we support bind modes other than \u0027permissive\u0027, \u0027strict\u0027, and \u0027required\u0027?\n\nWe we support other bind types, I can\u0027t see how we can get away with not being making the enforcement pluggable.","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"63370f7e74346211c860fb0c281d2b67d8bae56c","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"                raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        # get the named mode if bind_mode is not one of the known"},{"line_number":1079,"context_line":"        name \u003d None if permissive or bind_mode \u003d\u003d \u0027required\u0027 else bind_mode"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"        if name and name not in bind:"},{"line_number":1082,"context_line":"            self.LOG.info(\"Named bind mode %s not in bind information\", name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeHw%3D","line":1079,"in_reply_to":"AAAATH%2F%2F7Ng%3D","updated":"2013-10-15 19:14:56.000000000","message":"as above, we support the case where bind_mode \u003d\u003d \u0027kerberos\u0027 and in future \u003d\u003d \u0027x509\u0027","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"57c2ad6fda8b870cb82f54f0d0f2f3b98311194d","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"        for bind_type, identifier in bind.iteritems():"},{"line_number":1086,"context_line":"            if bind_type \u003d\u003d \u0027kerberos\u0027:"},{"line_number":1087,"context_line":"                if not env.get(\u0027AUTH_TYPE\u0027, \u0027\u0027).lower() \u003d\u003d \u0027negotiate\u0027:"},{"line_number":1088,"context_line":"                    self.LOG.info(\"Kerberos credentials required and \""},{"line_number":1089,"context_line":"                                  \"not present\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2F7JI%3D","line":1086,"updated":"2013-10-08 00:17:53.000000000","message":"bind enforcement should be pluggable","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e7608e692e0209015592352ea4e12ae81fbd3786","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"        for bind_type, identifier in bind.iteritems():"},{"line_number":1086,"context_line":"            if bind_type \u003d\u003d \u0027kerberos\u0027:"},{"line_number":1087,"context_line":"                if not env.get(\u0027AUTH_TYPE\u0027, \u0027\u0027).lower() \u003d\u003d \u0027negotiate\u0027:"},{"line_number":1088,"context_line":"                    self.LOG.info(\"Kerberos credentials required and \""},{"line_number":1089,"context_line":"                                  \"not present\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeEw%3D","line":1086,"in_reply_to":"AAAATH%2F%2F7JI%3D","updated":"2013-10-19 02:11:33.000000000","message":"Disagree with gyee. We are going to support Kerberos and X509.  There is nothing else that we know of  that is sufficiently secure to work with. But if we do come up with it, it will not just be a plugin, but we will have to update the code.","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"530e43100054e8ae6cf31578d78f726363d61add","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"        for bind_type, identifier in bind.iteritems():"},{"line_number":1086,"context_line":"            if bind_type \u003d\u003d \u0027kerberos\u0027:"},{"line_number":1087,"context_line":"                if not env.get(\u0027AUTH_TYPE\u0027, \u0027\u0027).lower() \u003d\u003d \u0027negotiate\u0027:"},{"line_number":1088,"context_line":"                    self.LOG.info(\"Kerberos credentials required and \""},{"line_number":1089,"context_line":"                                  \"not present\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FOfc%3D","line":1086,"in_reply_to":"AAAATH%2F%2FeEw%3D","updated":"2013-10-21 00:49:31.000000000","message":"More to the point there is nothing pluggable about auth_token middleware yet. I like the idea but there is more to do than should start here. Also based on my understanding of stevedore we can still make it work that way with this configuration. \n\nMore importantly this is the way that keystone works and i don\u0027t really want them to be out of sync.","commit_id":"2f2c338dcf718a588be8ef8deabb36fb7044e72a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"900d6a0795255a26a22df3626885edee01c49474","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                return"},{"line_number":1090,"context_line":"            else:"},{"line_number":1091,"context_line":"                self.LOG.info(\"No bind information present in token\")"},{"line_number":1092,"context_line":"                raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1093,"context_line":""},{"line_number":1094,"context_line":"        # get the named mode if bind_mode is not one of the known"},{"line_number":1095,"context_line":"        name \u003d None if permissive or bind_mode \u003d\u003d \u0027required\u0027 else bind_mode"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BiPw%3D","line":1092,"updated":"2013-11-25 00:36:43.000000000","message":"suggest put raising this exception in a function since it\u0027s the same string everyplace it\u0027s raised.","commit_id":"ecf8f3f874dcf31474b639c4e986977af3e420ae"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"900d6a0795255a26a22df3626885edee01c49474","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"            self.LOG.info(\"Named bind mode %s not in bind information\", name)"},{"line_number":1099,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"        for bind_type, identifier in bind.iteritems():"},{"line_number":1102,"context_line":"            if bind_type \u003d\u003d \u0027kerberos\u0027:"},{"line_number":1103,"context_line":"                if not env.get(\u0027AUTH_TYPE\u0027, \u0027\u0027).lower() \u003d\u003d \u0027negotiate\u0027:"},{"line_number":1104,"context_line":"                    self.LOG.info(\"Kerberos credentials required and \""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BiPc%3D","line":1101,"updated":"2013-11-25 00:36:43.000000000","message":"I think need to use six.iteritems() or something now.","commit_id":"ecf8f3f874dcf31474b639c4e986977af3e420ae"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"900d6a0795255a26a22df3626885edee01c49474","unresolved":false,"context_lines":[{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"            elif bind_mode \u003d\u003d \u0027permissive\u0027:"},{"line_number":1116,"context_line":"                self.LOG.debug(\"Ignoring Unknown bind for permissive mode: \""},{"line_number":1117,"context_line":"                               \"{%s: %s}\", bind_type, identifier)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"            else:"},{"line_number":1120,"context_line":"                self.LOG.info(\"Couldn\u0027t verify unknown bind: {%s: %s}\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BiPY%3D","line":1117,"updated":"2013-11-25 00:36:43.000000000","message":"use named fields in text with multiple replacements, for translation.","commit_id":"ecf8f3f874dcf31474b639c4e986977af3e420ae"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"900d6a0795255a26a22df3626885edee01c49474","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"                               \"{%s: %s}\", bind_type, identifier)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"            else:"},{"line_number":1120,"context_line":"                self.LOG.info(\"Couldn\u0027t verify unknown bind: {%s: %s}\","},{"line_number":1121,"context_line":"                              bind_type, identifier)"},{"line_number":1122,"context_line":"                raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1123,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BiPE%3D","line":1120,"updated":"2013-11-25 00:36:43.000000000","message":"use named fields in text with multiple replacements, for translation.","commit_id":"ecf8f3f874dcf31474b639c4e986977af3e420ae"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"437e3ddafe8a48ab8ea4855fd703d25458edc8cb","unresolved":false,"context_lines":[{"line_number":301,"context_line":"               \u0027 strict, like permissive but if the bind type is unknown the\u0027"},{"line_number":302,"context_line":"               \u0027 token will be rejected. required, any form of token binding\u0027"},{"line_number":303,"context_line":"               \u0027 is needed to be allowed. Or the name of a binding method that\u0027"},{"line_number":304,"context_line":"               \u0027 must be present in tokens.\u0027)"},{"line_number":305,"context_line":"]"},{"line_number":306,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F966w%3D","line":304,"updated":"2013-12-04 13:37:40.000000000","message":"put the supported values in quotes or something -- it\u0027s unnecessarily difficult to pick them out of this paragraph","commit_id":"4a4e259564c65d237b41c6a7080b0762f9e2d361"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"437e3ddafe8a48ab8ea4855fd703d25458edc8cb","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"    def _confirm_token_bind(self, data, env):"},{"line_number":1073,"context_line":"        bind_mode \u003d self._conf_get(\u0027enforce_token_bind\u0027)"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"        if bind_mode \u003d\u003d \u0027disabled\u0027:"},{"line_number":1076,"context_line":"            return"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        if not data:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F966U%3D","line":1075,"updated":"2013-12-04 13:37:40.000000000","message":"i\u0027d much prefer to use constants for these:\n\n  if bind_mode is BIND_MODE_DISABLED:","commit_id":"4a4e259564c65d237b41c6a7080b0762f9e2d361"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    cfg.StrOpt(\u0027enforce_token_bind\u0027,"},{"line_number":303,"context_line":"               default\u003d\u0027permissive\u0027,"},{"line_number":304,"context_line":"               help\u003d\u0027Used to control the use and type of token binding. Can\u0027"},{"line_number":305,"context_line":"               \u0027 be set to: disabled to not check token binding. \"permissive\"\u0027"},{"line_number":306,"context_line":"               \u0027 (default) to validate binding information if the bind type\u0027"},{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NU%3D","line":305,"updated":"2013-12-29 23:54:39.000000000","message":"put \"disabled\" in quotes.","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    cfg.StrOpt(\u0027enforce_token_bind\u0027,"},{"line_number":303,"context_line":"               default\u003d\u0027permissive\u0027,"},{"line_number":304,"context_line":"               help\u003d\u0027Used to control the use and type of token binding. Can\u0027"},{"line_number":305,"context_line":"               \u0027 be set to: disabled to not check token binding. \"permissive\"\u0027"},{"line_number":306,"context_line":"               \u0027 (default) to validate binding information if the bind type\u0027"},{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BUY%3D","line":305,"in_reply_to":"AAAAT3%2F%2F3NU%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":305,"context_line":"               \u0027 be set to: disabled to not check token binding. \"permissive\"\u0027"},{"line_number":306,"context_line":"               \u0027 (default) to validate binding information if the bind type\u0027"},{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NQ%3D","line":308,"updated":"2013-12-29 23:54:39.000000000","message":"the previous names don\u0027t have \",\" after the value name. Pick one convention or the other and stick with it.","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":305,"context_line":"               \u0027 be set to: disabled to not check token binding. \"permissive\"\u0027"},{"line_number":306,"context_line":"               \u0027 (default) to validate binding information if the bind type\u0027"},{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BUU%3D","line":308,"in_reply_to":"AAAAT3%2F%2F3NQ%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NM%3D","line":310,"updated":"2013-12-29 23:54:39.000000000","message":"extra space at end of line. Should be , after \"Finally\".","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":307,"context_line":"               \u0027 is of a form known to the server and ignore it if not.\u0027"},{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BUQ%3D","line":310,"in_reply_to":"AAAAT3%2F%2F3NM%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NY%3D","line":311,"updated":"2013-12-29 23:54:39.000000000","message":"add a \",\" at end of line so don\u0027t have to change this line when add another option.","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":308,"context_line":"               \u0027 \"strict\", like \"permissive\" but if the bind type is unknown\u0027"},{"line_number":309,"context_line":"               \u0027 the token will be rejected. \"required\", any form of token\u0027"},{"line_number":310,"context_line":"               \u0027 binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027)"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BUM%3D","line":311,"in_reply_to":"AAAAT3%2F%2F3NY%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":315,"context_line":"LIST_OF_VERSIONS_TO_ATTEMPT \u003d [\u0027v2.0\u0027, \u0027v3.0\u0027]"},{"line_number":316,"context_line":"CACHE_KEY_TEMPLATE \u003d \u0027tokens/%s\u0027"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"BIND_MODE_DISABLED \u003d \u0027disabled\u0027"},{"line_number":319,"context_line":"BIND_MODE_PERMISSIVE \u003d \u0027permissive\u0027"},{"line_number":320,"context_line":"BIND_MODE_STRICT \u003d \u0027strict\u0027"},{"line_number":321,"context_line":"BIND_MODE_REQUIRED \u003d \u0027required\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NI%3D","line":318,"updated":"2013-12-29 23:54:39.000000000","message":"suggest put these in a class so don\u0027t have to duplicate BIND_MODE.\n\n class BIND_MODE:\n    DISABLED \u003d \u0027disabled\u0027\n    ...","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":315,"context_line":"LIST_OF_VERSIONS_TO_ATTEMPT \u003d [\u0027v2.0\u0027, \u0027v3.0\u0027]"},{"line_number":316,"context_line":"CACHE_KEY_TEMPLATE \u003d \u0027tokens/%s\u0027"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"BIND_MODE_DISABLED \u003d \u0027disabled\u0027"},{"line_number":319,"context_line":"BIND_MODE_PERMISSIVE \u003d \u0027permissive\u0027"},{"line_number":320,"context_line":"BIND_MODE_STRICT \u003d \u0027strict\u0027"},{"line_number":321,"context_line":"BIND_MODE_REQUIRED \u003d \u0027required\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BUI%3D","line":318,"in_reply_to":"AAAAT3%2F%2F3NI%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"            return"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"        if not data:"},{"line_number":1093,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"        try:"},{"line_number":1096,"context_line":"            if _token_is_v2(data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3NA%3D","line":1093,"updated":"2013-12-29 23:54:39.000000000","message":"should this be a call to self._invalid_user_token() ?","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"            return"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"        if not data:"},{"line_number":1093,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"        try:"},{"line_number":1096,"context_line":"            if _token_is_v2(data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BT0%3D","line":1093,"in_reply_to":"AAAAT3%2F%2F3NA%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":1110,"context_line":"                # no bind provided and none required"},{"line_number":1111,"context_line":"                return"},{"line_number":1112,"context_line":"            else:"},{"line_number":1113,"context_line":"                self.LOG.info(\"No bind information present in token\")"},{"line_number":1114,"context_line":"                self._invalid_user_token()"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # get the named mode if bind_mode is not one of the known"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3Mo%3D","line":1113,"updated":"2013-12-29 23:54:39.000000000","message":"suggest put . at end of sentences.","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":1110,"context_line":"                # no bind provided and none required"},{"line_number":1111,"context_line":"                return"},{"line_number":1112,"context_line":"            else:"},{"line_number":1113,"context_line":"                self.LOG.info(\"No bind information present in token\")"},{"line_number":1114,"context_line":"                self._invalid_user_token()"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # get the named mode if bind_mode is not one of the known"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BTo%3D","line":1113,"in_reply_to":"AAAAT3%2F%2F3Mo%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"                self.LOG.info(\"No bind information present in token\")"},{"line_number":1114,"context_line":"                self._invalid_user_token()"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # get the named mode if bind_mode is not one of the known"},{"line_number":1117,"context_line":"        if permissive or bind_mode \u003d\u003d BIND_MODE_REQUIRED:"},{"line_number":1118,"context_line":"            name \u003d None"},{"line_number":1119,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3M4%3D","line":1116,"updated":"2013-12-29 23:54:39.000000000","message":"change \"known\" to \"predefined\" ?","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"                self.LOG.info(\"No bind information present in token\")"},{"line_number":1114,"context_line":"                self._invalid_user_token()"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # get the named mode if bind_mode is not one of the known"},{"line_number":1117,"context_line":"        if permissive or bind_mode \u003d\u003d BIND_MODE_REQUIRED:"},{"line_number":1118,"context_line":"            name \u003d None"},{"line_number":1119,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BTk%3D","line":1116,"in_reply_to":"AAAAT3%2F%2F3M4%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"812e09b660e15e79d362b4ebe4c6efe3e0e8a4d4","unresolved":false,"context_lines":[{"line_number":307,"context_line":"               \u0027 bind type is of a form known to the server and ignore it if\u0027"},{"line_number":308,"context_line":"               \u0027 not. \"strict\" like \"permissive\" but if the bind type is\u0027"},{"line_number":309,"context_line":"               \u0027 unknown the token will be rejected. \"required\" any form of\u0027"},{"line_number":310,"context_line":"               \u0027 token binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027),"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F7d8%3D","line":310,"updated":"2014-01-06 17:05:07.000000000","message":"remove extra space at end of line.","commit_id":"5206ed2cdc6dac8bb8f92cb7316cb533cd80eed6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3d127855e3767e1d20df1a74d312abfe429259a0","unresolved":false,"context_lines":[{"line_number":307,"context_line":"               \u0027 bind type is of a form known to the server and ignore it if\u0027"},{"line_number":308,"context_line":"               \u0027 not. \"strict\" like \"permissive\" but if the bind type is\u0027"},{"line_number":309,"context_line":"               \u0027 unknown the token will be rejected. \"required\" any form of\u0027"},{"line_number":310,"context_line":"               \u0027 token binding is needed to be allowed. Finally the name of a \u0027"},{"line_number":311,"context_line":"               \u0027 binding method that must be present in tokens.\u0027),"},{"line_number":312,"context_line":"]"},{"line_number":313,"context_line":"CONF.register_opts(opts, group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F6G8%3D","line":310,"in_reply_to":"AAAAUH%2F%2F7d8%3D","updated":"2014-01-06 23:36:35.000000000","message":"damn, i thought i got all those.","commit_id":"5206ed2cdc6dac8bb8f92cb7316cb533cd80eed6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"812e09b660e15e79d362b4ebe4c6efe3e0e8a4d4","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"            return"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"        if not data:"},{"line_number":1094,"context_line":"            _invalid_user_token()"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        try:"},{"line_number":1097,"context_line":"            if _token_is_v2(data):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F7dc%3D","line":1094,"updated":"2014-01-06 17:05:07.000000000","message":"this should be self._invalid_user_token() -- there must be a test missing.","commit_id":"5206ed2cdc6dac8bb8f92cb7316cb533cd80eed6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3d127855e3767e1d20df1a74d312abfe429259a0","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"            return"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"        if not data:"},{"line_number":1094,"context_line":"            _invalid_user_token()"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        try:"},{"line_number":1097,"context_line":"            if _token_is_v2(data):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F6Hc%3D","line":1094,"in_reply_to":"AAAAUH%2F%2F7dc%3D","updated":"2014-01-06 23:36:35.000000000","message":"i think more that there just isn\u0027t any way for data to really be empty here because it would have failed to load the token data previously. \n\nI think i\u0027ll just pull it out.","commit_id":"5206ed2cdc6dac8bb8f92cb7316cb533cd80eed6"}],"keystoneclient/tests/test_auth_token_middleware.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"06a7b144ab46aa50fce2bdddad42dc28ee33c02b","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        if success:"},{"line_number":920,"context_line":"            self.assertEqual(self.response_status, 200)"},{"line_number":921,"context_line":"            self.assertEqual(body, [\u0027SUCCESS\u0027])"},{"line_number":922,"context_line":"            self.assertTrue(\u0027keystone.token_info\u0027 in req.environ)"},{"line_number":923,"context_line":"            self.assert_valid_last_url(token)"},{"line_number":924,"context_line":"        else:"},{"line_number":925,"context_line":"            self.assertEqual(self.response_status, 401)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3ME%3D","line":922,"updated":"2013-12-29 23:54:39.000000000","message":"use assertIn so can get a better message.","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"edcf8073f0eb879c40353ff1c9dbe3346a35e456","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        if success:"},{"line_number":920,"context_line":"            self.assertEqual(self.response_status, 200)"},{"line_number":921,"context_line":"            self.assertEqual(body, [\u0027SUCCESS\u0027])"},{"line_number":922,"context_line":"            self.assertTrue(\u0027keystone.token_info\u0027 in req.environ)"},{"line_number":923,"context_line":"            self.assert_valid_last_url(token)"},{"line_number":924,"context_line":"        else:"},{"line_number":925,"context_line":"            self.assertEqual(self.response_status, 401)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F%2BTE%3D","line":922,"in_reply_to":"AAAAT3%2F%2F3ME%3D","updated":"2014-01-06 00:58:59.000000000","message":"Done","commit_id":"520a42c836dbfd47a344f2e94c267befa69d8a75"}]}
