def get_certificate_key_pair(logger, master_url_web, token): req = requests.post('/'.join([master_url_web, 'myspace/my_account/request-a-certificate/WebSection_requestNewCertificate']), data={}, headers={'X-Access-Token': token}, verify=False) if req.status_code == 403: logger.critical('Access denied to the SlapOS Master. ' 'Please check the authentication token or require a new one.') sys.exit(1) req.raise_for_status() return parse_certificate_key_pair(req.text)
def get_certificate_key_pair(logger, master_url_web, node_name, token=None, login=None, password=None): """Download certificates from SlapOS Master""" if token: req = requests.post('/'.join([master_url_web, 'add-a-server/WebSection_registerNewComputer']), data={'title': node_name}, headers={'X-Access-Token': token}, verify=False) else: register_server_url = '/'.join([master_url_web, ("add-a-server/WebSection_registerNewComputer?dialog_id=WebSection_viewServerInformationDialog&dialog_method=WebSection_registerNewComputer&title={}&object_path=/erp5/web_site_module/hosting/add-a-server&update_method=&cancel_url=https%3A//www.vifib.net/add-a-server/WebSection_viewServerInformationDialog&Base_callDialogMethod=&field_your_title=Essai1&dialog_category=None&form_id=view".format(node_name))]) req = requests.get(register_server_url, auth=(login, password), verify=False) if not req.ok and 'Certificate still active.' in req.text: # raise a readable exception if the computer name is already used, # instead of an opaque 500 Internal Error. # this will not work with the new API. logger.error('The node name "%s" is already in use. ' 'Please change the name, or revoke the active ' 'certificate if you want to replace the node.', node_name) sys.exit(1) if req.status_code == 403: if token: msg = 'Please check the authentication token or require a new one.' else: msg = 'Please check username and password.' logger.critical('Access denied to the SlapOS Master. %s', msg) sys.exit(1) elif not req.ok and 'NotImplementedError' in req.text and not token: logger.critical('This SlapOS server does not support login/password ' 'authentication. Please use the token.') sys.exit(1) else: req.raise_for_status() return parse_certificate_key_pair(req.text)