Added Pydantic for configurations info

This commit is contained in:
Donald Zou
2025-08-14 22:36:14 +08:00
parent 207e9f7afd
commit 1e264ca4a1
3 changed files with 45 additions and 2 deletions

View File

@@ -12,6 +12,7 @@ from .Peer import Peer
from .PeerJobs import PeerJobs from .PeerJobs import PeerJobs
from .PeerShareLinks import PeerShareLinks from .PeerShareLinks import PeerShareLinks
from .Utilities import StringToBoolean, GenerateWireguardPublicKey, RegexMatch from .Utilities import StringToBoolean, GenerateWireguardPublicKey, RegexMatch
from .WireguardConfigurationInfo import WireguardConfigurationInfo
class WireguardConfiguration: class WireguardConfiguration:
@@ -123,6 +124,8 @@ class WireguardConfiguration:
self.toggleConfiguration() self.toggleConfiguration()
print(f"[WGDashboard] Autostart Configuration: {name}") print(f"[WGDashboard] Autostart Configuration: {name}")
self.configurationInfo: WireguardConfigurationInfo | None = None
def __getProtocolPath(self): def __getProtocolPath(self):
return self.DashboardConfig.GetConfig("Server", "wg_conf_path")[1] if self.Protocol == "wg" \ return self.DashboardConfig.GetConfig("Server", "wg_conf_path")[1] if self.Protocol == "wg" \
else self.DashboardConfig.GetConfig("Server", "awg_conf_path")[1] else self.DashboardConfig.GetConfig("Server", "awg_conf_path")[1]
@@ -296,6 +299,12 @@ class WireguardConfiguration:
sqlalchemy.Column('preshared_key', sqlalchemy.String(255)), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
self.infoTable = sqlalchemy.Table(
'ConfigurationsInfo', self.metadata,
sqlalchemy.Column('ID', sqlalchemy.String(255), primary_key=True),
sqlalchemy.Column('Info', sqlalchemy.Text),
extend_existing=True
)
self.metadata.create_all(self.engine) self.metadata.create_all(self.engine)
@@ -1049,3 +1058,12 @@ class WireguardConfiguration:
return { "sent": 0, "recv": 0 } return { "sent": 0, "recv": 0 }
else: else:
return { "sent": 0, "recv": 0 } return { "sent": 0, "recv": 0 }
def readConfigurationInfo(self):
with self.engine.connect() as conn:
result = conn.execute(
self.infoTable.select().where(
self.infoTable.c.ID == self.Name
)
).mappings().fetchone()
return result

View File

@@ -0,0 +1,24 @@
from pydantic import BaseModel, PositiveInt
class OverridePeerSettingsClass(BaseModel):
DNS: str = ''
EndpointAllowedIPs: str = ''
MTU: str | int = ''
PersistentKeepalive: int | str = ''
PeerRemoteEndpoint: str = ''
ListenPort: int | str = ''
class PeerGroupsClass(BaseModel):
Description: str = ''
BackgroundColor: str = ''
Peers: list[str] = []
class WireguardConfigurationInfo(BaseModel):
Description: str = ''
OverridePeerSettings: OverridePeerSettingsClass = OverridePeerSettingsClass(**{})
PeerGroups: dict[str, PeerGroupsClass] = {}
if __name__ == '__main__':
d = WireguardConfigurationInfo.model_validate_json("{\"Description\": \"Hi!\"}")
print(d.model_dump())

View File

@@ -14,3 +14,4 @@ psycopg
mysqlclient mysqlclient
tzlocal tzlocal
python-jose python-jose
pydantic