)]}'
{"heat/common/crypt.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"340c5446d15091a0f4c57f6dd60231d83a83cd1b","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"security_group \u003d cfg.OptGroup(\u0027security_compliance\u0027)"},{"line_number":40,"context_line":"security_opts \u003d ["},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027password_regex\u0027, default\u003d\u0027.*\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"The regular expression used to validate password \""},{"line_number":43,"context_line":"                      \"strength.\"))"},{"line_number":44,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_e13c8f31","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":46},"updated":"2017-02-21 08:09:15.000000000","message":"The main point is that how to match the regex defined in keystone? Seems there is no good way, how about to add some help notes?","commit_id":"ca5bff5f8e8cb7dacd38eb88fbd8c7011e4464b1"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"64142ecd9ad050389a3fa8cffc96aca285726338","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"security_group \u003d cfg.OptGroup(\u0027security_compliance\u0027)"},{"line_number":40,"context_line":"security_opts \u003d ["},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027password_regex\u0027, default\u003d\u0027.*\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"The regular expression used to validate password \""},{"line_number":43,"context_line":"                      \"strength.\"))"},{"line_number":44,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_a743066b","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":46},"in_reply_to":"da36d5c6_51c52c8c","updated":"2017-02-24 08:28:12.000000000","message":"Also, matching to that of keystone is not necessary for two reasons:\n\n1. Heat created stack should conform to some enterprise security guidelines no matter those passwords are validated by keystone or not.\n\n2. Heat deployers may choose to impose a stricter password checking than that required by the keystone service.\n\nWe don\u0027t have a strong reason to bind these two options together, or else, we could have import those options directly into Heat config transparently.","commit_id":"ca5bff5f8e8cb7dacd38eb88fbd8c7011e4464b1"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"71f93d78036d420022bd04f91a2be84aefe5bfcf","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"security_group \u003d cfg.OptGroup(\u0027security_compliance\u0027)"},{"line_number":40,"context_line":"security_opts \u003d ["},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027password_regex\u0027, default\u003d\u0027.*\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"The regular expression used to validate password \""},{"line_number":43,"context_line":"                      \"strength.\"))"},{"line_number":44,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_51c52c8c","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":46},"in_reply_to":"da36d5c6_e13c8f31","updated":"2017-02-21 08:22:48.000000000","message":"em ... matching keystone regex is not a big concern. You can always write two different regular expressions to describe the same thing. The main point is that Heat should generate a decent password that is acceptable to Keystone when the latter has a stricter checking.","commit_id":"ca5bff5f8e8cb7dacd38eb88fbd8c7011e4464b1"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7b4029e33c98244c3758e351acb65ba60f990d8e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    valid_chars \u003d string.ascii_letters + string.digits + string.punctuation"},{"line_number":182,"context_line":"    matcher \u003d re.compile(cfg.CONF.security_compliance.password_regex)"},{"line_number":183,"context_line":"    rand \u003d random.SystemRandom()"},{"line_number":184,"context_line":"    while True:"},{"line_number":185,"context_line":"        candidate \u003d \u0027\u0027.join(rand.choice(valid_chars) for i in range(length))"},{"line_number":186,"context_line":"        if matcher.match(candidate):"},{"line_number":187,"context_line":"            return candidate"}],"source_content_type":"text/x-python","patch_set":2,"id":"da36d5c6_d46dfdcc","line":184,"updated":"2017-02-24 16:07:03.000000000","message":"Ummm... no.\n\nWe already have a better password generator than this *in Heat*:\n\nhttp://git.openstack.org/cgit/openstack/heat/tree/heat/engine/resources/openstack/heat/random_string.py#n203","commit_id":"42f320449f725053bfddc524edde6d8c201fc0da"}],"heat/tests/test_crypt.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"340c5446d15091a0f4c57f6dd60231d83a83cd1b","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_default(self):"},{"line_number":69,"context_line":"        s \u003d crypt.generate_password()"},{"line_number":70,"context_line":"        "},{"line_number":71,"context_line":"        self.assertEqual(32, len(s))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_with_length(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_01ae0385","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":8},"updated":"2017-02-21 08:09:15.000000000","message":"here pep8 error","commit_id":"ca5bff5f8e8cb7dacd38eb88fbd8c7011e4464b1"}]}
