diff --git a/src/client.py b/src/client.py
index 9d9ef76..f0bfd2a 100644
--- a/src/client.py
+++ b/src/client.py
@@ -26,7 +26,7 @@ def login_required(f):
def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration], dashboardConfig: DashboardConfig):
from modules.DashboardClients import DashboardClients
- DashboardClients = DashboardClients()
+ DashboardClients = DashboardClients(wireguardConfigurations)
client = Blueprint('client', __name__, template_folder=os.path.abspath("./static/client/dist"))
prefix = f'{dashboardConfig.GetConfig("Server", "app_prefix")[1]}/client'
@@ -96,6 +96,6 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration],
@client.get(f'{prefix}/api/configurations')
@login_required
def ClientAPI_Configurations():
- return ResponseObject(True, "Ping Pong!")
+ return ResponseObject(True, data=DashboardClients.GetClientAssignedPeers(session['ClientID']))
return client
\ No newline at end of file
diff --git a/src/modules/DashboardClients.py b/src/modules/DashboardClients.py
index 3131e9c..2e6a95a 100644
--- a/src/modules/DashboardClients.py
+++ b/src/modules/DashboardClients.py
@@ -11,10 +11,11 @@ from .DashboardClientsTOTP import DashboardClientsTOTP
from .Utilities import ValidatePasswordStrength
from .DashboardLogger import DashboardLogger
+from flask import session
class DashboardClients:
- def __init__(self):
+ def __init__(self, wireguardConfigurations):
self.logger = DashboardLogger()
self.engine = db.create_engine(ConnectionString("wgdashboard"))
self.metadata = db.MetaData()
@@ -46,7 +47,7 @@ class DashboardClients:
self.Clients = []
self.__getClients()
self.DashboardClientsTOTP = DashboardClientsTOTP()
- self.DashboardClientsPeerAssignment = DashboardClientsPeerAssignment()
+ self.DashboardClientsPeerAssignment = DashboardClientsPeerAssignment(wireguardConfigurations)
def __getClients(self):
with self.engine.connect() as conn:
@@ -72,6 +73,7 @@ class DashboardClients:
if existingClient:
checkPwd = bcrypt.checkpw(Password.encode("utf-8"), existingClient.get("Password").encode("utf-8"))
if checkPwd:
+ session['ClientID'] = existingClient.get("ClientID")
return True, self.DashboardClientsTOTP.GenerateToken(existingClient.get("ClientID"))
return False, "Email or Password is incorrect"
@@ -145,5 +147,8 @@ class DashboardClients:
return True, None
+ def GetClientAssignedPeers(self, ClientID):
+ return self.DashboardClientsPeerAssignment.GetAssignedPeers(ClientID)
+
def UpdatePassword(self, CurrentPassword, NewPassword, ConfirmNewPassword):
pass
\ No newline at end of file
diff --git a/src/modules/DashboardClientsPeerAssignment.py b/src/modules/DashboardClientsPeerAssignment.py
index 9e1a74f..8800b94 100644
--- a/src/modules/DashboardClientsPeerAssignment.py
+++ b/src/modules/DashboardClientsPeerAssignment.py
@@ -1,14 +1,18 @@
+import uuid
+
from .ConnectionString import ConnectionString
from .DashboardLogger import DashboardLogger
import sqlalchemy as db
+from .WireguardConfiguration import WireguardConfiguration
+
class DashboardClientsPeerAssignment:
- def __init__(self):
+ def __init__(self, wireguardConfigurations: dict[str, WireguardConfiguration]):
self.logger = DashboardLogger()
self.engine = db.create_engine(ConnectionString("wgdashboard"))
self.metadata = db.MetaData()
-
+ self.wireguardConfigurations = wireguardConfigurations
self.dashboardClientsPeerAssignmentTable = db.Table(
'DashboardClientsPeerAssignment', self.metadata,
db.Column('AssignmentID', db.String(255), nullable=False, primary_key=True),
@@ -24,17 +28,43 @@ class DashboardClientsPeerAssignment:
)
self.metadata.create_all(self.engine)
self.assignments = []
+ self.__getAssignments()
+ self.AssignClient("0117a895-bd8b-4ba2-9116-6658372417fb", "wg0", "3kv6Bo46u7ULT07B3I1VHw/rYomVnrCD5TFU369jRSc=")
+ self.GetAssignedPeers("0117a895-bd8b-4ba2-9116-6658372417fb")
+
def __getAssignments(self):
with self.engine.connect() as conn:
self.assignments = conn.execute(
self.dashboardClientsPeerAssignmentTable.select().where(
- self.dashboardClientsPeerAssignmentTable.c.UnassignedDate is None
+ self.dashboardClientsPeerAssignmentTable.c.UnassignedDate == db.null()
)
).mappings().fetchall()
def AssignClient(self, ClientID, ConfigurationName, PeerID):
- pass
+ existing = list(
+ filter(lambda e:
+ e['ClientID'] == ClientID and
+ e['ConfigurationName'] == ConfigurationName and
+ e['PeerID'] == PeerID, self.assignments)
+ )
+ if len(existing) == 0:
+ if ConfigurationName in self.wireguardConfigurations.keys():
+ config = self.wireguardConfigurations.get(ConfigurationName)
+ peer = list(filter(lambda x : x.id == PeerID, config.Peers))
+ if len(peer) == 1:
+ with self.engine.begin() as conn:
+ data = {
+ "AssignmentID": uuid.uuid4(),
+ "ClientID": ClientID,
+ "ConfigurationName": ConfigurationName,
+ "PeerID": PeerID
+ }
+ conn.execute(
+ self.dashboardClientsPeerAssignmentTable.insert().values(data)
+ )
+ return True, data
+ return False, None
def UnassignClient(self, AssignmentID):
pass
@@ -43,4 +73,30 @@ class DashboardClientsPeerAssignment:
pass
def GetAssignedPeers(self, ClientID):
- pass
\ No newline at end of file
+ peers = []
+ assigned = list(
+ filter(lambda e:
+ e['ClientID'] == ClientID, self.assignments)
+ )
+
+ for a in assigned:
+ peer = filter(lambda e : e.id == a['PeerID'],
+ self.wireguardConfigurations[a['ConfigurationName']].Peers)
+ for p in peer:
+ peers.append({
+ 'id': p.id,
+ 'private_key': p.private_key,
+ 'name': p.name,
+ 'received_data': p.total_receive + p.cumu_receive,
+ 'sent_data': p.total_sent + p.cumu_sent,
+ 'data': p.total_data + p.cumu_data,
+ 'status': p.status,
+ 'latest_handshake': p.latest_handshake,
+ 'allowed_ip': p.allowed_ip,
+ 'jobs': p.jobs,
+ 'configuration_name': a['ConfigurationName'],
+ 'peer_configuration_data': p.downloadPeer()
+ })
+
+ print(peers)
+ return peers
\ No newline at end of file
diff --git a/src/static/client/src/views/index.vue b/src/static/client/src/views/index.vue
index 1d5dce3..fe29d06 100644
--- a/src/static/client/src/views/index.vue
+++ b/src/static/client/src/views/index.vue
@@ -1,5 +1,15 @@