示例#1
0
def domains(request):
    customer = request.user.customer

    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if Domain.objects.filter(name=j['name']):
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
            return response
        if dns_check(j['name'], customer.uuid):
            try:
                customer.domain_set.create(name=j['name'])
                response = HttpResponse(json.dumps({'message': 'Created'}),
                                        content_type="application/json")
                response.status_code = 201
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                        content_type="application/json")
                response.status_code = 409
            return response
        else:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                         content_type="application/json")

    elif request.method == 'DELETE':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        try:
            customer.domain_set.get(name=j['name']).delete()
        except Domain.DoesNotExist:
            return HttpResponseNotFound(json.dumps({'error': 'Not found'}),
                                        content_type="application/json")
        return HttpResponse(json.dumps({'message': 'Ok'}),
                            content_type="application/json")

    elif request.method == 'GET':
        if 'tags' in request.GET:
            j = [{'id': d.pk, 'name': d.name, 'uuid': d.uuid,
                  'tags': [t.name for t in d.tags.all()]} for d in
                 customer.domain_set.filter(
                     tags__name__in=request.GET['tags'].split(','))]
        else:
            j = [{'id': d.pk, 'name': d.name, 'uuid': d.uuid,
                  'tags': [t.name for t in d.tags.all()]} for d in
                 customer.domain_set.all()]
        return spit_json(request, j)

    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#2
0
文件: views.py 项目: unbit/uwsgi.it
def portmappings(request, ip):
    customer = request.user.customer
    try:
        server = Server.objects.get(address=ip, owner=customer)
    except:
        return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        pm = Portmap()
        try:
            pm.proto = j["proto"]
            pm.public_port = int(j["public_port"])
            pm.private_port = int(j["private_port"])
            pm.container = server.container_set.get(pk=(int(j["container"]) - UWSGI_IT_BASE_UID), customer=customer)
            pm.full_clean()
            pm.save()
        except:
            import sys

            print sys.exc_info()
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        response = HttpResponse(json.dumps({"message": "Created"}), content_type="application/json")
        response.status_code = 201
        return response
    elif request.method == "DELETE":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        try:
            pm = Portmap.objects.get(pk=j["id"], container__server=server)
            pm.delete()
        except:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")
    mappings = []
    for portmap in Portmap.objects.filter(container__server=server):
        mappings.append(
            {
                "id": portmap.pk,
                "proto": portmap.proto,
                "public_port": portmap.public_port,
                "container": portmap.container.uid,
                "container_ip": str(portmap.container.ip),
                "private_port": portmap.private_port,
            }
        )
    return spit_json(request, mappings)
示例#3
0
文件: views.py 项目: unbit/uwsgi.it
def domains(request):
    customer = request.user.customer

    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if Domain.objects.filter(name=j["name"]):
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
            return response
        if dns_check(j["name"], customer.uuid):
            try:
                customer.domain_set.create(name=j["name"])
                response = HttpResponse(json.dumps({"message": "Created"}), content_type="application/json")
                response.status_code = 201
            except:
                response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
                response.status_code = 409
            return response
        else:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")

    elif request.method == "DELETE":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        try:
            customer.domain_set.get(name=j["name"]).delete()
        except Domain.DoesNotExist:
            return HttpResponseNotFound(json.dumps({"error": "Not found"}), content_type="application/json")
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")

    elif request.method == "GET":
        if "tags" in request.GET:
            j = [
                {"id": d.pk, "name": d.name, "uuid": d.uuid, "tags": [t.name for t in d.tags.all()]}
                for d in customer.domain_set.filter(tags__name__in=request.GET["tags"].split(","))
            ]
        else:
            j = [
                {"id": d.pk, "name": d.name, "uuid": d.uuid, "tags": [t.name for t in d.tags.all()]}
                for d in customer.domain_set.all()
            ]
        return spit_json(request, j)

    response = HttpResponse(json.dumps({"error": "Method not allowed"}), content_type="application/json")
    response.status_code = 405
    return response
示例#4
0
def portmappings(request, ip):
    customer = request.user.customer
    try:
        server = Server.objects.get(address=ip,owner=customer)
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        pm = Portmap()
        try:
            pm.proto = j['proto']
            pm.public_port = int(j['public_port'])
            pm.private_port = int(j['private_port'])
            pm.container = server.container_set.get(pk=(int(j['container']) - UWSGI_IT_BASE_UID), customer=customer)
            pm.full_clean()
            pm.save()
        except:
            import sys
            print sys.exc_info()
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
        response.status_code = 201
        return response
    elif request.method == 'DELETE':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            pm = Portmap.objects.get(pk=j['id'], container__server=server)
            pm.delete()
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")
    mappings = []
    for portmap in Portmap.objects.filter(container__server=server):
        mappings.append({'id': portmap.pk,
                         'proto': portmap.proto,
                         'public_port': portmap.public_port,
                         'container': portmap.container.uid,
                         'container_ip': str(portmap.container.ip),
                         'private_port': portmap.private_port,
                       })
    return spit_json(request, mappings)
示例#5
0
文件: views.py 项目: 20tab/uwsgi.it
def portmappings(request, ip):
    customer = request.user.customer
    try:
        server = Server.objects.get(address=ip,owner=customer)
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        pm = Portmap()
        try:
            pm.proto = j['proto']
            pm.public_port = int(j['public_port'])
            pm.private_port = int(j['private_port'])
            pm.container = server.container_set.get(pk=(int(j['container']) - UWSGI_IT_BASE_UID), customer=customer)
            pm.full_clean()
            pm.save()
        except:
            import sys
            print sys.exc_info()
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
        response.status_code = 201
        return response
    elif request.method == 'DELETE':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            pm = Portmap.objects.get(pk=j['id'], container__server=server)
            pm.delete()
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")
    mappings = []
    for portmap in Portmap.objects.filter(container__server=server):
        mappings.append({'id': portmap.pk,
                         'proto': portmap.proto,
                         'public_port': portmap.public_port,
                         'container': portmap.container.uid,
                         'container_ip': str(portmap.container.ip),
                         'private_port': portmap.private_port,
                       })
    return spit_json(request, mappings)
