phase in vpn

Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
This commit is contained in:
Nico Schottelius 2020-04-03 19:27:49 +02:00
commit 5d084a5716
11 changed files with 190 additions and 116 deletions

View file

@ -0,0 +1,63 @@
# Generated by Django 3.0.5 on 2020-04-03 17:27
from django.conf import settings
import django.contrib.postgres.fields.jsonb
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('uncloud_pay', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='MACAdress',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='VPNPool',
fields=[
('extra_data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, editable=False, null=True)),
('network', models.GenericIPAddressField(editable=False, primary_key=True, serialize=False)),
('network_size', models.IntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(128)])),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='VPNProduct',
fields=[
('extra_data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, editable=False, null=True)),
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('status', models.CharField(choices=[('PENDING', 'Pending'), ('AWAITING_PAYMENT', 'Awaiting payment'), ('BEING_CREATED', 'Being created'), ('SCHEDULED', 'Scheduled'), ('ACTIVE', 'Active'), ('MODIFYING', 'Modifying'), ('DELETED', 'Deleted'), ('DISABLED', 'Disabled'), ('UNUSABLE', 'Unusable')], default='PENDING', max_length=32)),
('network', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uncloud_net.VPNPool')),
('order', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.Order')),
('owner', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='VPNNetwork',
fields=[
('extra_data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, editable=False, null=True)),
('network', models.GenericIPAddressField(editable=False, primary_key=True, serialize=False)),
('vpnpool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uncloud_net.VPNPool')),
],
options={
'abstract': False,
},
),
]

View file

@ -1,4 +1,36 @@
from django.db import models
from django.contrib.auth import get_user_model
from django.core.validators import MinValueValidator, MaxValueValidator
from uncloud_pay.models import Product, RecurringPeriod
from uncloud.models import UncloudModel, UncloudStatus
class VPNPool(UncloudModel):
"""
Network address pools from which VPNs can be created
"""
network = models.GenericIPAddressField(primary_key=True,
editable=False)
network_size = models.IntegerField(validators=[MinValueValidator(0),
MaxValueValidator(128)])
class VPNNetwork(UncloudModel):
"""
A selected network. Used for tracking reservations / used networks
"""
vpnpool = models.ForeignKey(VPNPool,
on_delete=models.CASCADE)
network = models.GenericIPAddressField(primary_key=True,
editable=False)
class VPNProduct(Product):
network = models.ForeignKey(VPNPool,
on_delete=models.CASCADE)
class MACAdress(models.Model):
prefix = 0x420000000000
default_prefix = 0x420000000000

View file

@ -0,0 +1,13 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers
from .models import *
class VPNProductSerializer(serializers.ModelSerializer):
network_size = serializers.IntegerField(min_value=0,
max_value=128)
class Meta:
model = VPNProduct
fields = '__all__'

View file

@ -1,3 +1,19 @@
from django.shortcuts import render
from rest_framework import viewsets, permissions
# Create your views here.
from .models import *
from .serializers import *
class VPNProductViewSet(viewsets.ModelViewSet):
serializer_class = VPNProductSerializer
permission_classes = [permissions.IsAdminUser]
def get_queryset(self):
if self.request.user.is_superuser:
obj = VPNProduct.objects.all()
else:
obj = VPNProduct.objects.filter(owner=self.request.user)
return obj