2024-10-20 21:57:12 +00:00
|
|
|
from polymorphic.models import PolymorphicModel
|
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
|
|
|
|
class Server(PolymorphicModel):
|
|
|
|
SERVER_TYPE_CHOICES = (
|
|
|
|
('Outline', 'Outline'),
|
|
|
|
('Wireguard', 'Wireguard'),
|
2025-07-27 20:37:21 +03:00
|
|
|
('xray_core', 'Xray Core'),
|
2025-08-08 05:46:36 +03:00
|
|
|
('xray_v2', 'Xray Server v2'),
|
2024-10-20 21:57:12 +00:00
|
|
|
)
|
|
|
|
|
2024-10-28 17:15:49 +00:00
|
|
|
name = models.CharField(max_length=100, help_text="Server name")
|
2024-10-20 21:57:12 +00:00
|
|
|
comment = models.TextField(default="", blank=True)
|
2024-10-28 17:15:49 +00:00
|
|
|
registration_date = models.DateTimeField(auto_now_add=True, verbose_name="Created")
|
2024-10-20 21:57:12 +00:00
|
|
|
server_type = models.CharField(max_length=50, choices=SERVER_TYPE_CHOICES, editable=False)
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
2025-07-20 22:50:22 +03:00
|
|
|
# Only sync if the server actually exists and is valid
|
|
|
|
is_new = self.pk is None
|
2024-10-20 21:57:12 +00:00
|
|
|
super().save(*args, **kwargs)
|
2025-07-20 22:50:22 +03:00
|
|
|
|
|
|
|
# Schedule sync task for existing servers only
|
|
|
|
if not is_new:
|
|
|
|
try:
|
|
|
|
from vpn.tasks import sync_server
|
|
|
|
sync_server.delay(self.id)
|
|
|
|
except Exception as e:
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.error(f"Failed to schedule sync for server {self.name}: {e}")
|
2024-10-20 21:57:12 +00:00
|
|
|
|
|
|
|
def get_server_status(self, *args, **kwargs):
|
|
|
|
return {"name": self.name}
|
|
|
|
|
|
|
|
def sync(self, *args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
2024-10-21 13:22:03 +00:00
|
|
|
def sync_users(self, *args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
2024-10-20 21:57:12 +00:00
|
|
|
def add_user(self, *args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def get_user(self, *args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def delete_user(self, *args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
verbose_name = "Server"
|
|
|
|
verbose_name_plural = "Servers"
|
2024-10-27 01:06:37 +00:00
|
|
|
permissions = [
|
|
|
|
("access_server", "Can view public status"),
|
|
|
|
]
|
2024-10-20 21:57:12 +00:00
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.name
|