def get_password_data(url, verb, headers, version, args): params = {} params['Action'] = utils.dash_to_camelcase(args[0]) params['Version'] = version args = args[1:] parser = utils.get_argument_parser() parser.add_argument('--instance-id', required=True) processed, remaining = parser.parse_known_args(args) utils.populate_params_from_cli_args(params, processed) response = requestify.make_request(url, verb, headers, params) parser = utils.get_argument_parser() parser.add_argument('--private-key-file', required=False, default=None) parser.add_argument('--key-passphrase', required=False, default=None) processed = parser.parse_args(remaining) processed = vars(processed) private_key_file = processed.get('private_key_file') passphrase = processed.get('key_passphrase') if response.status_code != 200: return response response_json = utils.web_response_to_json(response) try: response_body = response_json['GetPasswordDataResponse'] encrypted_password = response_body['passwordData'] if not private_key_file or not encrypted_password: return response decrypted_password = decrypt_instance_password(encrypted_password, private_key_file, passphrase) response_json['GetPasswordDataResponse']['passwordData'] = \ decrypted_password return response_json except KeyError as ke: raise exception.UnknownOutputFormat()
def web_response_to_json(response): """ Modify the web response output to json format param response: response object from requests library return: json object representing the response content """ try: if response: resp_dict = json.loads(response.content) except: try: resp_ordereddict = xmltodict.parse(response.content) resp_json = json.dumps(resp_ordereddict, indent=4, sort_keys=True) resp_dict = json.loads(resp_json) except: raise exception.UnknownOutputFormat() return resp_dict
def display(self, response, headers, webobject=True): resp_json = "" request_id = None try: if headers and headers.get('x-jcs-request-id'): request_id = headers.get('x-jcs-request-id') elif headers and headers.get('request-id'): request_id = headers.get('request-id') if response: if webobject: resp_dict = json.loads(response) else: resp_dict = response if not request_id: request_id = utils.requestid_in_response(resp_dict) resp_json = json.dumps(resp_dict, indent=4, sort_keys=True) except: try: resp_ordereddict = xmltodict.parse(response) resp_json = json.dumps(resp_ordereddict, indent=4, sort_keys=True) resp_dict = json.loads(resp_json) if not request_id: request_id = utils.requestid_in_response(resp_dict) resp_json = json.dumps(resp_dict, indent=4, sort_keys=True) resp_json = resp_json.replace("\\n", "\n") resp_json = resp_json.replace("\\", "") except Exception as e: raise e #raise exception.UnknownOutputFormat() # Handle request-id displaying if not request_id: raise exception.UnknownOutputFormat() output_msg = resp_json output_msg += "\nRequest-Id: " + request_id print(output_msg)