JRNET / models /database.py
Factor Studios
Upload 96 files
6a5b8d8 verified
raw
history blame
3.71 kB
"""
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")