Initial YakPanel commit
This commit is contained in:
13
YakPanel-server/backend/app/models/__init__.py
Normal file
13
YakPanel-server/backend/app/models/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# YakPanel - Models
|
||||
from app.models.user import User
|
||||
from app.models.config import Config
|
||||
from app.models.site import Site, Domain
|
||||
from app.models.redirect import SiteRedirect
|
||||
from app.models.ftp import Ftp
|
||||
from app.models.database import Database
|
||||
from app.models.crontab import Crontab
|
||||
from app.models.firewall import FirewallRule
|
||||
from app.models.backup_plan import BackupPlan
|
||||
from app.models.plugin import CustomPlugin
|
||||
|
||||
__all__ = ["User", "Config", "Site", "Domain", "SiteRedirect", "Ftp", "Database", "Crontab", "FirewallRule", "BackupPlan", "CustomPlugin"]
|
||||
15
YakPanel-server/backend/app/models/backup_plan.py
Normal file
15
YakPanel-server/backend/app/models/backup_plan.py
Normal file
@@ -0,0 +1,15 @@
|
||||
"""YakPanel - Backup plan model for scheduled backups"""
|
||||
from sqlalchemy import String, Integer, Boolean
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class BackupPlan(Base):
|
||||
__tablename__ = "backup_plans"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
name: Mapped[str] = mapped_column(String(128), nullable=False)
|
||||
plan_type: Mapped[str] = mapped_column(String(32), nullable=False) # site | database
|
||||
target_id: Mapped[int] = mapped_column(Integer, nullable=False) # site_id or database_id
|
||||
schedule: Mapped[str] = mapped_column(String(64), nullable=False) # cron expression, e.g. "0 2 * * *" = daily 2am
|
||||
enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
12
YakPanel-server/backend/app/models/config.py
Normal file
12
YakPanel-server/backend/app/models/config.py
Normal file
@@ -0,0 +1,12 @@
|
||||
"""YakPanel - Config model (panel settings)"""
|
||||
from sqlalchemy import String, Integer, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class Config(Base):
|
||||
__tablename__ = "config"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
key: Mapped[str] = mapped_column(String(64), unique=True, nullable=False, index=True)
|
||||
value: Mapped[str] = mapped_column(Text, nullable=True, default="")
|
||||
16
YakPanel-server/backend/app/models/crontab.py
Normal file
16
YakPanel-server/backend/app/models/crontab.py
Normal file
@@ -0,0 +1,16 @@
|
||||
"""YakPanel - Crontab model"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, DateTime, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class Crontab(Base):
|
||||
__tablename__ = "crontab"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
name: Mapped[str] = mapped_column(String(128), default="")
|
||||
type: Mapped[str] = mapped_column(String(32), default="shell")
|
||||
execstr: Mapped[str] = mapped_column(Text, default="")
|
||||
schedule: Mapped[str] = mapped_column(String(64), default="")
|
||||
addtime: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
19
YakPanel-server/backend/app/models/database.py
Normal file
19
YakPanel-server/backend/app/models/database.py
Normal file
@@ -0,0 +1,19 @@
|
||||
"""YakPanel - Database model"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, DateTime, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class Database(Base):
|
||||
__tablename__ = "databases"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
sid: Mapped[int] = mapped_column(Integer, default=0)
|
||||
pid: Mapped[int] = mapped_column(Integer, ForeignKey("sites.id"), default=0)
|
||||
name: Mapped[str] = mapped_column(String(64), nullable=False)
|
||||
username: Mapped[str] = mapped_column(String(64), nullable=False)
|
||||
password: Mapped[str] = mapped_column(String(255), default="")
|
||||
db_type: Mapped[str] = mapped_column(String(32), default="MySQL")
|
||||
ps: Mapped[str] = mapped_column(String(255), default="")
|
||||
addtime: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
14
YakPanel-server/backend/app/models/firewall.py
Normal file
14
YakPanel-server/backend/app/models/firewall.py
Normal file
@@ -0,0 +1,14 @@
|
||||
"""YakPanel - Firewall model"""
|
||||
from sqlalchemy import String, Integer
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class FirewallRule(Base):
|
||||
__tablename__ = "firewall"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
port: Mapped[str] = mapped_column(String(32), nullable=False)
|
||||
protocol: Mapped[str] = mapped_column(String(16), default="tcp")
|
||||
action: Mapped[str] = mapped_column(String(16), default="accept")
|
||||
ps: Mapped[str] = mapped_column(String(255), default="")
|
||||
17
YakPanel-server/backend/app/models/ftp.py
Normal file
17
YakPanel-server/backend/app/models/ftp.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""YakPanel - FTP model"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, DateTime, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class Ftp(Base):
|
||||
__tablename__ = "ftps"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
pid: Mapped[int] = mapped_column(Integer, ForeignKey("sites.id"), default=0)
|
||||
name: Mapped[str] = mapped_column(String(64), nullable=False)
|
||||
password: Mapped[str] = mapped_column(String(255), nullable=False)
|
||||
path: Mapped[str] = mapped_column(String(512), nullable=False)
|
||||
ps: Mapped[str] = mapped_column(String(255), default="")
|
||||
addtime: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
16
YakPanel-server/backend/app/models/plugin.py
Normal file
16
YakPanel-server/backend/app/models/plugin.py
Normal file
@@ -0,0 +1,16 @@
|
||||
"""YakPanel - Custom plugin model (third-party plugins added from URL)"""
|
||||
from sqlalchemy import String, Integer, Boolean
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class CustomPlugin(Base):
|
||||
__tablename__ = "custom_plugins"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
plugin_id: Mapped[str] = mapped_column(String(64), unique=True, nullable=False) # unique id from manifest
|
||||
name: Mapped[str] = mapped_column(String(128), nullable=False)
|
||||
version: Mapped[str] = mapped_column(String(32), default="1.0")
|
||||
desc: Mapped[str] = mapped_column(String(512), default="")
|
||||
source_url: Mapped[str] = mapped_column(String(512), default="") # URL it was installed from
|
||||
enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
14
YakPanel-server/backend/app/models/redirect.py
Normal file
14
YakPanel-server/backend/app/models/redirect.py
Normal file
@@ -0,0 +1,14 @@
|
||||
"""YakPanel - Site redirect model"""
|
||||
from sqlalchemy import String, Integer, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class SiteRedirect(Base):
|
||||
__tablename__ = "site_redirects"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
site_id: Mapped[int] = mapped_column(Integer, ForeignKey("sites.id"), nullable=False)
|
||||
source: Mapped[str] = mapped_column(String(512), nullable=False) # e.g. /old-path or domain.com/old
|
||||
target: Mapped[str] = mapped_column(String(512), nullable=False) # e.g. /new-path or https://...
|
||||
code: Mapped[int] = mapped_column(Integer, default=301) # 301 or 302
|
||||
29
YakPanel-server/backend/app/models/site.py
Normal file
29
YakPanel-server/backend/app/models/site.py
Normal file
@@ -0,0 +1,29 @@
|
||||
"""YakPanel - Site and Domain models"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, DateTime, ForeignKey, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class Site(Base):
|
||||
__tablename__ = "sites"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
name: Mapped[str] = mapped_column(String(128), unique=True, nullable=False, index=True)
|
||||
path: Mapped[str] = mapped_column(String(512), nullable=False)
|
||||
status: Mapped[int] = mapped_column(Integer, default=1) # 0=stopped, 1=running
|
||||
ps: Mapped[str] = mapped_column(String(255), default="")
|
||||
project_type: Mapped[str] = mapped_column(String(32), default="PHP")
|
||||
php_version: Mapped[str] = mapped_column(String(16), default="74") # 74, 80, 81, 82
|
||||
force_https: Mapped[int] = mapped_column(Integer, default=0) # 0=off, 1=redirect HTTP to HTTPS
|
||||
addtime: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
|
||||
|
||||
class Domain(Base):
|
||||
__tablename__ = "domain"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
pid: Mapped[int] = mapped_column(Integer, ForeignKey("sites.id"), nullable=False)
|
||||
name: Mapped[str] = mapped_column(String(256), nullable=False)
|
||||
port: Mapped[str] = mapped_column(String(16), default="80")
|
||||
addtime: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
18
YakPanel-server/backend/app/models/user.py
Normal file
18
YakPanel-server/backend/app/models/user.py
Normal file
@@ -0,0 +1,18 @@
|
||||
"""YakPanel - User model"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, DateTime, Boolean
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = "users"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
username: Mapped[str] = mapped_column(String(64), unique=True, nullable=False, index=True)
|
||||
password: Mapped[str] = mapped_column(String(255), nullable=False)
|
||||
email: Mapped[str] = mapped_column(String(128), nullable=True)
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
is_superuser: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
Reference in New Issue
Block a user