last ...
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user