@using LANCommander.Server.Settings.Enums @using LANCommander.Server.Settings.Models @inject IJSRuntime JSRuntime @if (!_providers.Any()) { } @foreach (var externalProvider in _providers) { } @if (!String.IsNullOrWhiteSpace(externalProvider.Documentation)) { @code { [Parameter] public IEnumerable Values { get; set; } [Parameter] public EventCallback> ValuesChanged { get; set; } List _templates = new(); List _providers = new(); AuthenticationProvider _selectedTemplate; protected override async Task OnInitializedAsync() { _templates = await AuthenticationService.GetAuthenticationProviderTemplatesAsync(); } protected override void OnParametersSet() { _providers = Values.ToList(); } void OpenDocumentation(AuthenticationProvider authenticationProvider) { JSRuntime.InvokeVoidAsync("open", authenticationProvider.Documentation, "_blank"); } async Task Add() { _providers.Add(new AuthenticationProvider()); if (ValuesChanged.HasDelegate) await ValuesChanged.InvokeAsync(_providers); } async Task Remove(AuthenticationProvider authenticationProvider) { _providers.Remove(authenticationProvider); if (ValuesChanged.HasDelegate) await ValuesChanged.InvokeAsync(_providers); } async Task UseTemplate(AuthenticationProvider authenticationProvider, AuthenticationProvider template) { authenticationProvider.ClaimMappings = template.ClaimMappings; authenticationProvider.ClientId = template.ClientId; authenticationProvider.ClientSecret = template.ClientSecret; authenticationProvider.Color = template.Color; authenticationProvider.Documentation = template.Documentation; authenticationProvider.Icon = template.Icon; authenticationProvider.Name = template.Name; authenticationProvider.Scopes = template.Scopes; authenticationProvider.ConfigurationUrl = template.ConfigurationUrl; authenticationProvider.AuthorizationEndpoint = template.AuthorizationEndpoint; authenticationProvider.TokenEndpoint = template.TokenEndpoint; authenticationProvider.UserInfoEndpoint = template.UserInfoEndpoint; await InvokeAsync(StateHasChanged); } }