示例#6
0
文件: views.py 项目: 20tab/uwsgi.it
def custom_distro(request, id):
    customer = request.user.customer
    try:
        distro = CustomDistro.objects.get(pk=id, container__customer=customer)
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'DELETE':
        distro.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        allowd_fields = ('name', 'path', 'note')
        for field in allowed_fields:
            if field in j:
                setattr(distro, field, j[field])
        distro.full_clean()
        distro.save()
    d = {
        'id': distro.pk,
        'container': distro.container.uid,
        'name': distro.name,
        'path': distro.path,
        'note': distro.note,
        'uuid': distro.uuid,
    }
    return spit_json(request, d)
示例#7
0
文件: views.py 项目: taifu/uwsgi.it
def tag(request, id):
    customer = request.user.customer
    try:
        t = Tag.objects.get(customer=customer, pk=id)
    except:
        return HttpResponseNotFound(json.dumps({'error': 'Not found'}), content_type="application/json")

    allowed_keys = ('name', 'note')
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        for key in allowed_keys:
            if key in j:
                setattr(t, key, j[key])
        try:
            t.save()
            j = {'id': t.pk, 'name': t.name, 'note': t.note}
            return spit_json(request, j)
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
            response.status_code = 409
        return response
    elif request.method == 'GET':
        j = {'id': t.pk, 'name': t.name, 'note': t.note}
        return spit_json(request, j)
    elif request.method == 'DELETE':
        t.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")
    allowed_keys = ('name', 'note')
    response = HttpResponse(json.dumps({'error': 'Method not allowed'}), content_type="application/json")
    response.status_code = 405
    return response
示例#8
0
def me(request):
    customer = request.user.customer
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        allowed_keys = ('vat', 'company')
        j = json.loads(request.read())
        for key in j:
            if key in allowed_keys:
                setattr(customer, key, j[key])
        if 'password' in j:
            customer.user.set_password(j['password'])
            customer.user.save()
        if 'email' in j:
            customer.user.email = j['email']
            customer.user.save()
        customer.save()
    c = {
        'email': customer.user.email,
        'vat': customer.vat,
        'company': customer.company,
        'uuid': customer.uuid,
        'containers': [cc.uid for cc in customer.container_set.all()],
        'servers': [s.address for s in customer.server_set.all()],
    }
    return spit_json(request, c)
示例#9
0
def tags(request):
    customer = request.user.customer
    allowed_keys = ('name', 'note')
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        tag = Tag(customer=customer)
        for key in allowed_keys:
            if key in j:
                setattr(tag, key, j[key])
        try:
            tag.save()
            j = {'id': tag.pk, 'name': tag.name, 'note': tag.note}
            response = spit_json(request, j)
            response.status_code = 201
            response.reason_phrase = 'Created'
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
        return response

    elif request.method == 'GET':
        j = [{
            'id': t.pk,
            'name': t.name
        } for t in Tag.objects.filter(customer=customer)]
        return spit_json(request, j)
    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#10
0
文件: views.py 项目: 20tab/uwsgi.it
def custom_distros(request, id=None):
    customer = request.user.customer
    if not id:
        j = [{'id': d.pk, 'name': d.name, 'container': d.container.uid} for d in CustomDistro.objects.filter(container__customer=customer)]
        return spit_json(request, j)
    try:
        container = customer.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        if not container.custom_distros_storage:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        distro = CustomDistro(container=container) 
        allowed_fields = ('name', 'path', 'note')
        for field in allowed_fields:
            if field in j:
                setattr(distro, field, j[field])
        try:
            distro.full_clean()
            distro.save()
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
        response.status_code = 201
        return response
    j = [{'id': d.pk, 'name': d.name} for d in CustomDistro.objects.filter(container__server=container.server,container__customer=customer).exclude(container=container)]
    return spit_json(request, j)
示例#11
0
def private_metrics_container_do(request, id, metric):
    server = Server.objects.get(address=request.META['REMOTE_ADDR'])
    container = server.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))

    if request.method == 'POST':
        response = check_body(request)
        if response: return response
        j = json.loads(request.read())
        d = datetime.datetime.fromtimestamp(int(j['unix']))
        try:
            m = metric.objects.get(container=container,
                                   year=d.year,
                                   month=d.month,
                                   day=d.day)
        except:
            m = metric(container=container,
                       year=d.year,
                       month=d.month,
                       day=d.day,
                       json='[]')
        m_json = json.loads(m.json)
        m_json.append([int(j['unix']), long(j['value'])])
        m.json = json.dumps(m_json)
        m.save()
        response = HttpResponse('Created\n')
        response.status_code = 201
    else:
        response = HttpResponse('Method not allowed\n')
        response.status_code = 405
    return response
示例#12
0
文件: views.py 项目: unbit/uwsgi.it
def tag(request, id):
    customer = request.user.customer
    try:
        t = Tag.objects.get(customer=customer, pk=id)
    except:
        return HttpResponseNotFound(json.dumps({"error": "Not found"}), content_type="application/json")

    allowed_keys = ("name", "note")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        for key in allowed_keys:
            if key in j:
                setattr(t, key, j[key])
        try:
            t.save()
            j = {"id": t.pk, "name": t.name, "note": t.note}
            return spit_json(request, j)
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
        return response
    elif request.method == "GET":
        j = {"id": t.pk, "name": t.name, "note": t.note}
        return spit_json(request, j)
    elif request.method == "DELETE":
        t.delete()
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")
    allowed_keys = ("name", "note")
    response = HttpResponse(json.dumps({"error": "Method not allowed"}), content_type="application/json")
    response.status_code = 405
    return response
