forked from uncloud/uncloud
[vpn] update to show reservations, create wireguard config
This commit is contained in:
parent
85b4d70592
commit
ff133e81b7
7 changed files with 75 additions and 19 deletions
|
|
@ -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 (?)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue