using DomainObjects;
using DataProviders.Collections;
using DomainObjects.Documents;
using ExtensionMethods;
using Extensions;
using Microsoft.AspNetCore.Authorization;
using WeatherForecast.Services;
namespace WeatherForecast.Policies.Abstractions;
///
///
///
///
public abstract class AuthorizationHandlerBase : AuthorizationHandler where TRequirement : IAuthorizationRequirement {
private readonly IHttpContextAccessor _contextAccessor;
private readonly IUserDataProvider _userDataProvider;
private readonly IAccountPolicyService _accountService;
///
///
///
///
///
///
public AuthorizationHandlerBase(
IHttpContextAccessor contextAccessor,
IUserDataProvider userDataProvider,
IAccountPolicyService accountService
) {
_contextAccessor = contextAccessor;
_userDataProvider = userDataProvider;
_accountService = accountService;
}
///
///
///
///
///
protected UserDocument? GetUser(AuthorizationHandlerContext context) {
if (context == null)
return null;
var userId = context.User?.Identity?.Name?.ToNullableGuid();
var bearerToken = _contextAccessor.HttpContext?.Request?.GeBearerToken();
if (userId == null || bearerToken == null)
return null;
var (user, getUserResult) = _userDataProvider.Get(userId.Value);
if (!getUserResult.IsSuccess || user == null)
return null;
if (!_accountService.Authenticate(user, bearerToken).IsSuccess)
return null;
return user;
}
}
///
///
///
///
///
public abstract class AuthorizationHandlerBase : AuthorizationHandler where TRequirement : IAuthorizationRequirement {
private readonly IHttpContextAccessor _contextAccessor;
private readonly IUserDataProvider _userDataProvider;
private readonly IAccountPolicyService _accountService;
///
///
///
///
///
///
public AuthorizationHandlerBase(
IHttpContextAccessor contextAccessor,
IUserDataProvider userDataProvider,
IAccountPolicyService accountService
) {
_contextAccessor = contextAccessor;
_userDataProvider = userDataProvider;
_accountService = accountService;
}
///
///
///
///
///
protected UserDocument? GetUser(AuthorizationHandlerContext context) {
if (context == null)
return null;
var userId = context.User?.Identity?.Name?.ToNullableGuid();
var bearerToken = _contextAccessor.HttpContext?.Request?.GeBearerToken();
if (userId == null || bearerToken == null)
return null;
var (user, getUserResult) = _userDataProvider.Get(userId.Value);
if (!getUserResult.IsSuccess || user == null)
return null;
if (!_accountService.Authenticate(user, bearerToken).IsSuccess)
return null;
return user;
}
}