)]}'
{"bin/create_certificates.sh":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"echo \"Create the CA\u0027s private and public keypair (2k long)\""},{"line_number":53,"context_line":"openssl genrsa -passout pass:$CA_PRIVATE_KEY_PASSPHRASE -des3 -out private/cakey.pem 2048"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"echo \"You will be asked to enter some information about the certificate.\""},{"line_number":56,"context_line":"openssl req -x509 -passin pass:$CA_PRIVATE_KEY_PASSPHRASE -new -nodes -key private/cakey.pem \\"}],"source_content_type":"text/x-sh","patch_set":10,"id":"1f769fc5_3af990c7","line":53,"updated":"2019-01-02 18:50:29.000000000","message":"This is an un-related change, we should call it out in the commit message.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"echo \"Create the CA\u0027s private and public keypair (2k long)\""},{"line_number":53,"context_line":"openssl genrsa -passout pass:$CA_PRIVATE_KEY_PASSPHRASE -des3 -out private/cakey.pem 2048"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"echo \"You will be asked to enter some information about the certificate.\""},{"line_number":56,"context_line":"openssl req -x509 -passin pass:$CA_PRIVATE_KEY_PASSPHRASE -new -nodes -key private/cakey.pem \\"}],"source_content_type":"text/x-sh","patch_set":10,"id":"ffd0ebdf_8cbc5bbc","line":53,"in_reply_to":"1f769fc5_3af990c7","updated":"2019-01-03 17:14:39.000000000","message":"It is related in the way that \u0027foobar\u0027 simply does not work as a passphrase with Fernet so I changed the default and allowed the users to pick their own passwords.\n\nI do agree with you that this belongs in the commit msg. I will add it.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":26970,"name":"Yang Youseok","email":"ileixe@gmail.com","username":"ileixe"},"change_message_id":"99879f0600e91d598d335bad9a53beb140f8a4fa","unresolved":false,"context_lines":[{"line_number":34,"context_line":"# Create directories"},{"line_number":35,"context_line":"CERT_DIR\u003d$1"},{"line_number":36,"context_line":"OPEN_SSL_CONF\u003d$2 # etc/certificates/openssl.cnf"},{"line_number":37,"context_line":"CA_PRIVATE_KEY_PASSPHRASE\u003d$3"},{"line_number":38,"context_line":"VALIDITY_DAYS\u003d${4:-18250} # defaults to 50 years"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"echo $CERT_DIR"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ffd0ebdf_cd581a58","line":37,"updated":"2019-01-03 15:23:17.000000000","message":"If this script can be used, maybe I think it\u0027s better to keep order of parameters for backward compatibility.","commit_id":"008489e0e35b209c5ec9f05ce718ac9c851065c1"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"# Create directories"},{"line_number":35,"context_line":"CERT_DIR\u003d$1"},{"line_number":36,"context_line":"OPEN_SSL_CONF\u003d$2 # etc/certificates/openssl.cnf"},{"line_number":37,"context_line":"CA_PRIVATE_KEY_PASSPHRASE\u003d$3"},{"line_number":38,"context_line":"VALIDITY_DAYS\u003d${4:-18250} # defaults to 50 years"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"echo $CERT_DIR"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ffd0ebdf_7efe7606","line":37,"in_reply_to":"ffd0ebdf_cd581a58","updated":"2019-01-03 17:14:39.000000000","message":"the problem is that VALIDITY_DAYS has some default value so it is not trivial to skip over $3 when no value is provided.\n\nIt\u0027s easier to do in Python but I wouldn\u0027t consider converting this script.","commit_id":"008489e0e35b209c5ec9f05ce718ac9c851065c1"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"355926db8b4c9e49333d6935997ac3c42f37dc71","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"echo \"Create the CA\u0027s private and public keypair (2k long)\""},{"line_number":53,"context_line":"openssl genrsa -passout pass:foobar -des3 -out private/cakey.pem 2048"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"echo \"You will be asked to enter some information about the certificate.\""},{"line_number":56,"context_line":"openssl req -x509 -passin pass:foobar -new -nodes -key private/cakey.pem \\"}],"source_content_type":"text/x-sh","patch_set":13,"id":"9fdfeff1_d12660b8","side":"PARENT","line":53,"updated":"2019-01-21 23:29:21.000000000","message":"This seems like a bit of a un-related change.\nNot enough that I would ask for them to be split, but a bit odd.","commit_id":"d7c7b88ac534cd3a6b9d2ae88356a01b677d9e5e"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"34a433ae363349e1bf316badf0605ed8826c855e","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"echo \"Create the CA\u0027s private and public keypair (2k long)\""},{"line_number":53,"context_line":"openssl genrsa -passout pass:foobar -des3 -out private/cakey.pem 2048"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"echo \"You will be asked to enter some information about the certificate.\""},{"line_number":56,"context_line":"openssl req -x509 -passin pass:foobar -new -nodes -key private/cakey.pem \\"}],"source_content_type":"text/x-sh","patch_set":13,"id":"9fdfeff1_86a877db","side":"PARENT","line":53,"in_reply_to":"9fdfeff1_d12660b8","updated":"2019-01-23 15:49:55.000000000","message":"I added this as a reference: https://review.openstack.org/#/c/627064/13//COMMIT_MSG@25\n\nDo you think it should be changed?","commit_id":"d7c7b88ac534cd3a6b9d2ae88356a01b677d9e5e"}],"devstack/settings":[{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"379ddb0106adc10331a5457d364dbd9108a2fdaf","unresolved":false,"context_lines":[{"line_number":91,"context_line":"OCTAVIA_USE_PREGENERATED_SSH_KEY\u003d${OCTAVIA_USE_PREGENERATED_SSH_KEY:-\"False\"}"},{"line_number":92,"context_line":"OCTAVIA_PREGENERATED_SSH_KEY_PATH\u003d${OCTAVIA_PREGENERATED_SSH_KEY_PATH:-\"${OCTAVIA_DIR}/devstack/pregenerated/ssh-keys/octavia_ssh_key\"}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# TODO(nmagnezi): change back to false on the final patchset"},{"line_number":95,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"True\"}"},{"line_number":96,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":97,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""}],"source_content_type":"application/octet-stream","patch_set":5,"id":"1f769fc5_1d471c4e","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":60},"updated":"2018-12-26 15:05:16.000000000","message":"note to self, remember to revert this back to False","commit_id":"d37fc284c49ed30e57257bdb04311e9d7a0db9d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"355926db8b4c9e49333d6935997ac3c42f37dc71","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9fdfeff1_31356cdb","line":96,"updated":"2019-01-21 23:29:21.000000000","message":"You could just make this \"insecure\" like we do the other passphrase.\nGranted, this is only used for gate tests, but someone might copy/paste it.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"34a433ae363349e1bf316badf0605ed8826c855e","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9fdfeff1_d34f1f90","line":96,"in_reply_to":"9fdfeff1_31356cdb","updated":"2019-01-23 15:49:55.000000000","message":"Fernet does not allow you to.\nWhen I used \"insecure\" I got: https://github.com/pyca/cryptography/blob/master/src/cryptography/fernet.py#L38","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4f0748a172c4d815cad703db61a1f51644f1ddf5","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9fdfeff1_8586f6b8","line":96,"in_reply_to":"9fdfeff1_6198e269","updated":"2019-02-12 00:16:13.000000000","message":"I posted on the current patch in settings, \nfernet.Fernet(base64.urlsafe_b64encode(\u0027insecure-key-do-not-use-this-key\u0027))","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"68598711fdc28e97a7b92d62762aea72ffb2c722","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9fdfeff1_6198e269","line":96,"in_reply_to":"9fdfeff1_87c5110d","updated":"2019-02-07 14:51:22.000000000","message":"Nop: http://paste.openstack.org/show/744680/\n\nMaybe we can just add a comment at the line above line#96?","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1cf93a9e08f936db7d8f1a6ed80a8454010a9579","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9fdfeff1_87c5110d","line":96,"in_reply_to":"9fdfeff1_d34f1f90","updated":"2019-02-04 22:42:47.000000000","message":"Ha, ok how about:\ninsecure-key-dont-use-in-production","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4f0748a172c4d815cad703db61a1f51644f1ddf5","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"OCTAVIA_USE_PREGENERATED_CERTS\u003d${OCTAVIA_USE_PREGENERATED_CERTS:-\"False\"}"},{"line_number":95,"context_line":"OCTAVIA_PREGENERATED_CERTS_DIR\u003d${OCTAVIA_PREGENERATED_CERTS_DIR:-\"${OCTAVIA_DIR}/devstack/pregenerated/certs\"}"},{"line_number":96,"context_line":"OCTAVIA_CA_PRIVATE_KEY_PASSPHRASE\u003d\"H9WfJwyL2dzi-ov6SYtML1XL7E3XsFc4_KhRi7q3VOc\u003d\""},{"line_number":97,"context_line":"OCTAVIA_NODE\u003d${OCTAVIA_NODE:-\"standalone\"}"},{"line_number":98,"context_line":"OCTAVIA_CONTROLLER_IP_PORT_LIST\u003d${OCTAVIA_CONTROLLER_IP_PORT_LIST:-\"auto\"}"},{"line_number":99,"context_line":"OCTAVIA_MGMT_PORT_IP\u003d${OCTAVIA_MGMT_PORT_IP:-\"auto\"}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9fdfeff1_658992c8","line":96,"updated":"2019-02-12 00:16:13.000000000","message":"fernet.Fernet(base64.urlsafe_b64encode(\u0027insecure-key-do-not-use-this-key\u0027))","commit_id":"2c210e99e6fe163819a3b915eefee0e96468e63c"}],"octavia/common/config.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    cfg.IntOpt(\u0027stats_update_threads\u0027,"},{"line_number":174,"context_line":"               default\u003dNone,"},{"line_number":175,"context_line":"               help\u003d_(\u0027Number of processes for amphora stats update.\u0027)),"},{"line_number":176,"context_line":"    cfg.StrOpt(\u0027heartbeat_key\u0027,"},{"line_number":177,"context_line":"               help\u003d_(\u0027key used to validate amphora sending \u0027"},{"line_number":178,"context_line":"                      \u0027the message\u0027), secret\u003dTrue),"},{"line_number":179,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_da8dfc31","line":176,"updated":"2019-01-02 18:50:29.000000000","message":"We should encrypt this as well. This could be a followup patch though.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"66bc7d018b06d3910d0bc187f9204bda35829439","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    cfg.IntOpt(\u0027stats_update_threads\u0027,"},{"line_number":174,"context_line":"               default\u003dNone,"},{"line_number":175,"context_line":"               help\u003d_(\u0027Number of processes for amphora stats update.\u0027)),"},{"line_number":176,"context_line":"    cfg.StrOpt(\u0027heartbeat_key\u0027,"},{"line_number":177,"context_line":"               help\u003d_(\u0027key used to validate amphora sending \u0027"},{"line_number":178,"context_line":"                      \u0027the message\u0027), secret\u003dTrue),"},{"line_number":179,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"dfd5e7cf_c6724012","line":176,"in_reply_to":"1f769fc5_da8dfc31","updated":"2019-01-06 11:52:19.000000000","message":"IIRC, we provide this key to the amphora via Jinja template rendering[1] and not anything taskflow, no? (git grep output[2])\n\nIn any case, if I\u0027m wrong about this, please tell me. I don\u0027t mind adding that to this patch.\n\n[1] https://github.com/openstack/octavia/blob/fbb9397979808f36f5a26cbb04c546d27ab2342a/octavia/amphorae/backends/agent/agent_jinja_cfg.py#L56\n[2] http://paste.openstack.org/show/740141","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":618,"context_line":""},{"line_number":619,"context_line":"cfg.CONF.register_opts(local.certgen_opts, group\u003d\u0027certificates\u0027)"},{"line_number":620,"context_line":"cfg.CONF.register_opts(local.certmgr_opts, group\u003d\u0027certificates\u0027)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"# Ensure that the control exchange is set correctly"},{"line_number":623,"context_line":"messaging.set_transport_defaults(control_exchange\u003d\u0027octavia\u0027)"},{"line_number":624,"context_line":"_SQL_CONNECTION_DEFAULT \u003d \u0027sqlite://\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_baa120ac","line":621,"updated":"2019-01-02 18:50:29.000000000","message":"These are only used if the local cert driver is selected, so I\u0027m not sure we should always be registering these. That was why it was in the \"local\" driver. Though, really I think the certs stuff needs to be broken apart better.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[{"line_number":618,"context_line":""},{"line_number":619,"context_line":"cfg.CONF.register_opts(local.certgen_opts, group\u003d\u0027certificates\u0027)"},{"line_number":620,"context_line":"cfg.CONF.register_opts(local.certmgr_opts, group\u003d\u0027certificates\u0027)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"# Ensure that the control exchange is set correctly"},{"line_number":623,"context_line":"messaging.set_transport_defaults(control_exchange\u003d\u0027octavia\u0027)"},{"line_number":624,"context_line":"_SQL_CONNECTION_DEFAULT \u003d \u0027sqlite://\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffd0ebdf_2c344f4a","line":621,"in_reply_to":"1f769fc5_baa120ac","updated":"2019-01-03 17:14:39.000000000","message":"Problem is that we fail to read CONF.certificates.ca_private_key_passphrase on runtime if this is not registered. if there is a better solution for this I\u0027m happy to adopt it.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}],"octavia/common/utils.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"355926db8b4c9e49333d6935997ac3c42f37dc71","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def get_six_compatible_ca_private_key_passphrase():"},{"line_number":95,"context_line":"    key \u003d CONF.certificates.ca_private_key_passphrase"},{"line_number":96,"context_line":"    if six.PY3 and isinstance(key, six.text_type):"},{"line_number":97,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":98,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_d1d0a053","line":95,"updated":"2019-01-21 23:29:21.000000000","message":"I really don\u0027t like overloading configuration settings like this. I get that it reduces the number of settings, but it seems odd to tie a private key passphrase to an internal encryption routine.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4f0748a172c4d815cad703db61a1f51644f1ddf5","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def get_six_compatible_ca_private_key_passphrase():"},{"line_number":95,"context_line":"    key \u003d CONF.certificates.ca_private_key_passphrase"},{"line_number":96,"context_line":"    if six.PY3 and isinstance(key, six.text_type):"},{"line_number":97,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":98,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_e5bee263","line":95,"in_reply_to":"9fdfeff1_41503e5f","updated":"2019-02-12 00:16:13.000000000","message":"Well, some comments back:\n1. Everything in the config file is an octavia internal detail....\n2. Actually, this is not the case. As long as we provide a reasonable default defined in config.py we can backport. Granted, I think this would be a grey area since it really should be empty and \"required\" in the config.\n3. We could always do this in Stein and not backport it. Leaving them as-is. Really this is to stop future code changes breaking the exceptions, which we should not be having those changes on the stable branches anyway.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1cf93a9e08f936db7d8f1a6ed80a8454010a9579","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def get_six_compatible_ca_private_key_passphrase():"},{"line_number":95,"context_line":"    key \u003d CONF.certificates.ca_private_key_passphrase"},{"line_number":96,"context_line":"    if six.PY3 and isinstance(key, six.text_type):"},{"line_number":97,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":98,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_c7e239a1","line":95,"in_reply_to":"9fdfeff1_463ccfbe","updated":"2019-02-04 22:42:47.000000000","message":"Yeah, my comment is I think this pass phrase should be it\u0027s own configuration item and not the same as the one for certificates.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"68598711fdc28e97a7b92d62762aea72ffb2c722","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def get_six_compatible_ca_private_key_passphrase():"},{"line_number":95,"context_line":"    key \u003d CONF.certificates.ca_private_key_passphrase"},{"line_number":96,"context_line":"    if six.PY3 and isinstance(key, six.text_type):"},{"line_number":97,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":98,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_41503e5f","line":95,"in_reply_to":"9fdfeff1_c7e239a1","updated":"2019-02-07 14:51:22.000000000","message":"I\u0027m open for discussion about this (IRC might work better here), but here are my initial thoughts: \n1. This is an Octavia internal implementation detail. I\u0027m not sure this should be exposed as its own config option.\n2. Having an additional config option will prevent us from backporting this, and potentially require us to resolve future CVEs in older stable branches in separate patches.\n3. as a result of #2 we will not be able to remove the logging exclusions for past stable branches.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"34a433ae363349e1bf316badf0605ed8826c855e","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def get_six_compatible_ca_private_key_passphrase():"},{"line_number":95,"context_line":"    key \u003d CONF.certificates.ca_private_key_passphrase"},{"line_number":96,"context_line":"    if six.PY3 and isinstance(key, six.text_type):"},{"line_number":97,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":98,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_463ccfbe","line":95,"in_reply_to":"9fdfeff1_d1d0a053","updated":"2019-01-23 15:49:55.000000000","message":"the reason I wrote this function is that oslo does not handle storing a byte string so well. So I had to convert to str before I store it and in case of Python3 to convert back to byte str.\n\nthat specific passphrase is restricted to be byte str when sent to fernet.\n\nIf I got you wrong please tell me.\ngiven that Oslo issue, I\u0027m not sure how to better store and read the passphrase","commit_id":"65001513b2dff094980033c61675c38eefe38c65"}],"octavia/controller/worker/tasks/amphora_driver_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    def execute(self, amphora, server_pem):"},{"line_number":274,"context_line":"        \"\"\"Execute cert_update_amphora routine.\"\"\""},{"line_number":275,"context_line":"        LOG.debug(\"Upload cert in amphora REST driver\")"},{"line_number":276,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":277,"context_line":"        self.amphora_driver.upload_cert_amp(amphora, fer.decrypt(server_pem))"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_fa779839","line":276,"updated":"2019-01-02 18:50:29.000000000","message":"get_six_compatible_ca_private_key_passphrase() ?","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    def execute(self, amphora, server_pem):"},{"line_number":274,"context_line":"        \"\"\"Execute cert_update_amphora routine.\"\"\""},{"line_number":275,"context_line":"        LOG.debug(\"Upload cert in amphora REST driver\")"},{"line_number":276,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":277,"context_line":"        self.amphora_driver.upload_cert_amp(amphora, fer.decrypt(server_pem))"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ffd0ebdf_32cb45a6","line":276,"in_reply_to":"1f769fc5_fa779839","updated":"2019-01-03 17:14:39.000000000","message":"Done","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}],"octavia/controller/worker/tasks/cert_task.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        fer \u003d fernet.Fernet(key)"},{"line_number":51,"context_line":"        return {"},{"line_number":52,"context_line":"            \u0027cert_certificate\u0027: fer.encrypt(cert.certificate),"},{"line_number":53,"context_line":"            \u0027cert_private_key\u0027: fer.encrypt(cert.private_key),"},{"line_number":54,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_da92dc4b","line":53,"updated":"2019-01-02 18:50:29.000000000","message":"Why not just encrypt the appended string? That would reduce the number of encrypt/decrypt calls we have to make.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"66bc7d018b06d3910d0bc187f9204bda35829439","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        fer \u003d fernet.Fernet(key)"},{"line_number":51,"context_line":"        return {"},{"line_number":52,"context_line":"            \u0027cert_certificate\u0027: fer.encrypt(cert.certificate),"},{"line_number":53,"context_line":"            \u0027cert_private_key\u0027: fer.encrypt(cert.private_key),"},{"line_number":54,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dfd5e7cf_46609033","line":53,"in_reply_to":"1f769fc5_da92dc4b","updated":"2019-01-06 11:52:19.000000000","message":"I was playing around with this and somehow got to this method.\nIn any case, you are right about this.\nThe most recent PS uses fer.encrypt only once.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}],"octavia/controller/worker/tasks/compute_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":136,"context_line":"            ca \u003d client_ca.read()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":139,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":140,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":141,"context_line":"        config_drive_files \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_7a99486c","line":138,"updated":"2019-01-02 18:50:29.000000000","message":"get_six_compatible_ca_private_key_passphrase() ?","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":136,"context_line":"            ca \u003d client_ca.read()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":139,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":140,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":141,"context_line":"        config_drive_files \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffd0ebdf_f2f7fdd3","line":138,"in_reply_to":"1f769fc5_7a99486c","updated":"2019-01-03 17:14:39.000000000","message":"Done","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":139,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":140,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":141,"context_line":"        config_drive_files \u003d {"},{"line_number":142,"context_line":"            \u0027/etc/octavia/certs/server.pem\u0027: decryped_server_pem,"},{"line_number":143,"context_line":"            \u0027/etc/octavia/certs/client_ca.pem\u0027: ca}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_5a9ecc54","line":140,"updated":"2019-01-02 18:50:29.000000000","message":"Same here, we really only need one decrypt call for the combined string.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"66bc7d018b06d3910d0bc187f9204bda35829439","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":139,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":140,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":141,"context_line":"        config_drive_files \u003d {"},{"line_number":142,"context_line":"            \u0027/etc/octavia/certs/server.pem\u0027: decryped_server_pem,"},{"line_number":143,"context_line":"            \u0027/etc/octavia/certs/client_ca.pem\u0027: ca}"}],"source_content_type":"text/x-python","patch_set":10,"id":"dfd5e7cf_66c6f419","line":140,"in_reply_to":"1f769fc5_5a9ecc54","updated":"2019-01-06 11:52:19.000000000","message":"ditto. Adopted your suggestion.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}],"octavia/controller/worker/tasks/database_tasks.py":[{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"9609d2a5e94257451b17fe741e480291ba5f74fd","unresolved":false,"context_lines":[{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        :param amphora_id: Id of the amphora to update"},{"line_number":892,"context_line":"        :param server_pem: Certificate in PEM format"},{"line_number":893,"context_line":"        :returns: None``"},{"line_number":894,"context_line":"        \"\"\""},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        LOG.debug(\"Update DB cert expiry date of amphora id: %s\", amphora_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_d44748bc","line":893,"range":{"start_line":893,"start_character":22,"end_line":893,"end_character":24},"updated":"2018-12-25 13:40:47.000000000","message":"typo, will be removed in the next PS","commit_id":"b1d01cf8291246cabfc0de38fe721de77bcb4b00"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[{"line_number":896,"context_line":"        LOG.debug(\"Update DB cert expiry date of amphora id: %s\", amphora_id)"},{"line_number":897,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":898,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":899,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":900,"context_line":"        cert_expiration \u003d cert_parser.get_cert_expiration(decryped_server_pem)"},{"line_number":901,"context_line":"        LOG.debug(\"Certificate expiration date is %s \", cert_expiration)"},{"line_number":902,"context_line":"        self.amphora_repo.update(db_apis.get_session(), amphora_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f769fc5_7ab2a8e8","line":899,"updated":"2019-01-02 18:50:29.000000000","message":"Same here, we really only need one decrypt call for the combined string.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"66bc7d018b06d3910d0bc187f9204bda35829439","unresolved":false,"context_lines":[{"line_number":896,"context_line":"        LOG.debug(\"Update DB cert expiry date of amphora id: %s\", amphora_id)"},{"line_number":897,"context_line":"        fer \u003d fernet.Fernet(CONF.certificates.ca_private_key_passphrase)"},{"line_number":898,"context_line":"        decryped_server_pem \u003d (fer.decrypt(server_pem[\u0027cert_certificate\u0027]) +"},{"line_number":899,"context_line":"                               fer.decrypt(server_pem[\u0027cert_private_key\u0027]))"},{"line_number":900,"context_line":"        cert_expiration \u003d cert_parser.get_cert_expiration(decryped_server_pem)"},{"line_number":901,"context_line":"        LOG.debug(\"Certificate expiration date is %s \", cert_expiration)"},{"line_number":902,"context_line":"        self.amphora_repo.update(db_apis.get_session(), amphora_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"dfd5e7cf_86cbd81c","line":899,"in_reply_to":"1f769fc5_7ab2a8e8","updated":"2019-01-06 11:52:19.000000000","message":"ditto. Adopted your suggestion.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}],"octavia/tests/unit/controller/worker/tasks/cert_helpers.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"355926db8b4c9e49333d6935997ac3c42f37dc71","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    return key"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_six_compatible_value(value):"},{"line_number":28,"context_line":"    if six.PY3 and isinstance(value, six.string_types):"},{"line_number":29,"context_line":"        value \u003d value.encode(\u0027utf-8\u0027)"},{"line_number":30,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_110aa8d1","line":27,"updated":"2019-01-21 23:29:21.000000000","message":"This is basically the same as octavia/common/utils.py get_six_compatible_ca_private_key_passphrase\nWhy don\u0027t we make octavia/common/utils.py a generic named method and just pass in the CONF string? Then remove this from here and use the octavia/common/utils.py method.","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"68598711fdc28e97a7b92d62762aea72ffb2c722","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    return key"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_six_compatible_value(value):"},{"line_number":28,"context_line":"    if six.PY3 and isinstance(value, six.string_types):"},{"line_number":29,"context_line":"        value \u003d value.encode(\u0027utf-8\u0027)"},{"line_number":30,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_01a796a9","line":27,"in_reply_to":"9fdfeff1_110aa8d1","updated":"2019-02-07 14:51:22.000000000","message":"Done","commit_id":"65001513b2dff094980033c61675c38eefe38c65"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"34a433ae363349e1bf316badf0605ed8826c855e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    return key"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_six_compatible_value(value):"},{"line_number":28,"context_line":"    if six.PY3 and isinstance(value, six.string_types):"},{"line_number":29,"context_line":"        value \u003d value.encode(\u0027utf-8\u0027)"},{"line_number":30,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_132a878f","line":27,"in_reply_to":"9fdfeff1_110aa8d1","updated":"2019-01-23 15:49:55.000000000","message":"will do","commit_id":"65001513b2dff094980033c61675c38eefe38c65"}],"octavia/tests/unit/controller/worker/tasks/six_helpers.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e9cb289a6794041275c053d9ae8ca8541f4a818","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1f769fc5_fada3815","updated":"2019-01-02 18:50:29.000000000","message":"Can we rename this? It\u0027s more of cert_helpers than six IMO.","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"cd33d0620e8d4dc8aaba38e4af08514a66624ea4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ffd0ebdf_52e129fe","in_reply_to":"1f769fc5_fada3815","updated":"2019-01-03 17:14:39.000000000","message":"Done","commit_id":"529f5b3a6ec3388f183c9e400428b2556aa77438"}]}
