[vpn] update to show reservations, create wireguard config

This commit is contained in:
Nico Schottelius 2020-04-12 22:55:22 +02:00
commit ff133e81b7
7 changed files with 75 additions and 19 deletions

View file

@ -114,15 +114,20 @@ PrivateKey = {privatekey}
peers = []
for vpnnetwork in self.vpnnetworkreservation_set:
public_key = vpnnetwork.wireguard_public_key
peer_network = "{}/{}".format(vpnnetwork.address, self.subnetwork_size)
for reservation in self.vpnnetworkreservation_set.filter(status='used'):
public_key = reservation.vpnnetwork_set.first().wireguard_public_key
peer_network = "{}/{}".format(reservation.address, self.subnetwork_size)
owner = reservation.vpnnetwork_set.first().owner
peers.append("""
# Owner: {owner}
[Peer]
PublicKey = {public_key}
AllowedIPs = {peer_network}
""")
""".format(
owner=owner,
public_key=public_key,
peer_network=peer_network))
wireguard_config.extend(peers)
@ -140,9 +145,6 @@ AllowedIPs = {peer_network}
pass
class VPNNetworkReservation(UncloudModel):
"""
This class tracks the used VPN networks. It will be deleted, when the product is cancelled.
@ -170,3 +172,12 @@ class VPNNetwork(Product):
editable=False)
wireguard_public_key = models.CharField(max_length=48)
def delete(self, *args, **kwargs):
self.network.status = 'free'
self.network.save()
super().save(*args, **kwargs)
print("deleted {}".format(self))
# managing deletion
# - record free network (?)

View file

@ -11,6 +11,12 @@ class VPNPoolSerializer(serializers.ModelSerializer):
model = VPNPool
fields = '__all__'
class VPNNetworkReservationSerializer(serializers.ModelSerializer):
class Meta:
model = VPNNetworkReservation
fields = '__all__'
class VPNNetworkSerializer(serializers.ModelSerializer):
class Meta:
model = VPNNetwork
@ -29,7 +35,6 @@ class VPNNetworkSerializer(serializers.ModelSerializer):
i.e. contains \n or similar!
We might even need to be more strict to not break wireguard...
"""
print(value)
try:
base64.standard_b64decode(value)

View file

@ -13,6 +13,11 @@ class VPNPoolViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAdminUser]
queryset = VPNPool.objects.all()
class VPNNetworkReservationViewSet(viewsets.ModelViewSet):
serializer_class = VPNNetworkReservationSerializer
permission_classes = [permissions.IsAdminUser]
queryset = VPNNetworkReservation.objects.all()
class VPNNetworkViewSet(viewsets.ModelViewSet):
serializer_class = VPNNetworkSerializer