)]}'
{"keystone/auth/plugins/totp.py":[{"author":{"_account_id":11434,"name":"werner mendizabal","email":"nonameentername@gmail.com","username":"nonameentername"},"change_message_id":"b6b1cfc3af51fd98120a715ad7f58d97f483a097","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    # NOTE(nonameentername): cryptography takes a non base32 encoded value for"},{"line_number":58,"context_line":"    # TOTP. Add the correct padding to be able to base32 decode"},{"line_number":59,"context_line":"    while len(secret) % 8 !\u003d 0:"},{"line_number":60,"context_line":"        secret \u003d secret + b\u0027\u003d\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    decoded \u003d base64.b32decode(secret)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_7891daf0","side":"PARENT","line":59,"updated":"2016-02-23 15:29:15.000000000","message":"totp-auth.rst documentation should be updated since base32 padding is not being added.","commit_id":"75064e8f182fa63c151f6d41d9ea9f8ea64f4f88"}],"keystone/credential/algorithms/totp.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"858fa4080d5538203f482155e5449c2fc8d6f92e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"METHOD_NAME \u003d \u0027totp\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def generate_passcode(secret):"},{"line_number":42,"context_line":"    \"\"\"Generate TOTP passcode."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    :param bytes secret: A base32 encoded secret for the TOTP authentication"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_54f7738a","line":41,"range":{"start_line":41,"start_character":28,"end_line":41,"end_character":30},"updated":"2016-02-23 19:29:42.000000000","message":"I don\u0027t understand why this need to be here. This really belong to the plugin itself.","commit_id":"3d32d9eb03143dcdf37d125191b362d1b0fcd2bc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e1b3c2093352a19d81df9b4d4f474519922b2396","unresolved":false,"context_lines":[{"line_number":38,"context_line":"METHOD_NAME \u003d \u0027totp\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def generate_passcode(secret):"},{"line_number":42,"context_line":"    \"\"\"Generate TOTP passcode."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    :param bytes secret: A base32 encoded secret for the TOTP authentication"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_cb3f61b2","line":41,"range":{"start_line":41,"start_character":28,"end_line":41,"end_character":30},"in_reply_to":"bae84128_54f7738a","updated":"2016-02-23 20:43:45.000000000","message":"I really like the idea of putting all of the algorithm specific logic in one place. Generation, validation, verification, etc. Otherwise we\u0027d have home in keystone.credentials, some in keystone.auth.plugins and maybe still more in other places. keystone\u0027s code is horrible about encapsulation and you must resort to grepping to find all related things.","commit_id":"3d32d9eb03143dcdf37d125191b362d1b0fcd2bc"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"09dfca1bc50d6298801fd1016ab6abb754fd5e3b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"METHOD_NAME \u003d \u0027totp\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def generate_passcode(secret):"},{"line_number":42,"context_line":"    \"\"\"Generate TOTP passcode."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    :param bytes secret: A base32 encoded secret for the TOTP authentication"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_5ca155f7","line":41,"range":{"start_line":41,"start_character":28,"end_line":41,"end_character":30},"in_reply_to":"bae84128_cb3f61b2","updated":"2016-02-23 21:49:43.000000000","message":"This code is used exclusively by the TOTP plugin right? If its not shared, there\u0027s no reason to park it outside of the plugin itself.","commit_id":"3d32d9eb03143dcdf37d125191b362d1b0fcd2bc"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"858fa4080d5538203f482155e5449c2fc8d6f92e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    return totp.generate(time.time())"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def validate_secret(value):"},{"line_number":59,"context_line":"    try:"},{"line_number":60,"context_line":"        base64.b32decode(value)"},{"line_number":61,"context_line":"    except TypeError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_94d61bef","line":58,"range":{"start_line":58,"start_character":25,"end_line":58,"end_character":27},"updated":"2016-02-23 19:29:42.000000000","message":"We we park this in keystoneclient as it can be shared?","commit_id":"3d32d9eb03143dcdf37d125191b362d1b0fcd2bc"}]}
