Spaces:
Runtime error
Runtime error
| """ | |
| 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") | |