From 58f944c72e14a96740d07bcdac438030d49a25ab Mon Sep 17 00:00:00 2001 From: Donald Zou Date: Sun, 1 Jun 2025 15:34:12 +0800 Subject: [PATCH] Moved connection string to an individual file --- src/modules/ConnectionString.py | 22 ++++++++++++++++++++++ src/modules/DashboardClient.py | 3 +++ src/modules/DashboardConfig.py | 4 +++- src/modules/DashboardLogger.py | 4 +++- src/modules/PeerJobLogger.py | 4 +++- src/modules/PeerJobs.py | 3 ++- src/modules/PeerShareLinks.py | 3 ++- src/modules/WireguardConfiguration.py | 3 ++- src/static/client/src/views/signin.vue | 6 +++--- src/static/client/src/views/signup.vue | 10 +++++----- 10 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 src/modules/ConnectionString.py create mode 100644 src/modules/DashboardClient.py diff --git a/src/modules/ConnectionString.py b/src/modules/ConnectionString.py new file mode 100644 index 0000000..c0b5930 --- /dev/null +++ b/src/modules/ConnectionString.py @@ -0,0 +1,22 @@ +import configparser +import os + +from sqlalchemy_utils import database_exists, create_database + +from DashboardConfig import DashboardConfig + +def ConnectionString(database) -> str or None: + parser = configparser.ConfigParser(strict=False) + parser.read_file(open('wg-dashboard.ini', "r+")) + sqlitePath = os.path.join("db") + if not os.path.isdir(sqlitePath): + os.mkdir(sqlitePath) + if parser.get("Database", "type") == "postgresql": + cn = f'postgresql+psycopg2://{parser.get("Database", "username")}:{parser.get("Database", "password")[1]}@{parser.get("Database", "host")[1]}/{database}' + elif parser.get("Database", "type")[1] == "mysql": + cn = f'mysql+mysqldb://{parser.get("Database", "username")[1]}:{parser.get("Database", "password")[1]}@{parser.get("Database", "host")[1]}/{database}' + else: + cn = f'sqlite:///{os.path.join(sqlitePath, f"{database}.db")}' + if not database_exists(cn): + create_database(cn) + return cn \ No newline at end of file diff --git a/src/modules/DashboardClient.py b/src/modules/DashboardClient.py new file mode 100644 index 0000000..946d820 --- /dev/null +++ b/src/modules/DashboardClient.py @@ -0,0 +1,3 @@ +class DashboardClient: + def __init__(self): + pass \ No newline at end of file diff --git a/src/modules/DashboardConfig.py b/src/modules/DashboardConfig.py index b9ed672..ef849b6 100644 --- a/src/modules/DashboardConfig.py +++ b/src/modules/DashboardConfig.py @@ -6,6 +6,8 @@ from sqlalchemy_utils import database_exists, create_database import sqlalchemy as db from datetime import datetime from typing import Any + +from .ConnectionString import ConnectionString from .Utilities import ( GetRemoteEndpoint, ValidateDNSAddress ) @@ -84,7 +86,7 @@ class DashboardConfig: if not exist: self.SetConfig(section, key, value, True) - self.engine = db.create_engine(self.getConnectionString('wgdashboard')) + self.engine = db.create_engine(ConnectionString('wgdashboard')) self.dbMetadata = db.MetaData() self.__createAPIKeyTable() self.DashboardAPIKeys = self.__getAPIKeys() diff --git a/src/modules/DashboardLogger.py b/src/modules/DashboardLogger.py index fba780a..b249ca6 100644 --- a/src/modules/DashboardLogger.py +++ b/src/modules/DashboardLogger.py @@ -4,10 +4,12 @@ Dashboard Logger Class import uuid import sqlalchemy as db +from .ConnectionString import ConnectionString + class DashboardLogger: def __init__(self, DashboardConfig): - self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) + self.engine = db.create_engine(ConnectionString("wgdashboard_log")) self.metadata = db.MetaData() self.dashboardLoggerTable = db.Table('DashboardLog', self.metadata, db.Column('LogID', db.String(255), nullable=False, primary_key=True), diff --git a/src/modules/PeerJobLogger.py b/src/modules/PeerJobLogger.py index 0012d7b..a64347d 100644 --- a/src/modules/PeerJobLogger.py +++ b/src/modules/PeerJobLogger.py @@ -3,11 +3,13 @@ Peer Job Logger """ import uuid import sqlalchemy as db + +from .ConnectionString import ConnectionString from .Log import Log class PeerJobLogger: def __init__(self, AllPeerJobs, DashboardConfig): - self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) + self.engine = db.create_engine(ConnectionString("wgdashboard_log")) 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 64679b8..c8584f2 100644 --- a/src/modules/PeerJobs.py +++ b/src/modules/PeerJobs.py @@ -1,6 +1,7 @@ """ Peer Jobs """ +from .ConnectionString import ConnectionString from .PeerJob import PeerJob from .PeerJobLogger import PeerJobLogger import sqlalchemy as db @@ -9,7 +10,7 @@ from datetime import datetime class PeerJobs: def __init__(self, DashboardConfig, WireguardConfigurations): self.Jobs: list[PeerJob] = [] - self.engine = db.create_engine(DashboardConfig.getConnectionString('wgdashboard_job')) + self.engine = db.create_engine(ConnectionString('wgdashboard_job')) 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 409ac53..6c42c8b 100644 --- a/src/modules/PeerShareLinks.py +++ b/src/modules/PeerShareLinks.py @@ -1,3 +1,4 @@ +from .ConnectionString import ConnectionString from .PeerShareLink import PeerShareLink import sqlalchemy as db from datetime import datetime @@ -9,7 +10,7 @@ Peer Share Links class PeerShareLinks: def __init__(self, DashboardConfig): self.Links: list[PeerShareLink] = [] - self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard")) + self.engine = db.create_engine(ConnectionString("wgdashboard")) self.metadata = db.MetaData() self.peerShareLinksTable = db.Table( 'PeerShareLinks', self.metadata, diff --git a/src/modules/WireguardConfiguration.py b/src/modules/WireguardConfiguration.py index 6eede04..4b78816 100644 --- a/src/modules/WireguardConfiguration.py +++ b/src/modules/WireguardConfiguration.py @@ -6,6 +6,7 @@ from zipfile import ZipFile from datetime import datetime, timedelta from itertools import islice +from .ConnectionString import ConnectionString from .DashboardConfig import DashboardConfig from .Peer import Peer from .PeerJobs import PeerJobs @@ -56,7 +57,7 @@ class WireguardConfiguration: self.DashboardConfig = DashboardConfig self.AllPeerShareLinks = AllPeerShareLinks self.configPath = os.path.join(self.__getProtocolPath(), f'{self.Name}.conf') - self.engine: sqlalchemy.engine = sqlalchemy.create_engine(self.DashboardConfig.getConnectionString("wgdashboard")) + self.engine: sqlalchemy.engine = sqlalchemy.create_engine(ConnectionString("wgdashboard")) self.metadata: sqlalchemy.MetaData = sqlalchemy.MetaData() self.dbType = self.DashboardConfig.GetConfig("Database", "type")[1] diff --git a/src/static/client/src/views/signin.vue b/src/static/client/src/views/signin.vue index 6a2ff5a..89b80fc 100644 --- a/src/static/client/src/views/signin.vue +++ b/src/static/client/src/views/signin.vue @@ -31,7 +31,7 @@ const submit = (e) => { autocomplete="email" autofocus class="form-control rounded-3" id="email" placeholder="email"> -