From c5dbbbd68460d327198c32c3ad65c45ca47f1ff4 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sun, 16 Nov 2025 15:58:19 +0330 Subject: [PATCH] last ... --- Constants/XHeader.cs | 16 ++++ Controllers/XIBaseController.cs | 148 ++++++++++++++++++++---------- Interfaces/IXIdentityProvider.cs | 2 +- Partial/XIdentityProvider+Open.cs | 2 +- xIdentityService.csproj | 8 +- 5 files changed, 120 insertions(+), 56 deletions(-) create mode 100644 Constants/XHeader.cs diff --git a/Constants/XHeader.cs b/Constants/XHeader.cs new file mode 100644 index 0000000..53e1e4f --- /dev/null +++ b/Constants/XHeader.cs @@ -0,0 +1,16 @@ +using xExceptions.Attributes; + +namespace xIdentityService.Constants +{ + /// + /// All Available Headers ... + /// + public enum XHeader + { + /// + /// Hub Connection ID Header Keys ... + /// + [StringValue("ConnectionId")] + ConnectionId, + } +} \ No newline at end of file diff --git a/Controllers/XIBaseController.cs b/Controllers/XIBaseController.cs index 2efad9e..6bddfac 100644 --- a/Controllers/XIBaseController.cs +++ b/Controllers/XIBaseController.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.ObjectPool; using xCommons.Configurations; using xCommons.Constants; using xCommons.Controllers; @@ -11,27 +12,54 @@ using xCommons.Providers; using xExceptions.Constants; using xIdentityModels.Constants; using xIdentityModels.Models; +using xIdentityService.Constants; using xIdentityService.Interfaces; -namespace xIdentityService.Controllers { - public abstract class XIBaseController : XBaseController { +namespace xIdentityService.Controllers +{ + public abstract class XIBaseController : XBaseController + { private readonly IXIdentityProvider identityProvider; - public XIBaseController ( + public XIBaseController( ILogger logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider - ) : base ( + ) : base( logger, appConfiguration, validationProvider - ) { + ) + { this.identityProvider = identityProvider; } // - #region User Handlers NonActions ... + #region NonActions ... + /// + /// Retrieve Connection ID for Hubs ... + /// + /// + public string GetConnectionId() + { + // + var result = ""; + + // + var headerKey = XHeader.ConnectionId.GetStringValue(); + + // + // Check if Connection ID is Provided ... + if (Request.Headers.ContainsKey(headerKey)) + { + result = Request.Headers[headerKey]; + } + + // + return result; + } + /// /// Retrieve User Identifier Base on XActionRequest /// @@ -40,16 +68,18 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public string GetUserSelectByParam ( + public string GetUserSelectByParam( XActionRequest model, bool forceNotNull = true, - ICollection excludes = null) { + ICollection excludes = null + ) + { // // Validate Args ... - ValidationProvider.NotNull (model); + ValidationProvider.NotNull(model); // - var result = identityProvider.GetUserSelectByParam ( + var result = identityProvider.GetUserSelectByParam( model, forceNotNull, excludes); @@ -63,22 +93,25 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task GetAccessToken () { + public async Task GetAccessToken() + { // var accessToken = Request.Headers[XAuthorization.Header] - .ToString (); - if (accessToken.IsNullOrEmpty ()) { + .ToString(); + if (accessToken.IsNullOrEmpty()) + { accessToken = await HttpContext - .GetTokenAsync (XAuthorization.AccessToken); + .GetTokenAsync(XAuthorization.AccessToken); } // if (accessToken - .ToNormalString () - .Contains (XAuthorization.TokenIdentifier - .ToNormalString ())) { + .ToNormalString() + .Contains(XAuthorization.TokenIdentifier + .ToNormalString())) + { accessToken = accessToken - .Remove (0, XAuthorization.TokenIdentifier.Length); + .Remove(0, XAuthorization.TokenIdentifier.Length); } // @@ -90,13 +123,15 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task GetRefreshToken () { + public async Task GetRefreshToken() + { // var refreshToken = Request.Headers[XAuthorization.RefreshToken] - .ToString (); - if (refreshToken.IsNullOrEmpty ()) { + .ToString(); + if (refreshToken.IsNullOrEmpty()) + { refreshToken = await HttpContext - .GetTokenAsync (XAuthorization.RefreshToken); + .GetTokenAsync(XAuthorization.RefreshToken); } // @@ -108,17 +143,19 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task GetTokenExpiresAt () { + public async Task GetTokenExpiresAt() + { // var expiresAtStr = Request.Headers[XAuthorization.ExpiresAt] - .ToString (); - if (expiresAtStr.IsNullOrEmpty ()) { + .ToString(); + if (expiresAtStr.IsNullOrEmpty()) + { expiresAtStr = await HttpContext - .GetTokenAsync (XAuthorization.ExpiresAt); + .GetTokenAsync(XAuthorization.ExpiresAt); } // - var expiresAt = expiresAtStr.ConvertTo (); + var expiresAt = expiresAtStr.ConvertTo(); // return expiresAt; @@ -129,17 +166,19 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task RetrieveTokensAsXLoginResponse () { + public async Task RetrieveTokensAsXLoginResponse() + { // - var accessToken = await GetAccessToken (); - var refreshToken = await GetRefreshToken (); - var expiresAt = await GetTokenExpiresAt (); + var accessToken = await GetAccessToken(); + var refreshToken = await GetRefreshToken(); + var expiresAt = await GetTokenExpiresAt(); // - return new XLoginResponse { + return new XLoginResponse + { AccessToken = accessToken, - RefreshToken = refreshToken, - ExpiresAt = expiresAt + RefreshToken = refreshToken, + ExpiresAt = expiresAt }; } @@ -148,17 +187,19 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task RetrieveTokensAsXTokenResponse () { + public async Task RetrieveTokensAsXTokenResponse() + { // - var accessToken = await GetAccessToken (); - var refreshToken = await GetRefreshToken (); - var expiresAt = await GetTokenExpiresAt (); + var accessToken = await GetAccessToken(); + var refreshToken = await GetRefreshToken(); + var expiresAt = await GetTokenExpiresAt(); // - return new XTokenResponse { + return new XTokenResponse + { AccessToken = accessToken, - RefreshToken = refreshToken, - ExpiresAt = expiresAt + RefreshToken = refreshToken, + ExpiresAt = expiresAt }; } @@ -167,15 +208,17 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task GetUserInfo () { + public async Task GetUserInfo() + { // var claims = User.Claims ?? null; - if (!claims.HasChild ()) { + if (!claims.HasChild()) + { return null; } - var xTokens = await RetrieveTokensAsXTokenResponse (); - var result = new XUserClaimsInfoDto ( + var xTokens = await RetrieveTokensAsXTokenResponse(); + var result = new XUserClaimsInfoDto( xTokens.AccessToken, xTokens.RefreshToken, xTokens.ExpiresAt, @@ -191,16 +234,19 @@ namespace xIdentityService.Controllers { /// /// [NonAction] - public async Task ValidateAndGetUserInfo () { + public async Task ValidateAndGetUserInfo() + { // - if (!User.Identity.IsAuthenticated) { - XException.NotAuthorized.Throw (); + if (!User.Identity.IsAuthenticated) + { + XException.NotAuthorized.Throw(); } // - var result = await GetUserInfo (); - if (result.IsNull ()) { - XException.NotAuthorized.Throw (); + var result = await GetUserInfo(); + if (result.IsNull()) + { + XException.NotAuthorized.Throw(); } // diff --git a/Interfaces/IXIdentityProvider.cs b/Interfaces/IXIdentityProvider.cs index b7bcb5c..5d3eb20 100644 --- a/Interfaces/IXIdentityProvider.cs +++ b/Interfaces/IXIdentityProvider.cs @@ -298,7 +298,7 @@ namespace xIdentityService.Interfaces // #region Open Actions ... // - Task GetDevice(); + XDeviceDto GetDevice(); // Task OpenGet( diff --git a/Partial/XIdentityProvider+Open.cs b/Partial/XIdentityProvider+Open.cs index 21d7ecd..804a546 100644 --- a/Partial/XIdentityProvider+Open.cs +++ b/Partial/XIdentityProvider+Open.cs @@ -20,7 +20,7 @@ namespace xIdentityService.Providers /// Prepare API Based Device to Open Actions ... /// /// - public async Task GetDevice() + public XDeviceDto GetDevice() { // var os = "XSaherElmOS"; diff --git a/xIdentityService.csproj b/xIdentityService.csproj index c952750..145e63c 100644 --- a/xIdentityService.csproj +++ b/xIdentityService.csproj @@ -23,11 +23,13 @@ - + + + +