Skip to content

Commit

Permalink
Namespace Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
giovanninocco committed Nov 10, 2023
1 parent f837e35 commit 5af21ee
Show file tree
Hide file tree
Showing 28 changed files with 690 additions and 787 deletions.
Original file line number Diff line number Diff line change
@@ -1,34 +1,30 @@
using Blazored.LocalStorage;
using GenocsBlazor.Shared.Constants.Storage;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;

namespace GenocsBlazor.Client.Infrastructure.Authentication
namespace GenocsBlazor.Client.Infrastructure.Authentication;

public class AuthenticationHeaderHandler : DelegatingHandler
{
public class AuthenticationHeaderHandler : DelegatingHandler
{
private readonly ILocalStorageService localStorage;
private readonly ILocalStorageService _localStorage;

public AuthenticationHeaderHandler(ILocalStorageService localStorage)
=> this.localStorage = localStorage;
public AuthenticationHeaderHandler(ILocalStorageService localStorage)
=> _localStorage = localStorage;

protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
if (request.Headers.Authorization?.Scheme != "Bearer")
{
if (request.Headers.Authorization?.Scheme != "Bearer")
{
var savedToken = await this.localStorage.GetItemAsync<string>(StorageConstants.Local.AuthToken);
string savedToken = await _localStorage.GetItemAsync<string>(StorageConstants.Local.AuthToken);

if (!string.IsNullOrWhiteSpace(savedToken))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", savedToken);
}
if (!string.IsNullOrWhiteSpace(savedToken))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", savedToken);
}

return await base.SendAsync(request, cancellationToken);
}

return await base.SendAsync(request, cancellationToken);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,145 +2,136 @@
using GenocsBlazor.Shared.Constants.Permission;
using GenocsBlazor.Shared.Constants.Storage;
using Microsoft.AspNetCore.Components.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Text.Json;
using System.Threading.Tasks;

namespace GenocsBlazor.Client.Infrastructure.Authentication
namespace GenocsBlazor.Client.Infrastructure.Authentication;

public class GenocsPortalStateProvider : AuthenticationStateProvider
{
public class GenocsPortalStateProvider : AuthenticationStateProvider
private readonly HttpClient _httpClient;
private readonly ILocalStorageService _localStorage;

public GenocsPortalStateProvider(HttpClient httpClient, ILocalStorageService localStorage)
{
private readonly HttpClient _httpClient;
private readonly ILocalStorageService _localStorage;
_httpClient = httpClient;
_localStorage = localStorage;
}

public GenocsPortalStateProvider(
HttpClient httpClient,
ILocalStorageService localStorage)
{
_httpClient = httpClient;
_localStorage = localStorage;
}
public async Task StateChangedAsync()
{
var authState = Task.FromResult(await GetAuthenticationStateAsync());
NotifyAuthenticationStateChanged(authState);
}

public async Task StateChangedAsync()
{
var authState = Task.FromResult(await GetAuthenticationStateAsync());
public void MarkUserAsAuthenticated(string userName)
{
var authenticatedUser = new ClaimsPrincipal(
new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, userName)
}, "apiauth"));

NotifyAuthenticationStateChanged(authState);
var authState = Task.FromResult(new AuthenticationState(authenticatedUser));

}
public void MarkUserAsAuthenticated(string userName)
{
var authenticatedUser = new ClaimsPrincipal(
new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, userName)
}, "apiauth"));
NotifyAuthenticationStateChanged(authState);
}

var authState = Task.FromResult(new AuthenticationState(authenticatedUser));
public void MarkUserAsLoggedOut()
{
var anonymousUser = new ClaimsPrincipal(new ClaimsIdentity());
var authState = Task.FromResult(new AuthenticationState(anonymousUser));

NotifyAuthenticationStateChanged(authState);
}
NotifyAuthenticationStateChanged(authState);
}

public void MarkUserAsLoggedOut()
{
var anonymousUser = new ClaimsPrincipal(new ClaimsIdentity());
var authState = Task.FromResult(new AuthenticationState(anonymousUser));
public async Task<ClaimsPrincipal> GetAuthenticationStateProviderUserAsync()
{
var state = await this.GetAuthenticationStateAsync();
return state.User;
}

NotifyAuthenticationStateChanged(authState);
}
public ClaimsPrincipal AuthenticationStateUser { get; set; }

public async Task<ClaimsPrincipal> GetAuthenticationStateProviderUserAsync()
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
string savedToken = await _localStorage.GetItemAsync<string>(StorageConstants.Local.AuthToken);
if (string.IsNullOrWhiteSpace(savedToken))
{
var state = await this.GetAuthenticationStateAsync();
var authenticationStateProviderUser = state.User;
return authenticationStateProviderUser;
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}

public ClaimsPrincipal AuthenticationStateUser { get; set; }
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", savedToken);
var state = new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity(GetClaimsFromJwt(savedToken), "jwt")));
AuthenticationStateUser = state.User;
return state;
}

