)]}'
{"tests/unit/engine/catalog/test_pki_generator.py":[{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"516b5dd30e4ec3743a31c0f8df998e2665161f6f","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    not pki_utility.PKIUtility.cfssl_exists(),"},{"line_number":229,"context_line":"    reason\u003d\u0027cfssl must be installed to execute these tests\u0027)"},{"line_number":230,"context_line":"class TestPKIGenerator(object):"},{"line_number":231,"context_line":"    # TODO(felipemonteiro): Test expiry logic."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @classmethod"},{"line_number":234,"context_line":"    def setup_class(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_18c23a54","line":231,"range":{"start_line":231,"start_character":4,"end_line":231,"end_character":46},"updated":"2019-04-09 11:20:21.000000000","message":"Such tests exist in https://review.openstack.org/#/c/639414/\nunder test_secrets.py and test_pki_utility.py","commit_id":"abe498e27445ae3b423e147e08c0d6da34dc4bf4"}],"tests/unit/test_utils.py":[{"author":{"_account_id":29401,"name":"Lev Morgan","email":"morgan.lev@gmail.com","username":"levmorgan"},"change_message_id":"fc0a030278dd97ff066fbca770963bc991d49ed0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return rand_name"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def rand_password(length\u003d15):"},{"line_number":55,"context_line":"    \"\"\"Generate a random password"},{"line_number":56,"context_line":"    :param int length: The length of password that you expect to set"},{"line_number":57,"context_line":"                       (If it\u0027s smaller than 3, it\u0027s same as 3.)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_30e35407","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":17},"updated":"2019-03-28 20:03:22.000000000","message":"Is this redundant with engine.secrets.generate_crypto_string?","commit_id":"83b2e4e041889a1f611585b378e091f047346a8b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a9313dd866e5fd302d8a09a29b36495e57130e5d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return rand_name"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def rand_password(length\u003d15):"},{"line_number":55,"context_line":"    \"\"\"Generate a random password"},{"line_number":56,"context_line":"    :param int length: The length of password that you expect to set"},{"line_number":57,"context_line":"                       (If it\u0027s smaller than 3, it\u0027s same as 3.)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_c7dec2d9","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":17},"in_reply_to":"5fc1f717_30e35407","updated":"2019-03-29 17:14:44.000000000","message":"Done","commit_id":"83b2e4e041889a1f611585b378e091f047346a8b"},{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"841eafb085ca3af4aa80b0f70fb6b9ddbd0ad14a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\"Generate a random password"},{"line_number":56,"context_line":"    :param int length: The length of password that you expect to set"},{"line_number":57,"context_line":"                       (If it\u0027s smaller than 3, it\u0027s same as 3.)"},{"line_number":58,"context_line":"    :return: a random password. The format is"},{"line_number":59,"context_line":"             \u0027\u003crandom upper letter\u003e-\u003crandom number\u003e-\u003crandom special character\u003e"},{"line_number":60,"context_line":"              -\u003crandom ascii letters or digit characters or special symbols\u003e\u0027"},{"line_number":61,"context_line":"             (e.g. \u0027G2*ac8\u0026lKFFgh%2\u0027)"},{"line_number":62,"context_line":"    :rtype: string"},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    upper \u003d random.choice(string.ascii_uppercase)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_0d43916e","line":61,"range":{"start_line":58,"start_character":0,"end_line":61,"end_character":37},"updated":"2019-03-29 12:48:08.000000000","message":"Why would we want to create a password with a known structure?  Could this not be changed to take the length of the password and then create a set of characters to use in a more randomized manner?\n\nIE create a random set of uppercase with a random length between N and passLength-3N characters\n\nDitto for lowercase, between N and passLength-len(uppercase)-2N\n\nRepeat for digits and special characters.  Then use those characters in a random order to build the password?  This would allow us to control both which characters are used, and enforce requirements down the road to include at least N from each set if we desired it.","commit_id":"83b2e4e041889a1f611585b378e091f047346a8b"}]}
