Initial YakPanel commit

This commit is contained in:
Niranjan
2026-04-07 02:04:22 +05:30
commit 2826d3e7f3
5359 changed files with 1390724 additions and 0 deletions

View 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"]

View 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)

View 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="")

View 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)

View 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)

View 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="")

View 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)

View 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)

View 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

View 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)

View 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)