VPN Invite first commit

This commit is contained in:
Eduardo Silva 2025-02-27 10:51:07 -03:00
parent 4c038b97c0
commit 4e7005893d
9 changed files with 148 additions and 1 deletions

0
vpn_invite/__init__.py Normal file
View File

3
vpn_invite/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
vpn_invite/apps.py Normal file
View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class VpnInviteConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'vpn_invite'

View 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')),
],
),
]

View File

60
vpn_invite/models.py Normal file
View 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
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
vpn_invite/views.py Normal file
View File

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@ -42,7 +42,8 @@ INSTALLED_APPS = [
'user_manager', 'user_manager',
'wireguard_tools', 'wireguard_tools',
'firewall', 'firewall',
'dns' 'dns',
'vpn_invite'
] ]
MIDDLEWARE = [ MIDDLEWARE = [