Exemple #1
0
def sites(request):
    user_obj = get_user_object(request.user.username)
    details = str_to_bool(request.GET.get('details', 'false'))
    all_sites = phantom_get_sites(request.GET, user_obj, details=details)
    response_list = []
    for site_name, site_dict in all_sites.iteritems():
        site_dict["credentials"] = "/api/%s/credentials/sites/%s" % (API_VERSION, site_name)
        site_dict["uri"] = "/api/%s/sites/%s" % (API_VERSION, site_name)
        if details:
            if site_dict.get('user_images') is None:
                site_dict['user_images'] = []
            if site_dict.get('public_images') is None:
                site_dict['public_images'] = []
        response_list.append(site_dict)
    h = HttpResponse(json.dumps(response_list), mimetype='application/javascript')
    return h
Exemple #2
0
def site_resource(request, site):
    user_obj = get_user_object(request.user.username)
    details = str_to_bool(request.GET.get('details', 'false'))
    all_sites = phantom_get_sites(request.GET, user_obj, details=details)
    if site in all_sites:
        response_dict = {
            "id": site,
            "credentials": "/api/%s/credentials/sites/%s" % (API_VERSION, site),
            "instance_types": all_sites[site].get('instance_types', []),
            "uri": "/api/%s/sites/%s" % (API_VERSION, site)
        }
        if details:
            if response_dict.get('user_images') is None:
                response_dict['user_images'] = []
            if response_dict.get('public_images') is None:
                response_dict['public_images'] = []
        h = HttpResponse(json.dumps(response_dict), mimetype='application/javascript')
    else:
        h = HttpResponseNotFound('Site %s not found' % site, mimetype='application/javascript')
    return h
Exemple #3
0
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
Exemple #4
0
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