From dd1cbcfb86eeea6cd84bc4ffb91dda8bfa62f0b3 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Thu, 9 May 2019 09:53:48 +0200 Subject: [PATCH] WIP --- session/SessionManager.cs | 66 +++++++++++++++++++++++++++++++++------ users/HotspotUser.cs | 2 +- 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/session/SessionManager.cs b/session/SessionManager.cs index 5f35d82..dcb54b3 100644 --- a/session/SessionManager.cs +++ b/session/SessionManager.cs @@ -39,30 +39,76 @@ namespace skyspot.session private void InitializeRadius() { accountingRadius= new RadiusServer(new IPEndPoint(IPAddress.Any,1812)); - .LookupSecret = LookupRadiusSecret; - radiusServer.MessageReceived = RadiusMessageReceived; + locatorRadius = new RadiusServer(new IPEndPoint(IPAddress.Any, 1816)); + + accountingRadius.LookupSecret = (endPoint) => SecretsStore.LookupSecret(endPoint); + locatorRadius.LookupSecret = (endPoint) => SecretsStore.LookupSecret(endPoint); + + locatorRadius.MessageReceived = LocatorMessageReceived; + accountingRadius.MessageReceived = AccountingMessageReceived; } - byte[] LookupRadiusSecret(IPEndPoint remoteEndpoint) - { - return defaultSecret; - } - void RadiusMessageReceived(RadiusServer radiusServer, RadiusMessage radiusMessage) + /** + * Locator Service + * + **/ + void LocatorMessageReceived(RadiusServer radiusServer, RadiusMessage radiusMessage) { Logging.Log(LogLevel.INFO, "Radius Message received: {0}", radiusMessage); - switch ( radiusMessage.Code) + switch (radiusMessage.Code) { case RadiusCode.AccessRequest: - AccessRequest(radiusServer, radiusMessage); + LocatorAccessRequest(radiusServer, radiusMessage); break; } } - void AccessRequest(RadiusServer radiusServer, RadiusMessage radiusMessage) + void LocatorAccessRequest(RadiusServer radiusServer, RadiusMessage radiusMessage) { } + /** + * + * Accounting Service + * + **/ + void AccountingMessageReceived(RadiusServer radiusServer, RadiusMessage radiusMessage) + { + Logging.Log(LogLevel.INFO, "Radius Message received: {0}", radiusMessage); + switch (radiusMessage.Code) + { + case RadiusCode.AccessRequest: + AccountingAccessRequest(radiusServer, radiusMessage); + break; + } + } + + void AccountingAccessRequest(RadiusServer radiusServer, RadiusMessage radiusMessage) + { + RadiusAttribute.UserName userName = radiusMessage.GetAttribute(); + RadiusAttribute.UserPassword userPassword = radiusMessage.GetAttribute(); + RadiusAttribute.CalledStationID calledStationID = radiusMessage.GetAttribute(); + + if ((userName == null) || (calledStationID == null)) + { + Logging.Log(LogLevel.WARNING, "InvalidRequest: UserName={0} CalledStationID={1}",userName,calledStationID); + return; + } + + MAC clientMac = new MAC(userName.AsText); + String instanceName = calledStationID.AsText; + + + Logging.Log(LogLevel.INFO, "Accounting: Session start for client {0} on Network {1}",clientMac, instanceName); + + RadiusMessage reply = new RadiusMessage(radiusMessage.EndPoint, RadiusCode.AccessAccept); + reply.Identifier = radiusMessage.Identifier; + + reply.Authenticate(SecretsStore.LookupSecret(reply.EndPoint)); + radiusServer.Send(reply); + } + } } diff --git a/users/HotspotUser.cs b/users/HotspotUser.cs index 816523f..237e634 100644 --- a/users/HotspotUser.cs +++ b/users/HotspotUser.cs @@ -34,7 +34,7 @@ namespace skyspot.users } } - public IEnumerable ActiveSessions { get; } + //public IEnumerable ActiveSessions { get; } public HotspotUser()