diff --git a/src/dashboard.py b/src/dashboard.py index d144489..f65c53d 100644 --- a/src/dashboard.py +++ b/src/dashboard.py @@ -1799,7 +1799,10 @@ class DashboardConfig: "welcome_session": "true" }, "Database":{ - "type": "sqlite" + "type": "sqlite", + "host": "", + "username": "", + "password": "" }, "Email":{ "server": "", @@ -1825,6 +1828,13 @@ class DashboardConfig: self.APIAccessed = False self.SetConfig("Server", "version", DASHBOARD_VERSION) + def getConnectionString(self, database) -> str or None: + if self.GetConfig("Database", "type")[1] == "sqlite": + return f'sqlite:///{os.path.join(CONFIGURATION_PATH, "db", f".db")}' + elif self.GetConfig("Database", "type")[1] == "postgresql": + return f'postgresql+psycopg2://{self.GetConfig("Database", "username")[1]}:{self.GetConfig("Database", "password")[1]}@{self.GetConfig("Database", "host")[1]}/{database}' + return None + def __createAPIKeyTable(self): existingTable = sqlSelect("SELECT name FROM sqlite_master WHERE type='table' AND name = 'DashboardAPIKeys'").fetchall() if len(existingTable) == 0: @@ -3178,8 +3188,8 @@ def InitWireguardConfigurationsList(startup: bool = False): AllPeerShareLinks: PeerShareLinks = PeerShareLinks() AllPeerJobs: PeerJobs = PeerJobs() -JobLogger: PeerJobLogger = PeerJobLogger(CONFIGURATION_PATH, AllPeerJobs) -DashboardLogger: DashboardLogger = DashboardLogger(CONFIGURATION_PATH) +JobLogger: PeerJobLogger = PeerJobLogger(CONFIGURATION_PATH, AllPeerJobs, DashboardConfig) +DashboardLogger: DashboardLogger = DashboardLogger(CONFIGURATION_PATH, DashboardConfig) _, app_ip = DashboardConfig.GetConfig("Server", "app_ip") _, app_port = DashboardConfig.GetConfig("Server", "app_port") _, WG_CONF_PATH = DashboardConfig.GetConfig("Server", "wg_conf_path") diff --git a/src/modules/DashboardLogger.py b/src/modules/DashboardLogger.py index 546b52d..b55b149 100644 --- a/src/modules/DashboardLogger.py +++ b/src/modules/DashboardLogger.py @@ -6,13 +6,13 @@ import sqlalchemy as db from datetime import datetime class DashboardLogger: - def __init__(self, CONFIGURATION_PATH): - self.engine = db.create_engine(f'sqlite:///{os.path.join(CONFIGURATION_PATH, "db", "wgdashboard_log.db")}') + def __init__(self, CONFIGURATION_PATH, DashboardConfig): + self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) self.loggerdb = self.engine.connect() self.metadata = db.MetaData() self.dashboardLoggerTable = db.Table('DashboardLog', self.metadata, db.Column('LogID', db.VARCHAR, nullable=False, primary_key=True), - db.Column('LogDate', db.DATETIME, + db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), server_default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")), db.Column('URL', db.VARCHAR), db.Column('IP', db.VARCHAR), diff --git a/src/modules/PeerJobLogger.py b/src/modules/PeerJobLogger.py index 3ac8234..9cced95 100644 --- a/src/modules/PeerJobLogger.py +++ b/src/modules/PeerJobLogger.py @@ -7,17 +7,17 @@ from .Log import Log from datetime import datetime class PeerJobLogger: - def __init__(self, CONFIGURATION_PATH, AllPeerJobs): - self.engine = db.create_engine(f'sqlite:///{os.path.join(CONFIGURATION_PATH, "db", "wgdashboard_log.db")}') + def __init__(self, CONFIGURATION_PATH, AllPeerJobs, DashboardConfig): + self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) self.loggerdb = self.engine.connect() self.metadata = db.MetaData() self.jobLogTable = db.Table('JobLog', self.metadata, - db.Column('LogID', db.VARCHAR, nullable=False, primary_key=True), - db.Column('JobID', db.VARCHAR, nullable=False), - db.Column('LogDate', db.DATETIME, + db.Column('LogID', db.String, nullable=False, primary_key=True), + db.Column('JobID', db.String, nullable=False), + db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), server_default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")), - db.Column('Status', db.VARCHAR, nullable=False), - db.Column('Message', db.VARCHAR) + db.Column('Status', db.String, nullable=False), + db.Column('Message', db.String) ) self.logs: list[Log] = [] self.metadata.create_all(self.engine) diff --git a/src/requirements.txt b/src/requirements.txt index 160be0b..f713858 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -8,4 +8,5 @@ icmplib gunicorn requests tcconfig -sqlalchemy \ No newline at end of file +sqlalchemy +psycopg2 \ No newline at end of file