示例#13
0
文件: views.py 项目: unbit/uwsgi.it
def tags(request):
    customer = request.user.customer
    allowed_keys = ("name", "note")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        tag = Tag(customer=customer)
        for key in allowed_keys:
            if key in j:
                setattr(tag, key, j[key])
        try:
            tag.save()
            j = {"id": tag.pk, "name": tag.name, "note": tag.note}
            response = spit_json(request, j)
            response.status_code = 201
            response.reason_phrase = "Created"
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
        return response

    elif request.method == "GET":
        j = [{"id": t.pk, "name": t.name} for t in Tag.objects.filter(customer=customer)]
        return spit_json(request, j)
    response = HttpResponse(json.dumps({"error": "Method not allowed"}), content_type="application/json")
    response.status_code = 405
    return response
示例#14
0
文件: views.py 项目: taifu/uwsgi.it
def me(request):
    customer = request.user.customer
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        allowed_keys = ('vat', 'company')
        j = json.loads(request.read())
        for key in j:
            if key in allowed_keys:
                setattr(customer, key, j[key])
        if 'password' in j:
            customer.user.set_password(j['password'])
            customer.user.save()
        if 'email' in j:
            customer.user.email = j['email']
            customer.user.save()
        customer.save()
    c = {
        'email': customer.user.email,
        'vat': customer.vat,
        'company': customer.company,
        'uuid': customer.uuid,
        'containers': [cc.uid for cc in customer.container_set.all()],
        'servers': [s.address for s in customer.server_set.all()],
    }
    return spit_json(request, c)
示例#15
0
def custom_distros(request, id=None):
    customer = request.user.customer
    if not id:
        j = [{'id': d.pk, 'name': d.name, 'container': d.container.uid} for d in CustomDistro.objects.filter(container__customer=customer)]
        return spit_json(request, j)
    try:
        container = customer.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        if not container.custom_distros_storage:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        distro = CustomDistro(container=container) 
        allowed_fields = ('name', 'path', 'note')
        for field in allowed_fields:
            if field in j:
                setattr(distro, field, j[field])
        try:
            distro.full_clean()
            distro.save()
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
        response.status_code = 201
        return response
    j = [{'id': d.pk, 'name': d.name} for d in CustomDistro.objects.filter(container__server=container.server,container__customer=customer).exclude(container=container)]
    return spit_json(request, j)
示例#16
0
文件: views.py 项目: unbit/uwsgi.it
def loopbox(request, id):
    customer = request.user.customer
    try:
        loopbox = Loopbox.objects.get(pk=id, container__in=customer.container_set.all())
    except:
        return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        if "tags" in j:
            new_tags = []
            for tag in j["tags"]:
                try:
                    new_tags.append(Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            loopbox.tags = new_tags
        loopbox.save()
    elif request.method == "DELETE":
        loopbox.delete()
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")
    l = {
        "id": loopbox.pk,
        "container": loopbox.container.uid,
        "filename": loopbox.filename,
        "mountpoint": loopbox.mountpoint,
        "ro": loopbox.ro,
        "tags": [t.name for t in loopbox.tags.all()],
    }
    return spit_json(request, l)
示例#17
0
文件: views.py 项目: unbit/uwsgi.it
def custom_distro(request, id):
    customer = request.user.customer
    try:
        distro = CustomDistro.objects.get(pk=id, container__customer=customer)
    except:
        return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
    if request.method == "DELETE":
        distro.delete()
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        allowd_fields = ("name", "path", "note")
        for field in allowed_fields:
            if field in j:
                setattr(distro, field, j[field])
        distro.full_clean()
        distro.save()
    d = {
        "id": distro.pk,
        "container": distro.container.uid,
        "name": distro.name,
        "path": distro.path,
        "note": distro.note,
        "uuid": distro.uuid,
    }
    return spit_json(request, d)
示例#18
0
文件: views.py 项目: taifu/uwsgi.it
def loopbox(request, id):
    customer = request.user.customer
    try:
        loopbox = Loopbox.objects.get(pk=id, container__in=customer.container_set.all())
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        if 'tags' in j:
            new_tags = []
            for tag in j['tags']:
                try:
                    new_tags.append(Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            loopbox.tags = new_tags
        loopbox.save()
    elif request.method == 'DELETE':
        loopbox.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")
    l = {
        'id': loopbox.pk,
        'container': loopbox.container.uid,
        'filename': loopbox.filename,
        'mountpoint': loopbox.mountpoint,
        'ro': loopbox.ro,
        'tags': [t.name for t in loopbox.tags.all()]
    }
    return spit_json(request, l)
示例#19
0
文件: views.py 项目: taifu/uwsgi.it
def tags(request):
    customer = request.user.customer
    allowed_keys = ('name', 'note')
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        tag = Tag(customer=customer)
        for key in allowed_keys:
            if key in j:
                setattr(tag, key, j[key])
        try:
            tag.save()
            j = {'id': tag.pk, 'name': tag.name, 'note': tag.note}
            response = spit_json(request, j)
            response.status_code = 201
            response.reason_phrase = 'Created'
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
            response.status_code = 409
        return response

    elif request.method == 'GET':
        j = [{'id': t.pk, 'name': t.name} for t in Tag.objects.filter(customer=customer)]
        return spit_json(request, j)
    response = HttpResponse(json.dumps({'error': 'Method not allowed'}), content_type="application/json")
    response.status_code = 405
    return response
示例#20
0
文件: views.py 项目: unbit/uwsgi.it
def me(request):
    customer = request.user.customer
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        allowed_keys = ("vat", "company")
        j = json.loads(request.read())
        for key in j:
            if key in allowed_keys:
                setattr(customer, key, j[key])
        if "password" in j:
            customer.user.set_password(j["password"])
            customer.user.save()
        if "email" in j:
            customer.user.email = j["email"]
            customer.user.save()
        customer.save()
    c = {
        "email": customer.user.email,
        "vat": customer.vat,
        "company": customer.company,
        "uuid": customer.uuid,
        "containers": [cc.uid for cc in customer.container_set.all()],
        "servers": [s.address for s in customer.server_set.all()],
    }
    return spit_json(request, c)
示例#21
0
def custom_distro(request, id):
    customer = request.user.customer
    try:
        distro = CustomDistro.objects.get(pk=id, container__customer=customer)
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                     content_type="application/json")
    if request.method == 'DELETE':
        distro.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}),
                            content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        allowd_fields = ('name', 'path', 'note')
        for field in allowed_fields:
            if field in j:
                setattr(distro, field, j[field])
        distro.full_clean()
        distro.save()
    d = {
        'id': distro.pk,
        'container': distro.container.uid,
        'name': distro.name,
        'path': distro.path,
        'note': distro.note,
        'uuid': distro.uuid,
    }
    return spit_json(request, d)
