Spaces:
Runtime error
Runtime error
File size: 3,705 Bytes
6a5b8d8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
"""
SQLAlchemy models for VPN server
"""
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Float, Enum, Boolean
from sqlalchemy.orm import relationship
from datetime import datetime
import enum
from core.database import Base
class UserRole(str, enum.Enum):
ADMIN = "admin"
USER = "user"
class UserStatus(str, enum.Enum):
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
email = Column(String, unique=True, index=True)
password = Column(String)
role = Column(String, default=UserRole.USER)
status = Column(String, default=UserStatus.ACTIVE)
vpn_protocol = Column(String, default="outline")
created_at = Column(DateTime, default=datetime.utcnow)
last_login = Column(DateTime, nullable=True)
# Relationships
sessions = relationship("VPNSession", back_populates="user")
config = relationship("UserVPNConfig", back_populates="user", uselist=False)
bandwidth_usages = relationship("BandwidthUsage", back_populates="user")
class VPNSession(Base):
__tablename__ = "vpn_sessions"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
protocol = Column(String)
client_ip = Column(String)
server_ip = Column(String)
start_time = Column(DateTime, default=datetime.utcnow)
end_time = Column(DateTime, nullable=True)
bytes_sent = Column(Integer, default=0)
bytes_received = Column(Integer, default=0)
status = Column(String, default="active")
# Relationships
user = relationship("User", back_populates="sessions")
class UserVPNConfig(Base):
__tablename__ = "user_vpn_configs"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), unique=True)
protocol = Column(String)
config_data = Column(String) # JSON string of configuration
created_at = Column(DateTime, default=datetime.utcnow)
last_updated = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationships
user = relationship("User", back_populates="config")
class BandwidthUsage(Base):
__tablename__ = "bandwidth_usage"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
timestamp = Column(DateTime, default=datetime.utcnow)
bytes_up = Column(Integer, default=0)
bytes_down = Column(Integer, default=0)
protocol = Column(String)
# Relationships
user = relationship("User", back_populates="bandwidth_usages")
class ServerConfig(Base):
__tablename__ = "server_config"
id = Column(Integer, primary_key=True, index=True)
server_name = Column(String, default="VPN Server")
max_clients = Column(Integer, default=100)
bandwidth_limit = Column(Integer, nullable=True) # In bytes per second
maintenance_mode = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
class AuditLog(Base):
__tablename__ = "audit_logs"
id = Column(Integer, primary_key=True, index=True)
timestamp = Column(DateTime, default=datetime.utcnow)
user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
action = Column(String)
details = Column(String)
ip_address = Column(String, nullable=True)
# Relationships
user = relationship("User")
|