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 @@
-
+
+
+
+