VPN Invite list view/delete

This commit is contained in:
Eduardo Silva
2025-02-27 13:24:09 -03:00
parent 07b7a24c40
commit aea86c3a82
6 changed files with 118 additions and 8 deletions

View File

@@ -1,3 +1,12 @@
from django.contrib import admin
from .models import InviteSettings, PeerInvite
# Register your models here.
class PeerInviteAdmin(admin.ModelAdmin):
list_display = ('peer', 'invite_expiration', 'created', 'updated', 'uuid')
admin.site.register(PeerInvite, PeerInviteAdmin)
class InviteSettingsAdmin(admin.ModelAdmin):
list_display = ('name', 'uuid', 'created', 'updated')
admin.site.register(InviteSettings, InviteSettingsAdmin)

View File

@@ -7,6 +7,9 @@ class InviteSettings(models.Model):
name = models.CharField(max_length=16, default='default_settings', unique=True)
default_password = models.CharField(max_length=32, default='', blank=True, null=True)
enforce_random_password = models.BooleanField(default=True)
required_user_level = models.PositiveIntegerField(default=50, choices=(
(20, 'View Only User'), (30, 'Peer Manager'), (40, 'Wireguard Manager'), (50, 'Administrator'),
))
random_password_length = models.IntegerField(default=6)
random_password_complexity = models.CharField(
max_length=22, default='letters_digits', choices=(
@@ -38,11 +41,14 @@ class InviteSettings(models.Model):
download_instructions = models.TextField(default='Download the WireGuard app for your device using one of the links below. After installation, you can scan the QR code or download the configuration file to import on your device.')
invite_url = models.URLField(default='')
invite_text_body = models.TextField(default='Here is your WireGuard VPN invite link: {invite_url}. The link expires in {expire_minutes} minutes.')
invite_email_subject = models.CharField(max_length=64, default='WireGuard VPN Invite', blank=True, null=True)
invite_email_body = models.TextField(default='Here is your WireGuard VPN invite link: {invite_url}', blank=True, null=True)
invite_email_body = models.TextField(default='Here is your WireGuard VPN invite link: {invite_url}. The link expires in {expire_minutes} minutes.')
invite_email_enabled = models.BooleanField(default=True)
invite_whatsapp_body = models.TextField(default='Here is your WireGuard VPN invite link: {invite_url}', blank=True, null=True)
invite_whatsapp_body = models.TextField(default='Here is your WireGuard VPN invite link: {invite_url}. The link expires in {expire_minutes} minutes.')
invite_whatsapp_enabled = models.BooleanField(default=True)
uuid = models.UUIDField(default=uuid.uuid4, editable=False)

View File

@@ -1,3 +1,40 @@
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from user_manager.models import UserAcl
from .models import InviteSettings, PeerInvite
from django.conf import settings
from django.utils import timezone
# Create your views here.
@login_required
def view_vpn_invite_settings(request):
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
if request.GET.get('invite') and request.GET.get('action') == 'delete':
PeerInvite.objects.filter(uuid=request.GET.get('invite')).delete()
return redirect('/vpn_invite/')
try:
default_invite_url = f'{settings.CSRF_TRUSTED_ORIGINS[1]}/invite/'
except:
default_invite_url = 'https://wireguard-webadmin.example.com/invite/'
invite_settings, _ = InviteSettings.objects.get_or_create(
name='default_settings', defaults={'invite_url': default_invite_url,}
)
if invite_settings.invite_url.startswith('http://'):
invite_settings.invite_url = invite_settings.invite_url.replace('http://', 'https://')
invite_settings.save()
peer_invite_list = PeerInvite.objects.all().order_by('invite_expiration')
peer_invite_list.filter(invite_expiration__lt=timezone.now()).delete()
data = {
'page_title': 'VPN Invite',
'peer_invite_list': peer_invite_list,
}
return render(request, 'vpn_invite/invite_settings.html', context=data)