2024-11-15 09:28:25 -07:00

124 lines
5.1 KiB
Plaintext

@using System.Text.Json
@using System.Text
@inherits LayoutComponentBase
@inject MesaFabApprovalAuthStateProvider authStateProvider
@inject IAuthenticationService authenticationService
@inject IConfiguration Configuration
@inject IMemoryCache cache
@inject IJSRuntime jsRuntime
@inject IHttpClientFactory httpClientFactory
@inject ISnackbar snackbar
@inject NavigationManager navManager
<MudThemeProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<MudPopoverProvider />
<div style="height: 100vh;">
<MudLayout>
<MudAppBar Elevation="1" Color="Color.Info">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@((e) => DrawerToggle())" />
<MudText Typo="Typo.h5" Class="ml-3">Mesa Fab Approval</MudText>
@if (authStateProvider.CurrentUser is not null) {
<MudSpacer />
<MudText Typo="Typo.h6" Class="mr-3">@authStateProvider.CurrentUser.FirstName @authStateProvider.CurrentUser.LastName</MudText>
<MudIconButton Variant="Variant.Filled"
Color="Color.Tertiary"
OnClick=Logout
Edge="Edge.End"
Icon="@Icons.Material.Filled.Logout" />
}
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
<MudNavMenu Color="Color.Info" Bordered="true" Class="d-flex flex-column justify-center p-1 gap-1">
<MudButton Variant="Variant.Filled"
Color="Color.Tertiary"
Href="@Configuration["OldFabApprovalUrl"]"
Target="_blank"
StartIcon="@Icons.Material.Filled.Home">
Return to Main Site
</MudButton>
<MudDivider Class="my-1" />
@if (authStateProvider.CurrentUser is not null) {
<MudNavGroup Title="Create New">
<MudNavLink OnClick="@(() => GoTo("mrb/new"))">Create New MRB</MudNavLink>
<MudNavLink OnClick="@(() => GoTo("pcrb/new"))">Create New PCRB</MudNavLink>
</MudNavGroup>
<MudNavLink OnClick="@(() => GoTo(""))" Icon="@Icons.Material.Filled.Dashboard">Dashboard</MudNavLink>
<MudNavLink OnClick="@(() => GoTo("mrb/all"))" Icon="@Icons.Material.Filled.Ballot">MRB List</MudNavLink>
<MudNavLink OnClick="@(() => GoTo("pcrb/all"))" Icon="@Icons.Material.Filled.Ballot">PCRB List</MudNavLink>
}
</MudNavMenu>
</MudDrawer>
<div style="display: flex; flex-flow: column; height: 100%;">
<MudMainContent Style="@($"background:#E0E0E0; flex-grow: 1;")">
@Body
</MudMainContent>
</div>
</MudLayout>
</div>
@code {
bool _drawerOpen = true;
void DrawerToggle() {
_drawerOpen = !_drawerOpen;
}
void Logout() {
authStateProvider.Logout();
}
private void GoTo(string page) {
DrawerToggle();
cache.Set("redirectUrl", page);
navManager.NavigateTo(page);
}
private async Task GoToExternal(string url, string content) {
IJSObjectReference windowModule = await jsRuntime.InvokeAsync<IJSObjectReference>("import", "./js/OpenInNewWindow.js");
await windowModule.InvokeAsync<object>("OpenInNewWindow", url, content);
}
private async Task GoToOldSite() {
try {
User? currentUser = authStateProvider.CurrentUser;
AuthTokens? authTokens = await authenticationService.GetAuthTokens();
if (currentUser is null || authTokens is null) {
await authStateProvider.Logout();
navManager.NavigateTo("login");
return;
}
AuthAttempt authAttempt = new() {
LoginID = currentUser.LoginID,
AuthTokens = authTokens
};
HttpClient httpClient = httpClientFactory.CreateClient("OldSite");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "Account/ExternalAuthSetup");
request.Content = new StringContent(JsonSerializer.Serialize(authAttempt),
Encoding.UTF8,
"application/json");
HttpResponseMessage httpResponseMessage = await httpClient.SendAsync(request);
if (httpResponseMessage.IsSuccessStatusCode) {
snackbar.Add("Old site auth setup successful", Severity.Success);
} else {
snackbar.Add($"Old site auth setup failed, because {httpResponseMessage.ReasonPhrase}", Severity.Error);
}
await GoToExternal($"{Configuration["OldFabApprovalUrl"]}", "");
} catch (Exception ex) {
snackbar.Add($"Unable to go to old site, because {ex.Message}", Severity.Error);
}
}
}