mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-07-13 16:46:58 +00:00
84 lines
3.5 KiB
Python
84 lines
3.5 KiB
Python
from .PeerShareLink import PeerShareLink
|
|
import sqlalchemy as db
|
|
from datetime import datetime
|
|
import uuid
|
|
|
|
"""
|
|
Peer Share Links
|
|
"""
|
|
class PeerShareLinks:
|
|
def __init__(self, DashboardConfig):
|
|
self.Links: list[PeerShareLink] = []
|
|
self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard"))
|
|
self.metadata = db.MetaData()
|
|
self.peerShareLinksTable = db.Table(
|
|
'PeerShareLinks', self.metadata,
|
|
db.Column('ShareID', db.String, nullable=False, primary_key=True),
|
|
db.Column('Configuration', db.String, nullable=False),
|
|
db.Column('Peer', db.String, nullable=False),
|
|
db.Column('ExpireDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP)),
|
|
db.Column('SharedDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP),
|
|
server_default=db.func.now()),
|
|
)
|
|
self.metadata.create_all(self.engine)
|
|
self.__getSharedLinks()
|
|
def __getSharedLinks(self):
|
|
self.Links.clear()
|
|
with self.engine.connect() as conn:
|
|
allLinks = conn.execute(
|
|
self.peerShareLinksTable.select().where(
|
|
db.or_(self.peerShareLinksTable.columns.ExpireDate == None, self.peerShareLinksTable.columns.ExpireDate > datetime.now())
|
|
)
|
|
).mappings().fetchall()
|
|
for link in allLinks:
|
|
self.Links.append(PeerShareLink(**link))
|
|
|
|
|
|
|
|
def getLink(self, Configuration: str, Peer: str) -> list[PeerShareLink]:
|
|
self.__getSharedLinks()
|
|
return list(filter(lambda x : x.Configuration == Configuration and x.Peer == Peer, self.Links))
|
|
|
|
def getLinkByID(self, ShareID: str) -> list[PeerShareLink]:
|
|
self.__getSharedLinks()
|
|
return list(filter(lambda x : x.ShareID == ShareID, self.Links))
|
|
|
|
def addLink(self, Configuration: str, Peer: str, ExpireDate: datetime = None) -> tuple[bool, str]:
|
|
try:
|
|
newShareID = str(uuid.uuid4())
|
|
with self.engine.begin() as conn:
|
|
if len(self.getLink(Configuration, Peer)) > 0:
|
|
conn.execute(
|
|
self.peerShareLinksTable.update().values(
|
|
{
|
|
"ExpireDate": datetime.now()
|
|
}
|
|
).where(db.and_(self.peerShareLinksTable.columns.Configuration == Configuration, self.peerShareLinksTable.columns.Peer == Peer))
|
|
)
|
|
|
|
conn.execute(
|
|
self.peerShareLinksTable.insert().values(
|
|
{
|
|
"ShareID": newShareID,
|
|
"Configuration": Configuration,
|
|
"Peer": Peer,
|
|
"ExpireDate": ExpireDate
|
|
}
|
|
)
|
|
)
|
|
self.__getSharedLinks()
|
|
except Exception as e:
|
|
return False, str(e)
|
|
return True, newShareID
|
|
|
|
def updateLinkExpireDate(self, ShareID, ExpireDate: datetime = None) -> tuple[bool, str]:
|
|
with self.engine.begin() as conn:
|
|
conn.execute(
|
|
self.peerShareLinksTable.update().values(
|
|
{
|
|
"ExpireDate": ExpireDate
|
|
}
|
|
).where(db.and_(self.peerShareLinksTable.columns.ShareID == ShareID))
|
|
)
|
|
self.__getSharedLinks()
|
|
return True, "" |