mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2025-08-26 13:21:14 +00:00
VPN Invite list view/delete
This commit is contained in:
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
Reference in New Issue
Block a user