Merge vpn.Users with Django Users

This commit is contained in:
A B
2024-10-27 01:06:37 +00:00
parent dda9b4ba5a
commit d324edec69
7 changed files with 64 additions and 15 deletions

View File

@@ -6,6 +6,9 @@ from django.contrib import admin
from django.utils.safestring import mark_safe
from django.db.models import Count
from django.contrib.auth.admin import UserAdmin
from .models import User
from vpn.models import User, ACL
from vpn.forms import UserForm
from .server_plugins import (
@@ -43,11 +46,12 @@ class ServerAdmin(PolymorphicParentModelAdmin):
qs = qs.annotate(user_count=Count('acl'))
return qs
#admin.site.register(User, UserAdmin)
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
form = UserForm
list_display = ('name', 'comment', 'registration_date', 'hash', 'server_count')
search_fields = ('name', 'hash')
list_display = ('username', 'comment', 'registration_date', 'hash', 'server_count')
search_fields = ('username', 'hash')
readonly_fields = ('hash',)

View File

@@ -11,4 +11,4 @@ class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['name', 'comment', 'servers']
fields = ['username', 'comment', 'servers']

View File

@@ -6,8 +6,12 @@ from django.dispatch import receiver
from .server_plugins import Server
import shortuuid
class User(models.Model):
name = models.CharField(max_length=100)
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
#username = models.CharField(max_length=100)
is_active = False
comment = models.TextField(default="", blank=True)
registration_date = models.DateTimeField(auto_now_add=True)
servers = models.ManyToManyField('Server', through='ACL', blank=True)
@@ -23,7 +27,7 @@ class User(models.Model):
super().save(*args, **kwargs)
def __str__(self):
return self.name
return self.username
class ACL(models.Model):
@@ -39,7 +43,7 @@ class ACL(models.Model):
def __str__(self):
return f"{self.user.name} - {self.server.name}"
return f"{self.user.username} - {self.server.name}"
def save(self, *args, **kwargs):
if not self.link:

View File

@@ -42,6 +42,9 @@ class Server(PolymorphicModel):
class Meta:
verbose_name = "Server"
verbose_name_plural = "Servers"
permissions = [
("access_server", "Can view public status"),
]
def __str__(self):
return self.name

View File

@@ -146,35 +146,35 @@ class OutlineServer(Server):
if server_user:
if server_user.method != "chacha20-ietf-poly1305" or \
server_user.port != int(self.client_port) or \
server_user.name != user.name or \
server_user.username != user.username or \
server_user.password != user.hash or \
self.client.delete_key(user.hash):
self.delete_user(user)
key = self.client.create_key(
key_id=user.hash,
name=user.name,
name=user.username,
method=server_user.method,
password=user.hash,
data_limit=None,
port=server_user.port
)
logger.debug(f"[{self.name}] User {user.name} updated")
logger.debug(f"[{self.name}] User {user.username} updated")
else:
try:
key = self.client.create_key(
key_id=user.hash,
name=user.name,
name=user.username,
method="chacha20-ietf-poly1305",
password=user.hash,
data_limit=None,
port=int(self.client_port)
)
logger.info(f"[{self.name}] User {user.name} created")
logger.info(f"[{self.name}] User {user.username} created")
except OutlineServerErrorException as e:
error_message = str(e)
if "code\":\"Conflict" in error_message:
logger.warning(f"[{self.name}] Conflict for User {user.name}, trying to force sync. {error_message}")
logger.warning(f"[{self.name}] Conflict for User {user.username}, trying to force sync. {error_message}")
for key in self.client.get_keys():
logger.warning(f"[{self.name}] hash: {user.hash}, password: {key.password}")
if key.password == user.hash:
@@ -205,7 +205,7 @@ class OutlineServer(Server):
self.logger.info(f"[{self.name}] TEST")
self.client.delete_key(server_user.key_id)
result = {"status": "User was deleted"}
self.logger.info(f"[{self.name}] User deleted: {user.name} on server {self.name}")
self.logger.info(f"[{self.name}] User deleted: {user.username} on server {self.name}")
return result