示例#22
0
文件: views.py 项目: 20tab/uwsgi.it
def domains(request):
    customer = request.user.customer

    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        if Domain.objects.filter(name=j['name']):
            response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
            response.status_code = 409
            return response
        if dns_check(j['name'], customer.uuid):
            try:
                customer.domain_set.create(name=j['name'])
                response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
                response.status_code = 201
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
                response.status_code = 409
            return response
        else:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")

    elif request.method == 'DELETE':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        try:
            customer.domain_set.get(name=j['name']).delete()
        except Domain.DoesNotExist:
            return HttpResponseNotFound(json.dumps({'error': 'Not found'}), content_type="application/json")
        return HttpResponse(json.dumps({'message': 'Ok'}), content_type="application/json")

    elif request.method == 'GET':
        if 'tags' in request.GET:
            j = [{'id': d.pk, 'name': d.name, 'uuid': d.uuid, 'tags': [t.name for t in d.tags.all()]} for d in
                 customer.domain_set.filter(tags__name__in=request.GET['tags'].split(','))]
        else:
            j = [{'id': d.pk, 'name': d.name, 'uuid': d.uuid, 'tags': [t.name for t in d.tags.all()]} for d in
                 customer.domain_set.all()]
        return spit_json(request, j)

    response = HttpResponse(json.dumps({'error': 'Method not allowed'}), content_type="application/json")
    response.status_code = 405
    return response
示例#23
0
def domain(request, id):
    customer = request.user.customer
    try:
        domain = customer.domain_set.get(pk=id)
    except:
        return HttpResponseNotFound(json.dumps({'error': 'Not found'}),
                                    content_type="application/json")
    allowed_keys = ('note', )
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        for key in allowed_keys:
            if key in j:
                setattr(domain, key, j[key])
        if 'tags' in j:
            new_tags = []
            for tag in j['tags']:
                try:
                    new_tags.append(
                        Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            domain.tags = new_tags
        try:
            domain.save()
            j = {
                'id': domain.pk,
                'name': domain.name,
                'uuid': domain.uuid,
                'tags': [t.name for t in domain.tags.all()],
                'note': domain.note
            }
            return spit_json(request, j)
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
        return response
    elif request.method == 'DELETE':
        domain.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}),
                            content_type="application/json")

    elif request.method == 'GET':
        j = {
            'id': domain.pk,
            'name': domain.name,
            'uuid': domain.uuid,
            'tags': [t.name for t in domain.tags.all()],
            'note': domain.note
        }
        return spit_json(request, j)

    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#24
