diff --git a/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor b/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor index 352595a..fa61ab4 100644 --- a/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor +++ b/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor @@ -1,65 +1,2 @@ @page "/redirect" -@attribute [AllowAnonymous] -@inject MesaFabApprovalAuthStateProvider authStateProvider -@inject IAuthenticationService authService -@inject IUserService userService -@inject ISnackbar snackbar -@inject MesaFabApprovalAuthStateProvider authStateProvider -@inject NavigationManager navigationManager - -@code { - private string? _jwt; - private string? _refreshToken; - private string? _redirectPath; - - protected override async Task OnParametersSetAsync() { - try { - Uri uri = navigationManager.ToAbsoluteUri(navigationManager.Uri); - - if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("jwt", out var jwt)) { - _jwt = System.Net.WebUtility.UrlDecode(jwt); - } - - if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("refreshToken", out var refreshToken)) { - _refreshToken = System.Net.WebUtility.UrlDecode(refreshToken); - } - - if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("redirectPath", out var redirectPath)) { - _redirectPath = redirectPath.ToString(); - } - - if (!string.IsNullOrWhiteSpace(_jwt) && !string.IsNullOrWhiteSpace(_refreshToken)) { - await authService.SetTokens(_jwt, _refreshToken); - - ClaimsPrincipal principal = authService.GetClaimsPrincipalFromJwt(_jwt); - - string loginId = userService.GetLoginIdFromClaimsPrincipal(principal); - - await authService.ClearCurrentUser(); - await authService.ClearTokens(); - - await authService.SetLoginId(loginId); - await authService.SetTokens(_jwt, _refreshToken); - await authService.SetCurrentUser(null); - - await authStateProvider.StateHasChanged(principal); - } - - if (authStateProvider.CurrentUser is not null && !string.IsNullOrWhiteSpace(_redirectPath)) { - navigationManager.NavigateTo(_redirectPath); - } else { - await authStateProvider.Logout(); - - if (!string.IsNullOrWhiteSpace(_redirectPath)) { - navigationManager.NavigateTo($"login/{_redirectPath}"); - } else { - navigationManager.NavigateTo("login"); - } - } - - } catch (Exception ex) { - snackbar.Add($"Redirect failed, because {ex.Message}", Severity.Error); - navigationManager.NavigateTo("login"); - } - } -} \ No newline at end of file +@attribute [AllowAnonymous] \ No newline at end of file diff --git a/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor.cs b/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor.cs new file mode 100644 index 0000000..80b6bdf --- /dev/null +++ b/MesaFabApproval.Client/Pages/AuthenticatedRedirect.razor.cs @@ -0,0 +1,77 @@ +using MesaFabApproval.Client.Services; + +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.WebUtilities; + +using MudBlazor; + +using System.Security.Claims; + +namespace MesaFabApproval.Client.Pages; + +public partial class AuthenticatedRedirect { + [Inject] MesaFabApprovalAuthStateProvider authStateProvider { get; set; } + [Inject] IAuthenticationService authService { get; set; } + [Inject] IUserService userService { get; set; } + [Inject] ISnackbar snackbar { get; set; } + [Inject] NavigationManager navigationManager { get; set; } + + private string? _jwt; + private string? _refreshToken; + private string? _redirectPath; + + protected override async Task OnParametersSetAsync() { + try { + Uri uri = navigationManager.ToAbsoluteUri(navigationManager.Uri); + + if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("jwt", out var jwt)) { + _jwt = System.Net.WebUtility.UrlDecode(jwt); + } + + if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("refreshToken", out var refreshToken)) { + _refreshToken = System.Net.WebUtility.UrlDecode(refreshToken); + } + + if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("redirectPath", out var redirectPath)) { + _redirectPath = redirectPath.ToString(); + } + + if (!string.IsNullOrWhiteSpace(_jwt) && !string.IsNullOrWhiteSpace(_refreshToken)) { + await authService.SetTokens(_jwt, _refreshToken); + + ClaimsPrincipal principal = authService.GetClaimsPrincipalFromJwt(_jwt); + + string loginId = userService.GetLoginIdFromClaimsPrincipal(principal); + + await authService.ClearCurrentUser(); + await authService.ClearTokens(); + + await authService.SetLoginId(loginId); + await authService.SetTokens(_jwt, _refreshToken); + await authService.SetCurrentUser(null); + + await authStateProvider.StateHasChanged(principal); + } + + if (authStateProvider.CurrentUser is not null && !string.IsNullOrWhiteSpace(_redirectPath)) { + navigationManager.NavigateTo(_redirectPath); + } else { + await authStateProvider.Logout(); + + if (!string.IsNullOrWhiteSpace(_redirectPath)) { + navigationManager.NavigateTo($"login/{_redirectPath}"); + } else { + navigationManager.NavigateTo("login"); + } + } + } catch (Exception ex) { + await authStateProvider.Logout(); + + if (!string.IsNullOrWhiteSpace(_redirectPath)) { + navigationManager.NavigateTo($"login/{_redirectPath}"); + } else { + navigationManager.NavigateTo("login"); + } + } + } +} diff --git a/MesaFabApproval.Client/Pages/Dashboard.razor b/MesaFabApproval.Client/Pages/Dashboard.razor index 6c831fb..ddd5c83 100644 --- a/MesaFabApproval.Client/Pages/Dashboard.razor +++ b/MesaFabApproval.Client/Pages/Dashboard.razor @@ -1,16 +1,5 @@ @page "/" @page "/Dashboard" -@inject IConfiguration Configuration -@inject MesaFabApprovalAuthStateProvider stateProvider -@inject IApprovalService approvalService -@inject IMemoryCache cache -@inject NavigationManager navigationManager -@inject ISnackbar snackbar -@inject IMRBService mrbService -@inject IPCRBService pcrbService -@inject IECNService ecnService -@inject ICAService caService -@inject IJSRuntime jsRuntime Dashboard @@ -226,138 +215,3 @@ - -@code { - private IEnumerable approvalList = new List(); - private IEnumerable myMRBs = new List(); - private IEnumerable myPCRBs = new List(); - - private IEnumerable ecnNumbers = new HashSet(); - private IEnumerable caNumbers = new HashSet(); - private IEnumerable mrbNumbers = new HashSet(); - private IEnumerable pcrbNumbers = new HashSet(); - - private bool myApprovalsProcessing = false; - private bool myMrbsProcessing = false; - private bool myPcrbsProcessing = false; - - private string mrbSearchString = ""; - private string pcrbSearchString = ""; - - protected async override Task OnParametersSetAsync() { - try { - if (stateProvider.CurrentUser is not null) { - myApprovalsProcessing = true; - approvalList = (await approvalService.GetApprovalsForUserId(stateProvider.CurrentUser.UserID, true)) - .Where(a => a.CompletedDate > DateTime.Now && a.ItemStatus == 0) - .ToList() - .OrderByDescending(x => x.AssignedDate); - myApprovalsProcessing = false; - - myMrbsProcessing = true; - myMRBs = (await mrbService.GetAllMRBs(false)).Where(m => m.OriginatorID == stateProvider.CurrentUser.UserID) - .ToList() - .OrderByDescending(x => x.SubmittedDate); - myMrbsProcessing = false; - - myPcrbsProcessing = true; - myPCRBs = (await pcrbService.GetAllPCRBs(false)).Where(p => p.OwnerID == stateProvider.CurrentUser.UserID) - .ToList() - .OrderByDescending(p => p.InsertTimeStamp); - myPcrbsProcessing = false; - } - } catch (Exception ex) { - myApprovalsProcessing = false; - myMrbsProcessing = false; - myPcrbsProcessing = false; - snackbar.Add($"Unable to load the dashboard, because {ex.Message}", Severity.Error); - } - } - - private async Task FollowLink(int issueId) { - HashSet tasks = new(); - - bool isEcn = false; - bool isCa = false; - bool isMrb = false; - bool isPcrb = false; - if (ecnNumbers.Contains(issueId)) - isEcn = true; - if (caNumbers.Contains(issueId)) - isCa = true; - if (mrbNumbers.Contains(issueId)) - isMrb = true; - if (pcrbNumbers.Contains(issueId)) - isPcrb = true; - - if (!isEcn && !isCa && !isMrb) { - Task isEcnTask = ecnService.ECNNumberIsValid(issueId); - tasks.Add(isEcnTask); - - Task isCaTask = caService.CANumberIsValid(issueId); - tasks.Add(isCaTask); - - Task isMrbTask = mrbService.NumberIsValid(issueId); - tasks.Add(isMrbTask); - - Task isPcrbTask = pcrbService.IdIsValid(issueId); - tasks.Add(isPcrbTask); - - await Task.WhenAll(tasks); - - if (isEcnTask.Result) { - isEcn = true; - } else if (isCaTask.Result) { - isCa = true; - } else if (isMrbTask.Result) { - isMrb = true; - } else if (isPcrbTask.Result) { - isPcrb = true; - } - } - - if (isEcn) await GoToExternal($"{Configuration["OldFabApprovalUrl"]}/ECN/Edit?IssueID={issueId}", ""); - if (isCa) await GoToExternal($"{Configuration["OldFabApprovalUrl"]}/CorrectiveAction/Edit?IssueID={issueId}", ""); - if (isMrb) GoTo($"mrb/{issueId}"); - if (isPcrb) GoTo($"pcrb/{issueId}"); - } - - private void GoTo(string page) { - cache.Set("redirectUrl", page); - navigationManager.NavigateTo("/" + page); - } - - private async Task GoToExternal(string url, string content) { - IJSObjectReference windowModule = await jsRuntime.InvokeAsync("import", "./js/OpenInNewWindow.js"); - await windowModule.InvokeAsync("OpenInNewWindow", url, content); - } - - private bool FilterFuncForMRBTable(MRB mrb) => MRBFilterFunc(mrb, mrbSearchString); - - private bool MRBFilterFunc(MRB mrb, string searchString) { - if (string.IsNullOrWhiteSpace(searchString)) - return true; - if (mrb.Title.ToLower().Contains(searchString.Trim().ToLower())) - return true; - if (mrb.MRBNumber.ToString().Contains(searchString.Trim())) - return true; - return false; - } - - private bool FilterFuncForPCRBTable(PCRB pcrb) => PCRBFilterFunc(pcrb, pcrbSearchString); - - private bool PCRBFilterFunc(PCRB pcrb, string searchString) { - if (string.IsNullOrWhiteSpace(searchString)) - return true; - if (pcrb.Title.ToLower().Contains(searchString.Trim().ToLower())) - return true; - if (pcrb.PlanNumber.ToString().Contains(searchString.Trim())) - return true; - return false; - } - - private string GetCurrentPCRBStep(int step) { - if (step < 0 || step > (PCRB.Stages.Length - 1)) return string.Empty; - else return PCRB.Stages[step]; - } -} diff --git a/MesaFabApproval.Client/Pages/Dashboard.razor.cs b/MesaFabApproval.Client/Pages/Dashboard.razor.cs new file mode 100644 index 0000000..d923cbe --- /dev/null +++ b/MesaFabApproval.Client/Pages/Dashboard.razor.cs @@ -0,0 +1,157 @@ +using MesaFabApproval.Client.Services; +using MesaFabApproval.Shared.Models; + +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.JSInterop; + +using MudBlazor; + +namespace MesaFabApproval.Client.Pages; + +public partial class Dashboard { + [Inject] IConfiguration Configuration { get; set; } + [Inject] MesaFabApprovalAuthStateProvider stateProvider { get; set; } + [Inject] IApprovalService approvalService { get; set; } + [Inject] IMemoryCache cache { get; set; } + [Inject] NavigationManager navigationManager { get; set; } + [Inject] ISnackbar snackbar { get; set; } + [Inject] IMRBService mrbService { get; set; } + [Inject] IPCRBService pcrbService { get; set; } + [Inject] IECNService ecnService { get; set; } + [Inject] ICAService caService { get; set; } + [Inject] IJSRuntime jsRuntime { get; set; } + + private IEnumerable approvalList = new List(); + private IEnumerable myMRBs = new List(); + private IEnumerable myPCRBs = new List(); + + private IEnumerable ecnNumbers = new HashSet(); + private IEnumerable caNumbers = new HashSet(); + private IEnumerable mrbNumbers = new HashSet(); + private IEnumerable pcrbNumbers = new HashSet(); + + private bool myApprovalsProcessing = false; + private bool myMrbsProcessing = false; + private bool myPcrbsProcessing = false; + + private string mrbSearchString = ""; + private string pcrbSearchString = ""; + + protected async override Task OnParametersSetAsync() { + try { + if (stateProvider.CurrentUser is not null) { + myApprovalsProcessing = true; + approvalList = (await approvalService.GetApprovalsForUserId(stateProvider.CurrentUser.UserID, true)) + .Where(a => a.CompletedDate > DateTime.Now && a.ItemStatus == 0) + .ToList() + .OrderByDescending(x => x.AssignedDate); + myApprovalsProcessing = false; + + myMrbsProcessing = true; + myMRBs = (await mrbService.GetAllMRBs(false)).Where(m => m.OriginatorID == stateProvider.CurrentUser.UserID) + .ToList() + .OrderByDescending(x => x.SubmittedDate); + myMrbsProcessing = false; + + myPcrbsProcessing = true; + myPCRBs = (await pcrbService.GetAllPCRBs(false)).Where(p => p.OwnerID == stateProvider.CurrentUser.UserID) + .ToList() + .OrderByDescending(p => p.InsertTimeStamp); + myPcrbsProcessing = false; + } + } catch (Exception ex) { + myApprovalsProcessing = false; + myMrbsProcessing = false; + myPcrbsProcessing = false; + snackbar.Add(ex.Message, Severity.Error); + } + } + + private async Task FollowLink(int issueId) { + HashSet tasks = new(); + + bool isEcn = false; + bool isCa = false; + bool isMrb = false; + bool isPcrb = false; + if (ecnNumbers.Contains(issueId)) + isEcn = true; + if (caNumbers.Contains(issueId)) + isCa = true; + if (mrbNumbers.Contains(issueId)) + isMrb = true; + if (pcrbNumbers.Contains(issueId)) + isPcrb = true; + + if (!isEcn && !isCa && !isMrb) { + Task isEcnTask = ecnService.ECNNumberIsValid(issueId); + tasks.Add(isEcnTask); + + Task isCaTask = caService.CANumberIsValid(issueId); + tasks.Add(isCaTask); + + Task isMrbTask = mrbService.NumberIsValid(issueId); + tasks.Add(isMrbTask); + + Task isPcrbTask = pcrbService.IdIsValid(issueId); + tasks.Add(isPcrbTask); + + await Task.WhenAll(tasks); + + if (isEcnTask.Result) { + isEcn = true; + } else if (isCaTask.Result) { + isCa = true; + } else if (isMrbTask.Result) { + isMrb = true; + } else if (isPcrbTask.Result) { + isPcrb = true; + } + } + + if (isEcn) await GoToExternal($"{Configuration["OldFabApprovalUrl"]}/ECN/Edit?IssueID={issueId}", ""); + if (isCa) await GoToExternal($"{Configuration["OldFabApprovalUrl"]}/CorrectiveAction/Edit?IssueID={issueId}", ""); + if (isMrb) GoTo($"mrb/{issueId}"); + if (isPcrb) GoTo($"pcrb/{issueId}"); + } + + private void GoTo(string page) { + cache.Set("redirectUrl", page); + navigationManager.NavigateTo("/" + page); + } + + private async Task GoToExternal(string url, string content) { + IJSObjectReference windowModule = await jsRuntime.InvokeAsync("import", "./js/OpenInNewWindow.js"); + await windowModule.InvokeAsync("OpenInNewWindow", url, content); + } + + private bool FilterFuncForMRBTable(MRB mrb) => MRBFilterFunc(mrb, mrbSearchString); + + private bool MRBFilterFunc(MRB mrb, string searchString) { + if (string.IsNullOrWhiteSpace(searchString)) + return true; + if (mrb.Title.ToLower().Contains(searchString.Trim().ToLower())) + return true; + if (mrb.MRBNumber.ToString().Contains(searchString.Trim())) + return true; + return false; + } + + private bool FilterFuncForPCRBTable(PCRB pcrb) => PCRBFilterFunc(pcrb, pcrbSearchString); + + private bool PCRBFilterFunc(PCRB pcrb, string searchString) { + if (string.IsNullOrWhiteSpace(searchString)) + return true; + if (pcrb.Title.ToLower().Contains(searchString.Trim().ToLower())) + return true; + if (pcrb.PlanNumber.ToString().Contains(searchString.Trim())) + return true; + return false; + } + + private string GetCurrentPCRBStep(int step) { + if (step < 0 || step > (PCRB.Stages.Length - 1)) return string.Empty; + else return PCRB.Stages[step]; + } +}