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,
}
}
+67 -21
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,10 +12,13 @@ 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(
@@ -26,12 +30,36 @@ namespace xIdentityService.Controllers {
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>
@@ -43,7 +71,9 @@ namespace xIdentityService.Controllers {
public string GetUserSelectByParam(
XActionRequest model,
bool forceNotNull = true,
ICollection<XUserSelectBy> excludes = null) {
ICollection<XUserSelectBy> excludes = null
)
{
//
// Validate Args ...
ValidationProvider.NotNull(model);
@@ -63,11 +93,13 @@ 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 ()) {
if (accessToken.IsNullOrEmpty())
{
accessToken = await HttpContext
.GetTokenAsync(XAuthorization.AccessToken);
}
@@ -76,7 +108,8 @@ namespace xIdentityService.Controllers {
if (accessToken
.ToNormalString()
.Contains(XAuthorization.TokenIdentifier
.ToNormalString ())) {
.ToNormalString()))
{
accessToken = accessToken
.Remove(0, XAuthorization.TokenIdentifier.Length);
}
@@ -90,11 +123,13 @@ 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 ()) {
if (refreshToken.IsNullOrEmpty())
{
refreshToken = await HttpContext
.GetTokenAsync(XAuthorization.RefreshToken);
}
@@ -108,11 +143,13 @@ 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 ()) {
if (expiresAtStr.IsNullOrEmpty())
{
expiresAtStr = await HttpContext
.GetTokenAsync(XAuthorization.ExpiresAt);
}
@@ -129,14 +166,16 @@ 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();
//
return new XLoginResponse {
return new XLoginResponse
{
AccessToken = accessToken,
RefreshToken = refreshToken,
ExpiresAt = expiresAt
@@ -148,14 +187,16 @@ 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();
//
return new XTokenResponse {
return new XTokenResponse
{
AccessToken = accessToken,
RefreshToken = refreshToken,
ExpiresAt = expiresAt
@@ -167,10 +208,12 @@ 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;
}
@@ -191,15 +234,18 @@ namespace xIdentityService.Controllers {
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<XUserClaimsInfoDto> ValidateAndGetUserInfo () {
public async Task<XUserClaimsInfoDto> ValidateAndGetUserInfo()
{
//
if (!User.Identity.IsAuthenticated) {
if (!User.Identity.IsAuthenticated)
{
XException.NotAuthorized.Throw();
}
//
var result = await GetUserInfo();
if (result.IsNull ()) {
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="../xHttpService/xHttpService.csproj" />
<ProjectReference Include="../xDataService/xDataService.csproj" />
<!--
<ProjectReference Include="../xHttpService/xHttpService.csproj" />
-->
</ItemGroup>
<!-- Dependencies -->