This commit is contained in:
2025-11-16 15:58:19 +03:30
parent 5aa13e136a
commit c5dbbbd684
5 changed files with 120 additions and 56 deletions
+16
View File
@@ -0,0 +1,16 @@
using xExceptions.Attributes;
namespace xIdentityService.Constants
{
/// <summary>
/// All Available Headers ...
/// </summary>
public enum XHeader
{
/// <summary>
/// Hub Connection ID Header Keys ...
/// </summary>
[StringValue("ConnectionId")]
ConnectionId,
}
}
+97 -51
View File
@@ -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 ...
/// <summary>
/// Retrieve Connection ID for Hubs ...
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// Retrieve User Identifier Base on XActionRequest
/// </summary>
@@ -40,16 +68,18 @@ namespace xIdentityService.Controllers {
/// <param name="excludes"></param>
/// <returns></returns>
[NonAction]
public string GetUserSelectByParam (
public string GetUserSelectByParam(
XActionRequest model,
bool forceNotNull = true,
ICollection<XUserSelectBy> excludes = null) {
ICollection<XUserSelectBy> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<string> GetAccessToken () {
public async Task<string> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<string> GetRefreshToken () {
public async Task<string> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<long> GetTokenExpiresAt () {
public async Task<long> 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<long> ();
var expiresAt = expiresAtStr.ConvertTo<long>();
//
return expiresAt;
@@ -129,17 +166,19 @@ namespace xIdentityService.Controllers {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<XLoginResponse> RetrieveTokensAsXLoginResponse () {
public async Task<XLoginResponse> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<XTokenResponse> RetrieveTokensAsXTokenResponse () {
public async Task<XTokenResponse> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<XUserClaimsInfoDto> GetUserInfo () {
public async Task<XUserClaimsInfoDto> 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 {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<XUserClaimsInfoDto> ValidateAndGetUserInfo () {
public async Task<XUserClaimsInfoDto> 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();
}
//
+1 -1
View File
@@ -298,7 +298,7 @@ namespace xIdentityService.Interfaces
//
#region Open Actions ...
//
Task<XDeviceDto> GetDevice();
XDeviceDto GetDevice();
//
Task<XOpenActionInnerDto> OpenGet(
+1 -1
View File
@@ -20,7 +20,7 @@ namespace xIdentityService.Providers
/// Prepare API Based Device to Open Actions ...
/// </summary>
/// <returns></returns>
public async Task<XDeviceDto> GetDevice()
public XDeviceDto GetDevice()
{
//
var os = "XSaherElmOS";
+5 -3
View File
@@ -23,11 +23,13 @@
<!-- Local Modules -->
<ItemGroup>
<!-- <PackageReference Include="xDashboard.xHttpService" Version="1.0.0" />
<PackageReference Include="xDashboard.xDataService" Version="1.0.0" /> -->
<PackageReference Include="xDashboard.xHttpService" Version="1.0.0" />
<!-- <PackageReference Include="xDashboard.xDataService" Version="1.0.0" /> -->
<ProjectReference Include="../xDataService/xDataService.csproj" />
<!--
<ProjectReference Include="../xHttpService/xHttpService.csproj" />
<ProjectReference Include="../xDataService/xDataService.csproj" />
-->
</ItemGroup>
<!-- Dependencies -->