@page "/" @* @page "/{DatabaseStr}" @page "/{DatabaseStr}/{DatabaseInstanceStr}" *@ @using Microsoft.Extensions.Options @using Rms.Risk.Mango.Services.Context @using Rms.Service.Bootstrap @using Rms.Risk.Mango.Pivot.Core.MongoDb; @inject NavigationManager NavigationManager @inject IDatabaseConfigurationService DatabaseConfig @inject IUserSession Session @inject IJSRuntime JsRuntime @inject IAuthorizationService Auth @inject IOptions DbMangoSettings @* * dbMango * * Copyright 2025 Deutsche Bank AG * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ Index

dbMango

Version: @(VersionsHelper.Version)
@if (DatabasesNames.Count == 0) {
It looks like you don't have access to any databases...
} else {
@if (Session.IsDatabaseInstanceSelectionAllowed) {
} @if (Error != null) { }
}
Databases you don't have access to:
@if (!string.IsNullOrWhiteSpace(DbMangoSettings.Value.SupportLinkLabel)) { }

dbMango

Version: @(VersionsHelper.Version)
 
Welcome to dbMango - MongoDB administrative tool! Please, consider logging in.
@if (!string.IsNullOrWhiteSpace(DbMangoSettings.Value.SupportLinkLabel)) { }
@code{ [Parameter] public string? DatabaseStr { get; set; } [Parameter] public string? DatabaseInstanceStr { get; set; } private List DatabasesNames { get; } = []; private List DatabaseInstances { get; set; } = []; private Exception? Error { get; set; } private record NoAccessToRec(string Name, string Contacts); private List NoAccessTo { get; } = []; protected override async Task OnAfterRenderAsync(bool firstRender) { if (!firstRender) return; DatabasesNames.Clear(); foreach (var name in DatabaseConfig.Databases.Keys.OrderBy(x => x)) { if (name.Contains("-placeholder>")) continue; if (!await IsUserAuthorized(name)) NoAccessTo.Add( new (name, DatabaseConfig.Databases[name].Contacts)); else DatabasesNames.Add(name); } if (string.IsNullOrWhiteSpace(DatabaseStr) || !await IsUserAuthorized(DatabaseStr)) DatabaseStr = Database; else Database = DatabaseStr; if (string.IsNullOrWhiteSpace(DatabaseInstanceStr)) DatabaseInstanceStr = DatabaseInstance; else DatabaseInstance = DatabaseInstanceStr; SyncUrl(); await InvokeAsync(StateHasChanged); } private string Database { get => Session.Database; set { if (Session.Database == value) return; Session.Database = value; SyncUrl(); _ = Task.Run(DatabaseChanged); } } private string DatabaseInstance { get => Session.DatabaseInstance; set { if (Session.DatabaseInstance == value) return; Session.DatabaseInstance = value; SyncUrl(); InvokeAsync(StateHasChanged); } } private async Task DatabaseChanged() { Error = null; await InvokeAsync(StateHasChanged); try { DatabaseInstances = await GetDatabasesInstanceNames(); if (DatabaseInstances.All(x=> x != DatabaseInstance) ) DatabaseInstance = DatabaseInstances.First(); SyncUrl(); } catch (Exception ex) { Error = ex; } await InvokeAsync(StateHasChanged); } private void SyncUrl() { // var url = NavigationManager.BaseUri + $"{Database}"; // if (!string.IsNullOrWhiteSpace(DatabaseInstance)) // url += $"/{DatabaseInstance}"; // JsRuntime.InvokeAsync("DashboardUtils.ChangeUrl", url); } private async Task> GetDatabasesInstanceNames() { var admin = Session.MongoDbAdminForAdminDatabase; var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var databases = await admin.ListDatabases(cts.Token); return databases.Select(x => x.Name).ToList(); } private async Task IsUserAuthorized(string database) { var readAccess = await Auth.AuthorizeAsync( Session.User.GetUser(), database, [new ReadAccessRequirement()]); return readAccess.Succeeded; } private void NavigateToBrowse() => NavigationManager.NavigateTo("/user/browse"); private void NavigateToPivot() => NavigationManager.NavigateTo("/user/pivot"); private void NavigateToAfh() => NavigationManager.NavigateTo("/user/afh"); private void NavigateToShell() => NavigationManager.NavigateTo("/admin/shell"); }