mirror of
				https://github.com/eduardogsilva/wireguard_webadmin.git
				synced 2025-11-04 11:56:17 +00:00 
			
		
		
		
	VPN Invite first commit
This commit is contained in:
		
							
								
								
									
										0
									
								
								vpn_invite/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vpn_invite/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								vpn_invite/admin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vpn_invite/admin.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					from django.contrib import admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Register your models here.
 | 
				
			||||||
							
								
								
									
										6
									
								
								vpn_invite/apps.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vpn_invite/apps.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					from django.apps import AppConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VpnInviteConfig(AppConfig):
 | 
				
			||||||
 | 
					    default_auto_field = 'django.db.models.BigAutoField'
 | 
				
			||||||
 | 
					    name = 'vpn_invite'
 | 
				
			||||||
							
								
								
									
										71
									
								
								vpn_invite/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								vpn_invite/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					# Generated by Django 5.1.5 on 2025-02-27 13:49
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import django.db.models.deletion
 | 
				
			||||||
 | 
					import uuid
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    initial = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('wireguard', '0027_alter_wireguardinstance_peer_list_refresh_interval'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.CreateModel(
 | 
				
			||||||
 | 
					            name='InviteSettings',
 | 
				
			||||||
 | 
					            fields=[
 | 
				
			||||||
 | 
					                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
				
			||||||
 | 
					                ('name', models.CharField(default='default_settings', max_length=16, unique=True)),
 | 
				
			||||||
 | 
					                ('default_password', models.CharField(blank=True, default='', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('enforce_random_password', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('random_password_length', models.IntegerField(default=6)),
 | 
				
			||||||
 | 
					                ('random_password_complexity', models.CharField(choices=[('letters_digits_special', 'Letters, Digits, Special Characters'), ('letters_digits', 'Letters, Digits'), ('letters', 'Letters'), ('digits', 'Digits')], default='letters_digits', max_length=22)),
 | 
				
			||||||
 | 
					                ('invite_expiration', models.IntegerField(default=30)),
 | 
				
			||||||
 | 
					                ('download_1_label', models.CharField(blank=True, default='iPhone', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_2_label', models.CharField(blank=True, default='Android', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_3_label', models.CharField(blank=True, default='Windows', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_4_label', models.CharField(blank=True, default='macOS', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_5_label', models.CharField(blank=True, default='Desktop', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_1_icon', models.CharField(blank=True, default='fab fa-app-store-ios', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_2_icon', models.CharField(blank=True, default='fab fa-google-play', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_3_icon', models.CharField(blank=True, default='fab fa-windows', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_4_icon', models.CharField(blank=True, default='fab fa-apple', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_5_icon', models.CharField(blank=True, default='fas fa-desktop', max_length=32, null=True)),
 | 
				
			||||||
 | 
					                ('download_1_url', models.URLField(blank=True, default='https://apps.apple.com/us/app/wireguard/id1441195209', null=True)),
 | 
				
			||||||
 | 
					                ('download_2_url', models.URLField(blank=True, default='https://play.google.com/store/apps/details?id=com.wireguard.android', null=True)),
 | 
				
			||||||
 | 
					                ('download_3_url', models.URLField(blank=True, default='https://download.wireguard.com/windows-client/wireguard-installer.exe', null=True)),
 | 
				
			||||||
 | 
					                ('download_4_url', models.URLField(blank=True, default='https://apps.apple.com/us/app/wireguard/id1451685025', null=True)),
 | 
				
			||||||
 | 
					                ('download_5_url', models.URLField(blank=True, default='https://www.wireguard.com/install/', null=True)),
 | 
				
			||||||
 | 
					                ('download_1_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('download_2_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('download_3_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('download_4_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('download_5_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('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_email_subject', models.CharField(blank=True, default='WireGuard VPN Invite', max_length=64, null=True)),
 | 
				
			||||||
 | 
					                ('invite_email_body', models.TextField(blank=True, default='Here is your WireGuard VPN invite link: {invite_url}', null=True)),
 | 
				
			||||||
 | 
					                ('invite_email_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('invite_whatsapp_body', models.TextField(blank=True, default='Here is your WireGuard VPN invite link: {invite_url}', null=True)),
 | 
				
			||||||
 | 
					                ('invite_whatsapp_enabled', models.BooleanField(default=True)),
 | 
				
			||||||
 | 
					                ('uuid', models.UUIDField(default=uuid.uuid4, editable=False)),
 | 
				
			||||||
 | 
					                ('created', models.DateTimeField(auto_now_add=True)),
 | 
				
			||||||
 | 
					                ('updated', models.DateTimeField(auto_now=True)),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        migrations.CreateModel(
 | 
				
			||||||
 | 
					            name='PeerInvite',
 | 
				
			||||||
 | 
					            fields=[
 | 
				
			||||||
 | 
					                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
				
			||||||
 | 
					                ('invite_password', models.CharField(default='', max_length=32)),
 | 
				
			||||||
 | 
					                ('invite_expiration', models.DateTimeField()),
 | 
				
			||||||
 | 
					                ('uuid', models.UUIDField(default=uuid.uuid4, editable=False)),
 | 
				
			||||||
 | 
					                ('created', models.DateTimeField(auto_now_add=True)),
 | 
				
			||||||
 | 
					                ('updated', models.DateTimeField(auto_now=True)),
 | 
				
			||||||
 | 
					                ('peer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wireguard.peer')),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
							
								
								
									
										0
									
								
								vpn_invite/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vpn_invite/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										60
									
								
								vpn_invite/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vpn_invite/models.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					from django.db import models
 | 
				
			||||||
 | 
					from wireguard.models import Peer
 | 
				
			||||||
 | 
					import uuid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					    random_password_length = models.IntegerField(default=6)
 | 
				
			||||||
 | 
					    random_password_complexity = models.CharField(
 | 
				
			||||||
 | 
					        max_length=22, default='letters_digits', choices=(
 | 
				
			||||||
 | 
					            ('letters_digits_special', 'Letters, Digits, Special Characters'),
 | 
				
			||||||
 | 
					            ('letters_digits', 'Letters, Digits'), ('letters', 'Letters'), ('digits', 'Digits')
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    invite_expiration = models.IntegerField(default=30) # minutes
 | 
				
			||||||
 | 
					    download_1_label = models.CharField(max_length=32, default='iPhone', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_2_label = models.CharField(max_length=32, default='Android', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_3_label = models.CharField(max_length=32, default='Windows', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_4_label = models.CharField(max_length=32, default='macOS', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_5_label = models.CharField(max_length=32, default='Desktop', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_1_icon = models.CharField(max_length=32, default='fab fa-app-store-ios', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_2_icon = models.CharField(max_length=32, default='fab fa-google-play', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_3_icon = models.CharField(max_length=32, default='fab fa-windows', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_4_icon = models.CharField(max_length=32, default='fab fa-apple', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_5_icon = models.CharField(max_length=32, default='fas fa-desktop', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_1_url = models.URLField(default='https://apps.apple.com/us/app/wireguard/id1441195209', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_2_url = models.URLField(default='https://play.google.com/store/apps/details?id=com.wireguard.android', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_3_url = models.URLField(default='https://download.wireguard.com/windows-client/wireguard-installer.exe', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_4_url = models.URLField(default='https://apps.apple.com/us/app/wireguard/id1451685025', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_5_url = models.URLField(default='https://www.wireguard.com/install/', blank=True, null=True)
 | 
				
			||||||
 | 
					    download_1_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					    download_2_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					    download_3_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					    download_4_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					    download_5_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					    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_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_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_enabled = models.BooleanField(default=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
 | 
				
			||||||
 | 
					    created = models.DateTimeField(auto_now_add=True)
 | 
				
			||||||
 | 
					    updated = models.DateTimeField(auto_now=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PeerInvite(models.Model):
 | 
				
			||||||
 | 
					    peer = models.ForeignKey(Peer, on_delete=models.CASCADE)
 | 
				
			||||||
 | 
					    invite_password = models.CharField(max_length=32, default='')
 | 
				
			||||||
 | 
					    invite_expiration = models.DateTimeField()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
 | 
				
			||||||
 | 
					    created = models.DateTimeField(auto_now_add=True)
 | 
				
			||||||
 | 
					    updated = models.DateTimeField(auto_now=True)
 | 
				
			||||||
							
								
								
									
										3
									
								
								vpn_invite/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vpn_invite/tests.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					from django.test import TestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create your tests here.
 | 
				
			||||||
							
								
								
									
										3
									
								
								vpn_invite/views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vpn_invite/views.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					from django.shortcuts import render
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create your views here.
 | 
				
			||||||
@@ -42,7 +42,8 @@ INSTALLED_APPS = [
 | 
				
			|||||||
    'user_manager',
 | 
					    'user_manager',
 | 
				
			||||||
    'wireguard_tools',
 | 
					    'wireguard_tools',
 | 
				
			||||||
    'firewall',
 | 
					    'firewall',
 | 
				
			||||||
    'dns'
 | 
					    'dns',
 | 
				
			||||||
 | 
					    'vpn_invite'
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MIDDLEWARE = [
 | 
					MIDDLEWARE = [
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user