0
文件: views.py 项目: unbit/uwsgi.it
def loopboxes(request):
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        needed_keys = ("container", "filename", "mountpoint")
        for k in needed_keys:
            if not k in j.keys():
                return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        try:
            container = request.user.customer.container_set.get(pk=(int(j["container"]) - UWSGI_IT_BASE_UID))
        except:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        try:
            loopbox = Loopbox(container=container)
            loopbox.filename = j["filename"]
            loopbox.mountpoint = j["mountpoint"]
            if "ro" in j:
                loopbox.ro = j["ro"]
            loopbox.save()
            response = HttpResponse(json.dumps({"message": "Created"}), content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
            return response
    elif request.method == "GET":
        query = {}
        if "tags" in request.GET:
            query["tags__name__in"] = request.GET["tags"].split(",")
        if "container" in request.GET:
            try:
                query["container"] = request.user.customer.container_set.get(
                    pk=(int(request.GET["container"]) - UWSGI_IT_BASE_UID)
                )
            except:
                return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        else:
            query["container__in"] = request.user.customer.container_set.all()
        loopboxes = Loopbox.objects.filter(**query)
    else:
        loopboxes = Loopbox.objects.filter(container__in=request.user.customer.container_set.all())

    l = []
    for loopbox in loopboxes:
        ll = {
            "id": loopbox.pk,
            "container": loopbox.container.uid,
            "filename": loopbox.filename,
            "mountpoint": loopbox.mountpoint,
            "ro": loopbox.ro,
            "tags": [t.name for t in loopbox.tags.all()],
        }
        l.append(ll)
    return spit_json(request, l)
示例#25
0
文件: views.py 项目: taifu/uwsgi.it
def containers(request):
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        needed_keys = ('server', 'name', 'memory', 'storage')
        for k in needed_keys:
            if not k in j.keys():
                return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            server = Server.objects.get(address=j['server'])
            if server.owner != request.user.customer:
                return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            container = Container(customer=request.user.customer, server=server)
            container.name = j['name']
            container.memory = int(j['memory'])
            container.storage = int(j['storage'])
            container.save()
            response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
            response.status_code = 409
            return response
    elif (request.method == 'GET' and
         'tags' in request.GET):
            containers = request.user.customer.container_set.filter(tags__name__in=request.GET['tags'].split(','))
    else:
        containers = request.user.customer.container_set.all()

    c = []
    for container in containers:
        cc = {
            'uid': container.uid,
            'name': container.name,
            'hostname': container.hostname,
            'ip': str(container.ip),
            'memory': container.memory,
            'storage': container.storage,
            'uuid': container.uuid,
            'distro': None,
            'distro_name': None,
            'server': container.server.name,
            'server_address': container.server.address,
            'tags': [t.name for t in container.tags.all()]
        }
        if container.distro:
            cc['distro'] = container.distro.pk
            cc['distro_name'] = container.distro.name
        c.append(cc)

    return spit_json(request, c)
示例#26
0
文件: views.py 项目: taifu/uwsgi.it
def loopboxes(request):
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        needed_keys = ('container', 'filename', 'mountpoint')
        for k in needed_keys:
            if not k in j.keys():
                return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            container = request.user.customer.container_set.get(pk=(int(j['container']) - UWSGI_IT_BASE_UID))
        except:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        try:
            loopbox = Loopbox(container=container)
            loopbox.filename = j['filename']
            loopbox.mountpoint = j['mountpoint']
            if 'ro' in j:
                loopbox.ro = j['ro']
            loopbox.save()
            response = HttpResponse(json.dumps({'message': 'Created'}), content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
            response.status_code = 409
            return response
    elif request.method == 'GET':
        query = {}
        if 'tags' in request.GET:
            query['tags__name__in'] = request.GET['tags'].split(',')
        if 'container' in request.GET:
            try:
                query['container'] = request.user.customer.container_set.get(pk=(int(request.GET['container']) - UWSGI_IT_BASE_UID))
            except:
                return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        else:
            query['container__in'] = request.user.customer.container_set.all()
        loopboxes = Loopbox.objects.filter(**query)
    else:
        loopboxes = Loopbox.objects.filter(container__in=request.user.customer.container_set.all())

    l = []
    for loopbox in loopboxes:
        ll = {
            'id': loopbox.pk,
            'container': loopbox.container.uid,
            'filename': loopbox.filename,
            'mountpoint': loopbox.mountpoint,
            'ro': loopbox.ro,
            'tags': [t.name for t in loopbox.tags.all()]
        }
        l.append(ll)
    return spit_json(request, l)
示例#27
0
文件: views.py 项目: unbit/uwsgi.it
def domain(request, id):
    customer = request.user.customer
    try:
        domain = customer.domain_set.get(pk=id)
    except:
        return HttpResponseNotFound(json.dumps({"error": "Not found"}), content_type="application/json")
    allowed_keys = ("note",)
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        for key in allowed_keys:
            if key in j:
                setattr(domain, key, j[key])
        if "tags" in j:
            new_tags = []
            for tag in j["tags"]:
                try:
                    new_tags.append(Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            domain.tags = new_tags
        try:
            domain.save()
            j = {
                "id": domain.pk,
                "name": domain.name,
                "uuid": domain.uuid,
                "tags": [t.name for t in domain.tags.all()],
                "note": domain.note,
            }
            return spit_json(request, j)
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
        return response
    elif request.method == "DELETE":
        domain.delete()
        return HttpResponse(json.dumps({"message": "Ok"}), content_type="application/json")

    elif request.method == "GET":
        j = {
            "id": domain.pk,
            "name": domain.name,
            "uuid": domain.uuid,
            "tags": [t.name for t in domain.tags.all()],
            "note": domain.note,
        }
        return spit_json(request, j)

    response = HttpResponse(json.dumps({"error": "Method not allowed"}), content_type="application/json")
    response.status_code = 405
    return response
示例#28
0
def raise_alarm(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(pk=(int(id) -
                                                   UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                     content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        alarm = Alarm(container=container, level=1)
        if 'color' in request.GET:
            color = request.GET['color']
            if not color.startswith('#'):
                color = '#' + color
            alarm.color = color
        alarm._class = request.GET.get('class', None)
        alarm.vassal = request.GET.get('vassal', None)
        alarm.line = request.GET.get('line', None)
        alarm.func = request.GET.get('func', None)
        alarm.filename = request.GET.get('filename', None)
        # user alarm by default
        alarm.level = 1
        if 'level' in request.GET:
            alarm.level = int(request.GET['level'])
            if alarm.level < 1:
                return HttpResponseForbidden(json.dumps({'error':
                                                         'Forbidden'}),
                                             content_type="application/json")
        if 'unix' in request.GET:
            alarm.unix = datetime.datetime.fromtimestamp(
                int(request.GET['unix']))
        else:
            alarm.unix = datetime.datetime.now()
        alarm.msg = request.read()
        try:
            alarm.save()
            response = HttpResponse(json.dumps({'message': 'Created'}),
                                    content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
            return response
    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#29
0
def raise_alarm(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(
            pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                     content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        alarm = Alarm(container=container, level=1)
        if 'color' in request.GET:
            color = request.GET['color']
            if not color.startswith('#'):
                color = '#' + color
            alarm.color = color
        alarm._class = request.GET.get('class', None)
        alarm.vassal = request.GET.get('vassal', None)
        alarm.line = request.GET.get('line', None)
        alarm.func = request.GET.get('func', None)
        alarm.filename = request.GET.get('filename', None)
        # user alarm by default
        alarm.level = 1
        if 'level' in request.GET:
            alarm.level = int(request.GET['level'])
            if alarm.level < 1:
                return HttpResponseForbidden(
                    json.dumps({'error': 'Forbidden'}),
                    content_type="application/json")
        if 'unix' in request.GET:
            alarm.unix = datetime.datetime.fromtimestamp(
                int(request.GET['unix']))
        else:
            alarm.unix = datetime.datetime.now()
        alarm.msg = request.read()
        try:
            alarm.save()
            response = HttpResponse(json.dumps({'message': 'Created'}),
                                    content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
            return response
    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#30
0
def domain(request, id):
    customer = request.user.customer
    try:
        domain = customer.domain_set.get(pk=id)
    except:
        return HttpResponseNotFound(json.dumps({'error': 'Not found'}),
                                    content_type="application/json")
    allowed_keys = ('note',)
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        for key in allowed_keys:
            if key in j:
                setattr(domain, key, j[key])
        if 'tags' in j:
            new_tags = []
            for tag in j['tags']:
                try:
                    new_tags.append(
                        Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            domain.tags = new_tags
        try:
            domain.save()
            j = {'id': domain.pk, 'name': domain.name, 'uuid': domain.uuid,
                 'tags': [t.name for t in domain.tags.all()],
                 'note': domain.note}
            return spit_json(request, j)
        except:
            response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                    content_type="application/json")
            response.status_code = 409
        return response
    elif request.method == 'DELETE':
        domain.delete()
        return HttpResponse(json.dumps({'message': 'Ok'}),
                            content_type="application/json")

    elif request.method == 'GET':
        j = {'id': domain.pk, 'name': domain.name, 'uuid': domain.uuid,
             'tags': [t.name for t in domain.tags.all()],
             'note': domain.note}
        return spit_json(request, j)

    response = HttpResponse(json.dumps({'error': 'Method not allowed'}),
                            content_type="application/json")
    response.status_code = 405
    return response
示例#31
0
文件: views.py 项目: unbit/uwsgi.it
def raise_alarm(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        alarm = Alarm(container=container, level=1)
        if "color" in request.GET:
            color = request.GET["color"]
            if not color.startswith("#"):
                color = "#" + color
            alarm.color = color
        alarm._class = request.GET.get("class", None)
        alarm.vassal = request.GET.get("vassal", None)
        alarm.line = request.GET.get("line", None)
        alarm.func = request.GET.get("func", None)
        alarm.filename = request.GET.get("filename", None)
        # user alarm by default
        alarm.level = 1
        if "level" in request.GET:
            alarm.level = int(request.GET["level"])
            if alarm.level < 1:
                return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        if "unix" in request.GET:
            alarm.unix = datetime.datetime.fromtimestamp(int(request.GET["unix"]))
        else:
            alarm.unix = datetime.datetime.now()
        alarm.msg = request.read()
        try:
            alarm.save()
            response = HttpResponse(json.dumps({"message": "Created"}), content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
            return response
    response = HttpResponse(json.dumps({"error": "Method not allowed"}), content_type="application/json")
    response.status_code = 405
    return response
示例#32
0
def private_alarms(request, id):
    server = Server.objects.get(address=request.META['REMOTE_ADDR'])
    container = server.container_set.get(pk=(int(id)-UWSGI_IT_BASE_UID))
    if request.method != 'POST':
        response = HttpResponse('Method not allowed\n')
        response.status_code = 405
        return response
    response = check_body(request)
    if response: return response
    msg = request.read()
    if 'unix' in request.GET:
        d = datetime.datetime.fromtimestamp(int(request.GET['unix']))
    else:
        d = datetime.datetime.now()
    alarm = Alarm(container=container,unix=d)
    # system
    alarm.level = 0
    alarm.msg = msg
    alarm.save()
    response = HttpResponse('Created\n')
    response.status_code = 201
    return response
示例#33
0
def private_server_file_metadata(request):
    try:
        server = Server.objects.get(address=request.META['REMOTE_ADDR'])
        if request.method == 'POST':
            response = check_body(request)
            if response: return response
            j = json.loads(request.read())
            metadata = ServerFileMetadata.objects.get(filename=j['file'])
            sm, created = ServerMetadata.objects.get_or_create(server=server, metadata=metadata)
            sm.value = j['value']
            sm.save()
            response = HttpResponse('Created\n')
            response.status_code = 201
            return response
        files = []
        for _file in ServerFileMetadata.objects.all():
            files.append(_file.filename)
        return spit_json(request, files)
    except:
        import sys
        print sys.exc_info()
        return HttpResponseForbidden('Forbidden\n')
示例#34
0
def private_alarms(request, id):
    server = Server.objects.get(address=request.META['REMOTE_ADDR'])
    container = server.container_set.get(pk=(int(id)-UWSGI_IT_BASE_UID))
    if request.method != 'POST':
        response = HttpResponse('Method not allowed\n')
        response.status_code = 405
        return response
    response = check_body(request)
    if response: return response
    msg = request.read()
    if 'unix' in request.GET:
        d = datetime.datetime.fromtimestamp(int(request.GET['unix']))
    else:
        d = datetime.datetime.now()
    alarm = Alarm(container=container,unix=d)
    # system
    alarm.level = 0
    alarm.msg = msg
    alarm.save()
    response = HttpResponse('Created\n')
    response.status_code = 201
    return response
示例#35
0
def private_server_file_metadata(request):
    try:
        server = Server.objects.get(address=request.META['REMOTE_ADDR'])
        if request.method == 'POST':
            response = check_body(request)
            if response: return response
            j = json.loads(request.read())
            metadata = ServerFileMetadata.objects.get(filename=j['file'])
            sm, created = ServerMetadata.objects.get_or_create(server=server, metadata=metadata)
            sm.value = j['value']
            sm.save()
            response = HttpResponse('Created\n')
            response.status_code = 201
            return response
        files = []
        for _file in ServerFileMetadata.objects.all():
            files.append(_file.filename)
        return spit_json(request, files)
    except:
        import sys
        print sys.exc_info()
        return HttpResponseForbidden('Forbidden\n')
示例#36
0
def private_metrics_container_do(request, id, metric):
    server = Server.objects.get(address=request.META['REMOTE_ADDR'])
    container = server.container_set.get(pk=(int(id)-UWSGI_IT_BASE_UID))

    if request.method == 'POST':
        response = check_body(request)
        if response: return response
        j = json.loads(request.read())
        d = datetime.datetime.fromtimestamp(int(j['unix']))
        try:
            m = metric.objects.get(container=container,year=d.year,month=d.month,day=d.day)
        except:
            m = metric(container=container,year=d.year,month=d.month,day=d.day,json='[]')
        m_json = json.loads(m.json)
        m_json.append( [int(j['unix']), long(j['value'])])
        m.json = json.dumps(m_json)
        m.save()
        response = HttpResponse('Created\n')
        response.status_code = 201
    else:
        response = HttpResponse('Method not allowed\n')
        response.status_code = 405
    return response
示例#37
0
文件: views.py 项目: unbit/uwsgi.it
def container(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        allowed_keys = (
            "name",
            "note",
            "quota_threshold",
            "jid",
            "jid_secret",
            "jid_destinations",
            "nofollow",
            "pushover_user",
            "pushover_token",
            "pushover_sound",
            "alarm_freq",
            "pushbullet_token",
            "slack_webhook",
            "custom_distros_storage",
        )

        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        for key in j:
            if key in allowed_keys:
                setattr(container, key, j[key])
        if "ssh_keys" in j:
            container.ssh_keys_raw = "\n".join(j["ssh_keys"])
            container.ssh_keys_mtime = datetime.datetime.now()
        if "distro" in j:
            container.distro = Distro.objects.get(pk=j["distro"])
        if "custom_distro" in j:
            container.custom_distro = CustomDistro.objects.filter(
                pk=j["custom_distro"], container__server=container.server, container__customer=customer
            ).exclude(container=container)[0]
        if "memory" in j:
            if container.server.owner == customer:
                container.memory = int(j["memory"])
        if "storage" in j:
            if container.server.owner == customer:
                container.storage = int(j["storage"])
        if "tags" in j:
            new_tags = []
            for tag in j["tags"]:
                try:
                    new_tags.append(Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            container.tags = new_tags
        # linking and unlinking requires reboot
        if "link" in j:
            try:
                link = ContainerLink()
                link.container = container
                link.to = Container.objects.get(pk=(int(j["link"]) - UWSGI_IT_BASE_UID))
                link.full_clean()
                link.save()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
                response.status_code = 409
                return response
        if "unlink" in j:
            try:
                link = container.containerlink_set.get(to=(int(j["unlink"]) - UWSGI_IT_BASE_UID))
                link.delete()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
                response.status_code = 409
                return response
        if "reboot" in j:
            container.last_reboot = datetime.datetime.now()
        container.full_clean()
        container.save()
    c = {
        "uid": container.uid,
        "name": container.name,
        "hostname": container.hostname,
        "ip": str(container.ip),
        "memory": container.memory,
        "storage": container.storage,
        "uuid": container.uuid,
        "distro": None,
        "distro_name": None,
        "server": container.server.name,
        "server_address": container.server.address,
        "jid": container.jid,
        "jid_destinations": container.jid_destinations,
        "pushover_user": container.pushover_user,
        "pushover_token": container.pushover_token,
        "pushover_sound": container.pushover_sound,
        "pushbullet_token": container.pushbullet_token,
        "slack_webhook": container.slack_webhook,
        "alarm_freq": container.alarm_freq,
        "quota_threshold": container.quota_threshold,
        "nofollow": container.nofollow,
        "note": container.note,
        "linked_to": container.linked_to,
        "custom_distros_storage": container.custom_distros_storage,
        "custom_distro": None,
        "secret_uuid": container.secret_uuid,
        "ssh_keys": container.ssh_keys,
        "tags": [t.name for t in container.tags.all()],
        "legion_address": [l.address for l in container.server.legion_set.all()],
    }
    if container.distro:
        c["distro"] = container.distro.pk
        c["distro_name"] = container.distro.name
    if container.custom_distro:
        c["custom_distro"] = container.custom_distro.pk
        c["custom_distro_name"] = container.custom_distro.name
    return spit_json(request, c)
示例#38
0
文件: views.py 项目: taifu/uwsgi.it
def container(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(pk=(int(id) - UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        allowed_keys = ('name', 'note', 'quota_threshold', 'jid', 'jid_secret', 'jid_destinations', 'nofollow')
        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}), content_type="application/json")
        for key in j:
            if key in allowed_keys:
                setattr(container, key, j[key])
        if 'ssh_keys' in j:
            container.ssh_keys_raw = '\n'.join(j['ssh_keys'])
            container.ssh_keys_mtime = datetime.datetime.now()
        if 'distro' in j:
            container.distro = Distro.objects.get(pk=j['distro'])
        if 'memory' in j:
            if container.server.owner == customer:
                container.memory = int(j['memory'])
        if 'storage' in j:
            if container.server.owner == customer:
                container.storage = int(j['storage'])
        if 'tags' in j:
            new_tags = []
            for tag in j['tags']:
                try:
                    new_tags.append(Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            container.tags = new_tags
        # linking and unlinking requires reboot
        if 'link' in j:
            try:
                link = ContainerLink()
                link.container = container
                link.to = Container.objects.get(pk=(int(j['link']) - UWSGI_IT_BASE_UID))
                link.full_clean()
                link.save()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
                response.status_code = 409
                return response
        if 'unlink' in j:
            try:
                link = container.containerlink_set.get(to=(int(j['unlink']) - UWSGI_IT_BASE_UID))
                link.delete()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}), content_type="application/json")
                response.status_code = 409
                return response
        if 'reboot' in j:
            container.last_reboot = datetime.datetime.now()
        container.save()
    c = {
        'uid': container.uid,
        'name': container.name,
        'hostname': container.hostname,
        'ip': str(container.ip),
        'memory': container.memory,
        'storage': container.storage,
        'uuid': container.uuid,
        'distro': None,
        'distro_name': None,
        'server': container.server.name,
        'server_address': container.server.address,
        'jid': container.jid,
        'jid_destinations': container.jid_destinations,
        'quota_threshold': container.quota_threshold,
        'nofollow': container.nofollow,
        'note': container.note,
        'linked_to': container.linked_to,
        'ssh_keys': container.ssh_keys,
        'tags': [t.name for t in container.tags.all()],
        'legion_address': [l.address for l in container.server.legion_set.all()]
    }
    if container.distro:
        c['distro'] = container.distro.pk
        c['distro_name'] = container.distro.name
    return spit_json(request, c)
示例#39
0
def container(request, id):
    customer = request.user.customer
    try:
        container = customer.container_set.get(pk=(int(id) -
                                                   UWSGI_IT_BASE_UID))
    except:
        return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                     content_type="application/json")
    if request.method == 'POST':
        response = check_body(request)
        if response:
            return response
        allowed_keys = (
            'name',
            'note',
            'quota_threshold',
            'jid',
            'jid_secret',
            'jid_destinations',
            'nofollow',
            'pushover_user',
            'pushover_token',
            'pushover_sound',
            'alarm_freq',
        )

        j = json.loads(request.read())
        if not j:
            return HttpResponseForbidden(json.dumps({'error': 'Forbidden'}),
                                         content_type="application/json")
        for key in j:
            if key in allowed_keys:
                setattr(container, key, j[key])
        if 'ssh_keys' in j:
            container.ssh_keys_raw = '\n'.join(j['ssh_keys'])
            container.ssh_keys_mtime = datetime.datetime.now()
        if 'distro' in j:
            container.distro = Distro.objects.get(pk=j['distro'])
        if 'memory' in j:
            if container.server.owner == customer:
                container.memory = int(j['memory'])
        if 'storage' in j:
            if container.server.owner == customer:
                container.storage = int(j['storage'])
        if 'tags' in j:
            new_tags = []
            for tag in j['tags']:
                try:
                    new_tags.append(
                        Tag.objects.get(customer=customer, name=tag))
                except:
                    pass
            container.tags = new_tags
        # linking and unlinking requires reboot
        if 'link' in j:
            try:
                link = ContainerLink()
                link.container = container
                link.to = Container.objects.get(pk=(int(j['link']) -
                                                    UWSGI_IT_BASE_UID))
                link.full_clean()
                link.save()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                        content_type="application/json")
                response.status_code = 409
                return response
        if 'unlink' in j:
            try:
                link = container.containerlink_set.get(to=(int(j['unlink']) -
                                                           UWSGI_IT_BASE_UID))
                link.delete()
                container.last_reboot = datetime.datetime.now()
            except:
                response = HttpResponse(json.dumps({'error': 'Conflict'}),
                                        content_type="application/json")
                response.status_code = 409
                return response
        if 'reboot' in j:
            container.last_reboot = datetime.datetime.now()
        container.full_clean()
        container.save()
    c = {
        'uid': container.uid,
        'name': container.name,
        'hostname': container.hostname,
        'ip': str(container.ip),
        'memory': container.memory,
        'storage': container.storage,
        'uuid': container.uuid,
        'distro': None,
        'distro_name': None,
        'server': container.server.name,
        'server_address': container.server.address,
        'jid': container.jid,
        'jid_destinations': container.jid_destinations,
        'pushover_user': container.pushover_user,
        'pushover_token': container.pushover_token,
        'pushover_sound': container.pushover_sound,
        'alarm_freq': container.alarm_freq,
        'quota_threshold': container.quota_threshold,
        'nofollow': container.nofollow,
        'note': container.note,
        'linked_to': container.linked_to,
        'ssh_keys': container.ssh_keys,
        'tags': [t.name for t in container.tags.all()],
        'legion_address':
        [l.address for l in container.server.legion_set.all()]
    }
    if container.distro:
        c['distro'] = container.distro.pk
        c['distro_name'] = container.distro.name
    return spit_json(request, c)
示例#40
0
文件: views.py 项目: unbit/uwsgi.it
def containers(request):
    if request.method == "POST":
        response = check_body(request)
        if response:
            return response
        j = json.loads(request.read())
        needed_keys = ("server", "name", "memory", "storage")
        for k in needed_keys:
            if not k in j.keys():
                return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        try:
            server = Server.objects.get(address=j["server"])
            if server.owner != request.user.customer:
                return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        except:
            return HttpResponseForbidden(json.dumps({"error": "Forbidden"}), content_type="application/json")
        if int(j["memory"]) > server.free_memory or int(j["memory"]) <= 0:
            return HttpResponse(
                json.dumps({"error": "Conflict", "reason": "not enough memory"}), content_type="application/json"
            )
        if int(j["storage"]) > server.free_storage or int(j["storage"]) <= 0:
            return HttpResponse(
                json.dumps({"error": "Conflict", "reason": "not enough storage"}), content_type="application/json"
            )
        try:
            container = Container(customer=request.user.customer, server=server)
            container.name = j["name"]
            container.memory = int(j["memory"])
            container.storage = int(j["storage"])
            container.save()
            response = HttpResponse(json.dumps({"message": "Created"}), content_type="application/json")
            response.status_code = 201
            return response
        except:
            response = HttpResponse(json.dumps({"error": "Conflict"}), content_type="application/json")
            response.status_code = 409
            return response
    elif request.method == "GET" and "tags" in request.GET:
        containers = request.user.customer.container_set.filter(tags__name__in=request.GET["tags"].split(","))
    else:
        containers = request.user.customer.container_set.all()

    c = []
    for container in containers:
        cc = {
            "uid": container.uid,
            "name": container.name,
            "hostname": container.hostname,
            "ip": str(container.ip),
            "memory": container.memory,
            "storage": container.storage,
            "uuid": container.uuid,
            "distro": None,
            "distro_name": None,
            "custom_distro": None,
            "custom_distro_name": None,
            "server": container.server.name,
            "server_address": container.server.address,
            "tags": [t.name for t in container.tags.all()],
        }
        if container.distro:
            cc["distro"] = container.distro.pk
            cc["distro_name"] = container.distro.name
        if container.custom_distro:
            cc["custom_distro"] = container.custom_distro.pk
            cc["custom_distro_name"] = container.custom_distro.name
        c.append(cc)

    return spit_json(request, c)