)]}'
{"novaclient/v1_1/servers.py":[{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"7f11a2118d84fa9cc91b1c2bf505d66002c98b5c","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                                          % base.getid(server))"},{"line_number":402,"context_line":"        if body and body.get(\u0027password\u0027):"},{"line_number":403,"context_line":"            unencoded \u003d base64.b64decode(body[\u0027password\u0027])"},{"line_number":404,"context_line":"            cmd \u003d [\u0027openssl\u0027, \u0027rsautl\u0027, \u0027-decrypt\u0027, \u0027-inkey\u0027, private_key]"},{"line_number":405,"context_line":"            proc \u003d subprocess.Popen(cmd, stdin\u003dsubprocess.PIPE,"},{"line_number":406,"context_line":"                                    stdout\u003dsubprocess.PIPE,"},{"line_number":407,"context_line":"                                    stderr\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fk9w%3D","line":404,"updated":"2013-01-15 09:36:27.000000000","message":"Can we put this in a separate utility class / function?\nIt would provide abstraction for testing and possible implementation replacement of the decryption code.","commit_id":"a02079f17b24bc921c784c2fbfeea713be73536d"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"7f11a2118d84fa9cc91b1c2bf505d66002c98b5c","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        if body and body.get(\u0027password\u0027):"},{"line_number":403,"context_line":"            unencoded \u003d base64.b64decode(body[\u0027password\u0027])"},{"line_number":404,"context_line":"            cmd \u003d [\u0027openssl\u0027, \u0027rsautl\u0027, \u0027-decrypt\u0027, \u0027-inkey\u0027, private_key]"},{"line_number":405,"context_line":"            proc \u003d subprocess.Popen(cmd, stdin\u003dsubprocess.PIPE,"},{"line_number":406,"context_line":"                                    stdout\u003dsubprocess.PIPE,"},{"line_number":407,"context_line":"                                    stderr\u003dsubprocess.PIPE)"},{"line_number":408,"context_line":"            out, err \u003d proc.communicate(unencoded)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fk%2BA%3D","line":405,"updated":"2013-01-15 09:36:27.000000000","message":"My only concern here is that it requires the openssl executable, bringing some portability concerns (Windows, mobile devices, etc). I\u0027d replace it with ctypes calls to the underlying openssl DLLs / shared objects (it\u0027s easier than it sounds) but this can be postponed to a subsequent patch, so I have no problem with this implementation now.","commit_id":"a02079f17b24bc921c784c2fbfeea713be73536d"}]}
