def credentials_resource(request, site): user_obj = get_user_object(request.user.username) if request.method == "GET": all_clouds = user_obj.get_clouds() cloud = all_clouds.get(site) details = str_to_bool(request.GET.get('details', 'false')) if details is True: keys = get_all_keys([cloud]) if cloud is not None: response_dict = { "id": cloud.cloudname, "access_key": cloud.iaas_key, "secret_key": cloud.iaas_secret, "key_name": cloud.keyname, "uri": "/api/%s/credentials/sites/%s" % (API_VERSION, cloud.cloudname) } if details is True: response_dict["available_keys"] = keys[cloud.cloudname] h = HttpResponse(json.dumps(response_dict), mimetype='application/javascript') else: h = HttpResponseNotFound('Credentials for site %s not found' % site, mimetype='application/javascript') elif request.method == "PUT": try: content = json.loads(request.body) except: return HttpResponseBadRequest() required_params = ["id", "access_key", "secret_key", "key_name"] if not has_all_required_params(required_params, content): return HttpResponseBadRequest() if site != content["id"]: return HttpResponseBadRequest() access_key = content["access_key"] secret_key = content["secret_key"] key_name = content["key_name"] # Check that the site exists all_sites = phantom_get_sites(request.REQUEST, user_obj) if site not in all_sites: return HttpResponseBadRequest() # Check that credentials exist if site not in user_obj.get_clouds(): return HttpResponseBadRequest() response_dict = { "id": site, "access_key": access_key, "secret_key": secret_key, "key_name": key_name, "uri": "/api/%s/credentials/sites/%s" % (API_VERSION, site) } # Add credentials to DTRS try: user_obj.add_site(site, access_key, secret_key, key_name) except: log.exception("Failed to add credentials for site %s" % site) return HttpResponseServerError() h = HttpResponse(json.dumps(response_dict), mimetype='application/javascript') elif request.method == "DELETE": # Check that credentials exist clouds = user_obj.get_clouds() if site not in clouds: return HttpResponseBadRequest("Site %s not available. Choose from %s" % (site, clouds.keys())) # Remove credentials from DTRS try: user_obj.delete_site(site) except: msg = "Failed to remove credentials for site %s" % site log.exception(msg) return HttpResponseServerError(msg) h = HttpResponse(status=204) return h
def credentials(request): user_obj = get_user_object(request.user.username) if request.method == "GET": all_clouds = user_obj.get_clouds() details = str_to_bool(request.GET.get('details', 'false')) if details is True: keys = get_all_keys(all_clouds) packer_credentials = get_all_packer_credentials(request.user.username, all_clouds) response_list = [] for cloud in all_clouds.values(): credentials_name = cloud.cloudname credentials_dict = { "id": credentials_name, "access_key": cloud.iaas_key, "secret_key": cloud.iaas_secret, "key_name": cloud.keyname, "uri": "/api/%s/credentials/sites/%s" % (API_VERSION, credentials_name) } if details is True: credentials_dict["available_keys"] = keys[cloud.cloudname] packer_cloud_creds = packer_credentials[cloud.cloudname] if "usercert" in packer_cloud_creds: credentials_dict["nimbus_user_cert"] = packer_cloud_creds["usercert"] if "userkey" in packer_cloud_creds: credentials_dict["nimbus_user_key"] = packer_cloud_creds["userkey"] if "canonical_id" in packer_cloud_creds: credentials_dict["nimbus_canonical_id"] = packer_cloud_creds["canonical_id"] if "openstack_username" in packer_cloud_creds: credentials_dict["openstack_username"] = packer_cloud_creds["openstack_username"] if "openstack_password" in packer_cloud_creds: credentials_dict["openstack_password"] = packer_cloud_creds["openstack_password"] if "openstack_project" in packer_cloud_creds: credentials_dict["openstack_project"] = packer_cloud_creds["openstack_project"] response_list.append(credentials_dict) log.info(response_list) h = HttpResponse(json.dumps(response_list), mimetype='application/javascript') elif request.method == "POST": try: content = json.loads(request.body) except: msg = "Bad request (%s). No JSON. See API docs: %s" % (request.body, DOC_URI) return HttpResponseBadRequest(msg) required_params = ["id", "access_key", "secret_key", "key_name"] if not has_all_required_params(required_params, content): return HttpResponseBadRequest("Bad request. Do not have all required parameters (%s)" % required_params) site = content["id"] access_key = content["access_key"] secret_key = content["secret_key"] key_name = content["key_name"] nimbus_user_cert = content.get("nimbus_user_cert") nimbus_user_key = content.get("nimbus_user_key") nimbus_canonical_id = content.get("nimbus_canonical_id") openstack_username = content.get("openstack_username") openstack_password = content.get("openstack_password") openstack_project = content.get("openstack_project") # Check that the site exists all_sites = phantom_get_sites(request.POST, user_obj) if site not in all_sites: return HttpResponseBadRequest("%s doesn't seem to exist. I know about %s" % ( site, all_sites)) if re.search("^%s+$" % ACCEPTED_RESOURCE_PATTERN, site) is None: return HttpResponseBadRequest("%s isn't an acceptable id. Must match %s" % ( site, ACCEPTED_RESOURCE_PATTERN)) response_dict = { "id": site, "access_key": access_key, "secret_key": secret_key, "key_name": key_name, "uri": "/api/%s/credentials/sites/%s" % (API_VERSION, site) } # Add credentials to DTRS try: user_obj.add_site(site, access_key, secret_key, key_name) except: log.exception("Failed to add credentials for site %s" % site) return HttpResponseServerError() # Add image generation credentials to DB if nimbus_user_cert is not None: add_packer_credentials(username=request.user.username, cloud=site, nimbus_user_cert=nimbus_user_cert, nimbus_user_key=nimbus_user_key, nimbus_canonical_id=nimbus_canonical_id) if openstack_username is not None: add_packer_credentials(username=request.user.username, cloud=site, openstack_username=openstack_username, openstack_password=openstack_password, openstack_project=openstack_project) response_dict["nimbus_user_cert"] = nimbus_user_cert response_dict["nimbus_user_key"] = nimbus_user_key response_dict["nimbus_canonical_id"] = nimbus_canonical_id response_dict["openstack_username"] = openstack_username response_dict["openstack_password"] = openstack_password response_dict["openstack_project"] = openstack_project h = HttpResponse(json.dumps(response_dict), status=201, mimetype='application/javascript') return h