From d8c89056cbd3ddb42438c7cd63e5ca04615c6f47 Mon Sep 17 00:00:00 2001 From: Daan Selen Date: Tue, 23 Sep 2025 09:08:21 +0200 Subject: [PATCH] refac: rework the variable times, mostly in ConnectionString --- src/modules/ConnectionString.py | 16 ++++++++-------- src/modules/DashboardClients.py | 16 ++++++++-------- src/modules/DashboardClientsPeerAssignment.py | 8 ++++---- src/modules/DashboardClientsTOTP.py | 6 +++--- src/modules/DashboardConfig.py | 4 ++-- src/modules/DashboardLogger.py | 6 +++--- src/modules/DashboardWebHooks.py | 6 +++--- src/modules/NewConfigurationTemplates.py | 4 ++-- src/modules/PeerJobLogger.py | 4 ++-- src/modules/PeerJobs.py | 4 ++-- src/modules/PeerShareLinks.py | 4 ++-- src/modules/WireguardConfiguration.py | 4 ++-- 12 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/modules/ConnectionString.py b/src/modules/ConnectionString.py index f29d5a24..f4a5877c 100644 --- a/src/modules/ConnectionString.py +++ b/src/modules/ConnectionString.py @@ -3,19 +3,19 @@ import configparser import os from sqlalchemy_utils import database_exists, create_database -# Ensure SQLite folder exists -SQLITE_PATH = "db" -os.makedirs(SQLITE_PATH, exist_ok=True) - -DEFAULT_DB = "wgdashboard" -DEFAULT_LOG_DB = "wgdashboard_log" -DEFAULT_JOB_DB = "wgdashboard_job" +default_db = "wgdashboard" +default_log_db = "wgdashboard_log" +default_job_db = "wgdashboard_job" +sqlite_path = "db" +if os.path.exists(sqlite_path): + os.makedirs(sqlite_path, exist_ok=True) def ConnectionString(database_name: str) -> str: """ Returns a SQLAlchemy-compatible connection string for the chosen database. Creates the database if it doesn't exist. """ + # Read and parse the INI file once at startup parser = configparser.ConfigParser(strict=False) parser.read("wg-dashboard.ini") @@ -35,7 +35,7 @@ def ConnectionString(database_name: str) -> str: host = parser.get("Database", "host") cn = f"mysql+pymysql://{username}:{password}@{host}/{database_name}" else: - cn = f'sqlite:///{os.path.join(sqlitePath, f"{database}.db")}' + cn = f'sqlite:///{os.path.join(sqlite_path, f"{database_name}.db")}' try: if not database_exists(cn): diff --git a/src/modules/DashboardClients.py b/src/modules/DashboardClients.py index 96020f01..a9fcb39b 100644 --- a/src/modules/DashboardClients.py +++ b/src/modules/DashboardClients.py @@ -8,7 +8,7 @@ import pyotp import sqlalchemy as db import requests -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from .DashboardClientsPeerAssignment import DashboardClientsPeerAssignment from .DashboardClientsTOTP import DashboardClientsTOTP from .DashboardOIDC import DashboardOIDC @@ -20,7 +20,7 @@ from flask import session class DashboardClients: def __init__(self, wireguardConfigurations): self.logger = DashboardLogger() - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.OIDC = DashboardOIDC("Client") @@ -32,10 +32,10 @@ class DashboardClients: db.Column('TotpKey', db.String(500)), db.Column('TotpKeyVerified', db.Integer), db.Column('CreatedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP), server_default=db.func.now()), db.Column('DeletedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP)), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP)), extend_existing=True, ) @@ -46,10 +46,10 @@ class DashboardClients: db.Column('ProviderIssuer', db.String(500), nullable=False, index=True), db.Column('ProviderSubject', db.String(500), nullable=False, index=True), db.Column('CreatedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP), server_default=db.func.now()), db.Column('DeletedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP)), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP)), extend_existing=True, ) @@ -65,10 +65,10 @@ class DashboardClients: db.Column('ResetToken', db.String(255), nullable=False, primary_key=True), db.Column('ClientID', db.String(255), nullable=False), db.Column('CreatedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP), server_default=db.func.now()), db.Column('ExpiryDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP)), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP)), extend_existing=True ) diff --git a/src/modules/DashboardClientsPeerAssignment.py b/src/modules/DashboardClientsPeerAssignment.py index e437bc92..a842257c 100644 --- a/src/modules/DashboardClientsPeerAssignment.py +++ b/src/modules/DashboardClientsPeerAssignment.py @@ -1,7 +1,7 @@ import datetime import uuid -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from .DashboardLogger import DashboardLogger import sqlalchemy as db from .WireguardConfiguration import WireguardConfiguration @@ -31,7 +31,7 @@ class Assignment: class DashboardClientsPeerAssignment: def __init__(self, wireguardConfigurations: dict[str, WireguardConfiguration]): self.logger = DashboardLogger() - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.wireguardConfigurations = wireguardConfigurations self.dashboardClientsPeerAssignmentTable = db.Table( @@ -41,10 +41,10 @@ class DashboardClientsPeerAssignment: db.Column('ConfigurationName', db.String(255)), db.Column('PeerID', db.String(500)), db.Column('AssignedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP), server_default=db.func.now()), db.Column('UnassignedDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP)), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP)), extend_existing=True ) self.metadata.create_all(self.engine) diff --git a/src/modules/DashboardClientsTOTP.py b/src/modules/DashboardClientsTOTP.py index 486b08bc..0410f760 100644 --- a/src/modules/DashboardClientsTOTP.py +++ b/src/modules/DashboardClientsTOTP.py @@ -3,19 +3,19 @@ import hashlib import uuid import sqlalchemy as db -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db class DashboardClientsTOTP: def __init__(self): - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.dashboardClientsTOTPTable = db.Table( 'DashboardClientsTOTPTokens', self.metadata, db.Column("Token", db.String(500), primary_key=True, index=True), db.Column("ClientID", db.String(500), index=True), db.Column( - "ExpireTime", (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP) + "ExpireTime", (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP) ) ) self.metadata.create_all(self.engine) diff --git a/src/modules/DashboardConfig.py b/src/modules/DashboardConfig.py index b3baa070..e5b66232 100644 --- a/src/modules/DashboardConfig.py +++ b/src/modules/DashboardConfig.py @@ -7,7 +7,7 @@ import sqlalchemy as db from datetime import datetime from typing import Any from flask import current_app -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from .Utilities import ( GetRemoteEndpoint, ValidateDNSAddress ) @@ -100,7 +100,7 @@ class DashboardConfig: self.SetConfig("Server", "version", DashboardConfig.DashboardVersion) self.SaveConfig() - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.dbMetadata = db.MetaData() self.__createAPIKeyTable() self.DashboardAPIKeys = self.__getAPIKeys() diff --git a/src/modules/DashboardLogger.py b/src/modules/DashboardLogger.py index 18602587..401935f7 100644 --- a/src/modules/DashboardLogger.py +++ b/src/modules/DashboardLogger.py @@ -4,18 +4,18 @@ Dashboard Logger Class import uuid import sqlalchemy as db from flask import current_app -from .ConnectionString import ConnectionString, DEFAULT_DB, DEFAULT_LOG_DB +from .ConnectionString import ConnectionString, default_db, default_log_db class DashboardLogger: def __init__(self): - self.engine = db.create_engine(ConnectionString(DEFAULT_LOG_DB)) + self.engine = db.create_engine(ConnectionString(default_log_db)) self.metadata = db.MetaData() self.dashboardLoggerTable = db.Table('DashboardLog', self.metadata, db.Column('LogID', db.String(255), nullable=False, primary_key=True), db.Column('LogDate', - (db.DATETIME if 'sqlite:///' in ConnectionString(DEFAULT_DB) else db.TIMESTAMP), + (db.DATETIME if 'sqlite:///' in ConnectionString(default_db) else db.TIMESTAMP), server_default=db.func.now()), db.Column('URL', db.String(255)), db.Column('IP', db.String(255)), diff --git a/src/modules/DashboardWebHooks.py b/src/modules/DashboardWebHooks.py index 78004e2e..d1a40314 100644 --- a/src/modules/DashboardWebHooks.py +++ b/src/modules/DashboardWebHooks.py @@ -8,7 +8,7 @@ from datetime import datetime, timedelta import requests from pydantic import BaseModel, field_serializer import sqlalchemy as db -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from flask import current_app WebHookActions = ['peer_created', 'peer_deleted', 'peer_updated'] @@ -40,7 +40,7 @@ class WebHookSessionLogs(BaseModel): class DashboardWebHooks: def __init__(self, DashboardConfig): - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.webHooksTable = db.Table( 'DashboardWebHooks', self.metadata, @@ -201,7 +201,7 @@ class DashboardWebHooks: class WebHookSession: def __init__(self, webHook: WebHook, data: dict[str, str]): - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.webHookSessionsTable = db.Table('DashboardWebHookSessions', self.metadata, autoload_with=self.engine) self.webHook = webHook diff --git a/src/modules/NewConfigurationTemplates.py b/src/modules/NewConfigurationTemplates.py index 26a00576..97dabc74 100644 --- a/src/modules/NewConfigurationTemplates.py +++ b/src/modules/NewConfigurationTemplates.py @@ -2,7 +2,7 @@ import uuid from pydantic import BaseModel, field_serializer import sqlalchemy as db -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db class NewConfigurationTemplate(BaseModel): @@ -14,7 +14,7 @@ class NewConfigurationTemplate(BaseModel): class NewConfigurationTemplates: def __init__(self): - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.templatesTable = db.Table( 'NewConfigurationTemplates', self.metadata, diff --git a/src/modules/PeerJobLogger.py b/src/modules/PeerJobLogger.py index a82e5f26..c953d28e 100644 --- a/src/modules/PeerJobLogger.py +++ b/src/modules/PeerJobLogger.py @@ -4,12 +4,12 @@ Peer Job Logger import uuid import sqlalchemy as db from flask import current_app -from .ConnectionString import ConnectionString, DEFAULT_LOG_DB +from .ConnectionString import ConnectionString, default_log_db from .Log import Log class PeerJobLogger: def __init__(self, AllPeerJobs, DashboardConfig): - self.engine = db.create_engine(ConnectionString(DEFAULT_LOG_DB)) + self.engine = db.create_engine(ConnectionString(default_log_db)) self.metadata = db.MetaData() self.jobLogTable = db.Table('JobLog', self.metadata, db.Column('LogID', db.String(255), nullable=False, primary_key=True), diff --git a/src/modules/PeerJobs.py b/src/modules/PeerJobs.py index 7d3f13b2..bea97bcb 100644 --- a/src/modules/PeerJobs.py +++ b/src/modules/PeerJobs.py @@ -1,7 +1,7 @@ """ Peer Jobs """ -from .ConnectionString import ConnectionString, DEFAULT_JOB_DB +from .ConnectionString import ConnectionString, default_job_db from .PeerJob import PeerJob from .PeerJobLogger import PeerJobLogger import sqlalchemy as db @@ -11,7 +11,7 @@ from flask import current_app class PeerJobs: def __init__(self, DashboardConfig, WireguardConfigurations): self.Jobs: list[PeerJob] = [] - self.engine = db.create_engine(ConnectionString(DEFAULT_JOB_DB)) + self.engine = db.create_engine(ConnectionString(default_job_db)) self.metadata = db.MetaData() self.peerJobTable = db.Table('PeerJobs', self.metadata, db.Column('JobID', db.String(255), nullable=False, primary_key=True), diff --git a/src/modules/PeerShareLinks.py b/src/modules/PeerShareLinks.py index bfc96f02..e5d5a120 100644 --- a/src/modules/PeerShareLinks.py +++ b/src/modules/PeerShareLinks.py @@ -1,4 +1,4 @@ -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from .PeerShareLink import PeerShareLink import sqlalchemy as db from datetime import datetime @@ -10,7 +10,7 @@ Peer Share Links class PeerShareLinks: def __init__(self, DashboardConfig, WireguardConfigurations): self.Links: list[PeerShareLink] = [] - self.engine = db.create_engine(ConnectionString(DEFAULT_DB)) + self.engine = db.create_engine(ConnectionString(default_db)) self.metadata = db.MetaData() self.peerShareLinksTable = db.Table( 'PeerShareLinks', self.metadata, diff --git a/src/modules/WireguardConfiguration.py b/src/modules/WireguardConfiguration.py index c7cda2f4..35153f67 100644 --- a/src/modules/WireguardConfiguration.py +++ b/src/modules/WireguardConfiguration.py @@ -10,7 +10,7 @@ from datetime import datetime, timedelta from itertools import islice from flask import current_app -from .ConnectionString import ConnectionString, DEFAULT_DB +from .ConnectionString import ConnectionString, default_db from .DashboardConfig import DashboardConfig from .Peer import Peer from .PeerJobs import PeerJobs @@ -64,7 +64,7 @@ class WireguardConfiguration: self.AllPeerShareLinks = AllPeerShareLinks self.DashboardWebHooks = DashboardWebHooks self.configPath = os.path.join(self.__getProtocolPath(), f'{self.Name}.conf') - self.engine: sqlalchemy.Engine = sqlalchemy.create_engine(ConnectionString(DEFAULT_DB)) + self.engine: sqlalchemy.Engine = sqlalchemy.create_engine(ConnectionString(default_db)) self.metadata: sqlalchemy.MetaData = sqlalchemy.MetaData() self.dbType = self.DashboardConfig.GetConfig("Database", "type")[1]