From f5a965190104bd2fa0ea79831dc646c7055653db Mon Sep 17 00:00:00 2001 From: ahmed Date: Thu, 16 Apr 2026 15:08:42 +0300 Subject: [PATCH] Auth --- Libraries/Esiur/Protocol/EpConnection.cs | 3 --- Libraries/Esiur/Protocol/EpServer.cs | 10 ++++++++- .../Authority/AuthenticationContext.cs | 21 +++++++++++++++++++ .../Authority/AuthenticationProtocol.cs | 12 +++++++++++ .../IAuthenticationMethodProvider.cs | 16 ++++++++++++++ .../InitiatorAuthenticationContext.cs | 19 +++++++++++++++++ .../ResponderAuthenticationContext.cs | 18 ++++++++++++++++ .../Esiur/Security/Membership/IMembership.cs | 2 ++ 8 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 Libraries/Esiur/Security/Authority/AuthenticationContext.cs create mode 100644 Libraries/Esiur/Security/Authority/AuthenticationProtocol.cs create mode 100644 Libraries/Esiur/Security/Authority/IAuthenticationMethodProvider.cs create mode 100644 Libraries/Esiur/Security/Authority/InitiatorAuthenticationContext.cs create mode 100644 Libraries/Esiur/Security/Authority/ResponderAuthenticationContext.cs diff --git a/Libraries/Esiur/Protocol/EpConnection.cs b/Libraries/Esiur/Protocol/EpConnection.cs index fa8bb66..10e39b3 100644 --- a/Libraries/Esiur/Protocol/EpConnection.cs +++ b/Libraries/Esiur/Protocol/EpConnection.cs @@ -664,9 +664,6 @@ public partial class EpConnection : NetworkConnection, IStore } } - - - //@TODO: get the authentication handler if (session.RemoteHeaders.ContainsKey(EpAuthPacketHeader.AuthenticationData)) { diff --git a/Libraries/Esiur/Protocol/EpServer.cs b/Libraries/Esiur/Protocol/EpServer.cs index bcd2f3d..92796b9 100644 --- a/Libraries/Esiur/Protocol/EpServer.cs +++ b/Libraries/Esiur/Protocol/EpServer.cs @@ -37,7 +37,9 @@ using Esiur.Security.Membership; using System.Threading.Tasks; using Esiur.Data.Types; using Esiur.Net; - +using Esiur.Security.Authority; +using Microsoft.CodeAnalysis.CSharp.Syntax; + namespace Esiur.Protocol; public class EpServer : NetworkServer, IResource @@ -100,6 +102,12 @@ public class EpServer : NetworkServer, IResource | ExceptionLevel.Trace; + + public void RegisterAuthenticationHandler(string[] domains, AuthenticationMode[] modes) where T : class, IAuthenticationHandler + { + + } + public Instance Instance { get; diff --git a/Libraries/Esiur/Security/Authority/AuthenticationContext.cs b/Libraries/Esiur/Security/Authority/AuthenticationContext.cs new file mode 100644 index 0000000..72195e2 --- /dev/null +++ b/Libraries/Esiur/Security/Authority/AuthenticationContext.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Esiur.Security.Authority +{ + public class AuthenticationContext + { + public AuthenticationMode Mode { get; } + + public string? LocalDomain { get; } + public string? RemoteDomain { get; } + + public string? LocalHost { get; } + public string? RemoteHost { get; } + + //public AuthenticationComponentContext LocalToRemote { get; } = new(); + //public AuthenticationComponentContext RemoteToLocal { get; } = new(); + + } +} diff --git a/Libraries/Esiur/Security/Authority/AuthenticationProtocol.cs b/Libraries/Esiur/Security/Authority/AuthenticationProtocol.cs new file mode 100644 index 0000000..a6fbd0b --- /dev/null +++ b/Libraries/Esiur/Security/Authority/AuthenticationProtocol.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Esiur.Security.Authority +{ + public enum AuthenticationProtocol + { + Hash = 0, + PPAP = 1, + } +} diff --git a/Libraries/Esiur/Security/Authority/IAuthenticationMethodProvider.cs b/Libraries/Esiur/Security/Authority/IAuthenticationMethodProvider.cs new file mode 100644 index 0000000..90a9ca1 --- /dev/null +++ b/Libraries/Esiur/Security/Authority/IAuthenticationMethodProvider.cs @@ -0,0 +1,16 @@ +//using System; +//using System.Collections.Generic; +//using System.Text; + +//namespace Esiur.Security.Authority +//{ +// public interface IAuthenticationMethodProvider +// { +// string Method { get; } + +// bool CanHandle(AuthenticationCreationContext context); + +// IAuthenticator CreateAuthenticator(AuthenticationCreationContext context); + +// } +//} diff --git a/Libraries/Esiur/Security/Authority/InitiatorAuthenticationContext.cs b/Libraries/Esiur/Security/Authority/InitiatorAuthenticationContext.cs new file mode 100644 index 0000000..e3c6038 --- /dev/null +++ b/Libraries/Esiur/Security/Authority/InitiatorAuthenticationContext.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Esiur.Security.Authority +{ + public sealed class InitiatorAuthenticationContext + { + public string LocalIdentity { get; } = string.Empty; + public string RemoteIdentity { get; } = string.Empty; + + public string? RemoteDomain { get; } + public string? LocalDomain { get; } + + public string? RemoteIpAddress { get; } + + public AuthenticationMode Mode { get; } + } +} diff --git a/Libraries/Esiur/Security/Authority/ResponderAuthenticationContext.cs b/Libraries/Esiur/Security/Authority/ResponderAuthenticationContext.cs new file mode 100644 index 0000000..0d565fb --- /dev/null +++ b/Libraries/Esiur/Security/Authority/ResponderAuthenticationContext.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Esiur.Security.Authority +{ + public sealed class ResponderAuthenticationContext + { + public string? RemoteIpAddress { get; } + + public string? LocalDomain { get; } + + public AuthenticationMode Mode { get; } + + public IReadOnlyDictionary Headers { get; } + = new Dictionary(StringComparer.OrdinalIgnoreCase); + } +} diff --git a/Libraries/Esiur/Security/Membership/IMembership.cs b/Libraries/Esiur/Security/Membership/IMembership.cs index 940b52d..49ca644 100644 --- a/Libraries/Esiur/Security/Membership/IMembership.cs +++ b/Libraries/Esiur/Security/Membership/IMembership.cs @@ -37,6 +37,8 @@ namespace Esiur.Security.Membership; public interface IMembership { + public IAuthenticationHandler GetAuthenticationHandler(string domain); + public event ResourceEventHandler Authorization; AsyncReply UserExists(string username, string domain);