++vpn network

This commit is contained in:
Nico Schottelius 2020-12-13 13:28:43 +01:00
commit cf948b03a8
7 changed files with 65 additions and 62 deletions

View file

@ -1,59 +1,35 @@
from django.db import transaction
from .models import *
from .selectors import *
@transaction.atomic
def create_vpn(*,
def create_wireguard_vpn(*,
public_key: str,
network_size: int
) -> VPNNetwork:
network_mask: int
) -> WireGuardVPN:
# Select suitable pool
pools = VPNPool.objects.filter(subnetwork_size=network_size)
pool = get_suitable_pool(network_mask)[0]
# FIXME: exception - which?
if not pools:
return None
# last_net = ipaddress.ip_network(self.used_networks.last().address)
# last_net_ip = last_net[0]
# Find all pools with the correct size
# if last_net_ip.version == 6:
# offset_to_next = 2**(128 - self.subnetwork_size)
# elif last_net_ip.version == 4:
# offset_to_next = 2**(32 - self.subnetwork_size)
# For each pool see if it has still space:
# num network reversations < 2**(subnetwork_size-network_size)
# next_net_ip = last_net_ip + offset_to_next
def next_free_network(self):
if self.num_free_networks == 0:
# FIXME: use right exception
raise Exception("No free networks")
if len(self.free_networks) > 0:
return self.free_networks[0].address
if len(self.used_networks) > 0:
"""
sample:
pool = 2a0a:e5c1:200::/40
last_used = 2a0a:e5c1:204::/48
next:
"""
last_net = ipaddress.ip_network(self.used_networks.last().address)
last_net_ip = last_net[0]
if last_net_ip.version == 6:
offset_to_next = 2**(128 - self.subnetwork_size)
elif last_net_ip.version == 4:
offset_to_next = 2**(32 - self.subnetwork_size)
next_net_ip = last_net_ip + offset_to_next
return str(next_net_ip)
else:
# first network to be created
return self.network
# return str(next_net_ip)
# else:
# # first network to be created
# return self.network
@property
def wireguard_config_filename(self):