public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var savedToken = await _localStorage.GetItemAsync<string>(StorageConstants.Local.AuthToken);
if (string.IsNullOrWhiteSpace(savedToken))
{
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", savedToken);
var state = new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity(GetClaimsFromJwt(savedToken), "jwt")));
AuthenticationStateUser = state.User;
return state;
}
private IEnumerable<Claim> GetClaimsFromJwt(string jwt)
{
var claims = new List<Claim>();
var payload = jwt.Split('.')[1];
var jsonBytes = ParseBase64WithoutPadding(payload);
var keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonBytes);

private IEnumerable<Claim> GetClaimsFromJwt(string jwt)
if (keyValuePairs != null)
{
var claims = new List<Claim>();
var payload = jwt.Split('.')[1];
var jsonBytes = ParseBase64WithoutPadding(payload);
var keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonBytes);
keyValuePairs.TryGetValue(ClaimTypes.Role, out var roles);

if (keyValuePairs != null)
if (roles != null)
{
keyValuePairs.TryGetValue(ClaimTypes.Role, out var roles);

if (roles != null)
if (roles.ToString().Trim().StartsWith("["))
{
if (roles.ToString().Trim().StartsWith("["))
{
var parsedRoles = JsonSerializer.Deserialize<string[]>(roles.ToString());

claims.AddRange(parsedRoles.Select(role => new Claim(ClaimTypes.Role, role)));
}
else
{
claims.Add(new Claim(ClaimTypes.Role, roles.ToString()));
}

keyValuePairs.Remove(ClaimTypes.Role);
}
string[]? parsedRoles = JsonSerializer.Deserialize<string[]>(roles.ToString());

keyValuePairs.TryGetValue(ApplicationClaimTypes.Permission, out var permissions);
if (permissions != null)
claims.AddRange(parsedRoles.Select(role => new Claim(ClaimTypes.Role, role)));
}
else
{
if (permissions.ToString().Trim().StartsWith("["))
{
var parsedPermissions = JsonSerializer.Deserialize<string[]>(permissions.ToString());
claims.AddRange(parsedPermissions.Select(permission => new Claim(ApplicationClaimTypes.Permission, permission)));
}
else
{
claims.Add(new Claim(ApplicationClaimTypes.Permission, permissions.ToString()));
}

keyValuePairs.Remove(ApplicationClaimTypes.Permission);
claims.Add(new Claim(ClaimTypes.Role, roles.ToString()));
}

claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString())));
keyValuePairs.Remove(ClaimTypes.Role);
}

return claims;
}

private byte[] ParseBase64WithoutPadding(string base64)
{
switch (base64.Length % 4)
keyValuePairs.TryGetValue(ApplicationClaimTypes.Permission, out var permissions);
if (permissions != null)
{
case 2: base64 += "=="; break;
case 3: base64 += "="; break;
if (permissions.ToString().Trim().StartsWith("["))
{
string[]? parsedPermissions = JsonSerializer.Deserialize<string[]>(permissions.ToString());
claims.AddRange(parsedPermissions.Select(permission => new Claim(ApplicationClaimTypes.Permission, permission)));
}
else
{
claims.Add(new Claim(ApplicationClaimTypes.Permission, permissions.ToString()));
}

keyValuePairs.Remove(ApplicationClaimTypes.Permission);
}

return Convert.FromBase64String(base64);
claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString())));
}

private byte[] ParseBase64WithoutPaddingOld(string payload)
return claims;
}

private byte[] ParseBase64WithoutPadding(string base64)
{
switch (base64.Length % 4)
{
payload = payload.Trim().Replace('-', '+').Replace('_', '/');
string base64 = payload.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return Convert.FromBase64String(base64);
case 2: base64 += "=="; break;
case 3: base64 += "="; break;
}

return Convert.FromBase64String(base64);
}

private byte[] ParseBase64WithoutPaddingOld(string payload)
{
payload = payload.Trim().Replace('-', '+').Replace('_', '/');
string base64 = payload.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return Convert.FromBase64String(base64);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using GenocsBlazor.Application.Responses.Audit;
using GenocsBlazor.Shared.Wrapper;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace GenocsBlazor.Client.Infrastructure.Managers.Audit
namespace GenocsBlazor.Client.Infrastructure.Managers.Audit;

public interface IAuditManager : IManager
{
public interface IAuditManager : IManager
{
Task<IResult<IEnumerable<AuditResponse>>> GetCurrentUserTrailsAsync();
Task<IResult<IEnumerable<AuditResponse>>> GetCurrentUserTrailsAsync();

Task<IResult<string>> DownloadFileAsync(string searchString = "", bool searchInOldValues = false, bool searchInNewValues = false);
}
Task<IResult<string>> DownloadFileAsync(string searchString = "", bool searchInOldValues = false, bool searchInNewValues = false);
}

0 comments on commit 5af21ee

Please sign in to comment.