Example #1
0
        protected async override Task OnInitializedAsync()
        {
            await base.OnInitializedAsync();

            CurrentUserId = await AuthCsroService.GetCurrentUserId();

            if (!LocalDateTimeOffset.HasValue)
            {
                try
                {
                    LocalDateTimeOffset = await TimeZoneService.GetLocalDateTime(DateTimeOffset.UtcNow);
                }
                catch (Exception ex)
                {
                    _loggerCsroAuthComponentBase.LogError(ex, nameof(OnInitializedAsync), ex);
                }
            }
        }
Example #2
0
        public async override Task LoadAsync()
        {
            try
            {
                ShowLoading();
                CanView = false;
                SettingModels.Clear();

                var auth = await AuthenticationStateProvider.GetAuthenticationStateAsync();

                if (auth != null && auth.User.Identity.IsAuthenticated)
                {
                    var isAdmin  = auth.User.IsInRole(Core.RolesCsro.Admin);
                    var isAdmin2 = await AuthCsroService.IsInRole(Core.RolesCsro.Admin);

                    if (auth.User.Identity.Name.Contains("supolik"))
                    {
                        ShowTestEmailComp = true;
                        isAdmin2          = false;
                    }

                    //if (auth.User.Identity.Name.Contains("supolik"))
                    if (isAdmin2)
                    {
                        //var all = await ServiceIssueDataService.GetItemsAsync();
                        ////var id = await ServiceIssueDataService.GetItemByIdAsync(1);
                        ////var trackid = await ServiceIssueDataService.GetByTrackingId("1VWB-V9G");

                        CanView = true;

                        var userAuth = await UserDataService.GetUserByUserName(auth.User.Identity.Name);

                        var azureAdOptions = Configuration.GetSection(nameof(AzureAd)).Get <AzureAd>();

                        string TokenCacheDbCs = Configuration.GetConnectionString(KeyVaultConfig.ConnectionStrings.TokenCacheDb);
                        SettingModels.Add(new SettingModel {
                            Name = nameof(TokenCacheDbCs), Value = TokenCacheDbCs.ReplaceWithStars(), Type = "Config"
                        });

                        string ApiEndpoint = Configuration.GetValue <string>("ApiEndpoint");
                        SettingModels.Add(new SettingModel {
                            Name = nameof(ApiEndpoint), Value = ApiEndpoint, Type = "Config"
                        });

                        bool UseChainTokenCredential = Configuration.GetValue <bool>("UseChainTokenCredential");
                        SettingModels.Add(new SettingModel {
                            Name = nameof(UseChainTokenCredential), Value = UseChainTokenCredential.ToString(), Type = "Config"
                        });

                        var keyVaultConfig = Configuration.GetSection(nameof(KeyVaultConfig)).Get <KeyVaultConfig>();
                        Logger.LogInformation($"{nameof(KeyVaultConfig.UseKeyVault)} = {keyVaultConfig?.UseKeyVault}");

                        var readfromKV = true; //todo change for testing
                        //if (readfromKV)
                        if (keyVaultConfig != null && (readfromKV || keyVaultConfig.UseKeyVault))
                        {
                            Logger.LogInformation($"{nameof(KeyVaultConfig.KeyVaultName)} = {keyVaultConfig.KeyVaultName}");
                            string type         = "KeyVault-SecretClient";
                            int    replaceChars = 30;
                            ShowLoading(type);

                            var clientSecretCredential = new ClientSecretCredential(azureAdOptions.TenantId, azureAdOptions.ClientId, azureAdOptions.ClientSecret); //works
                            //var clientSecretCredential = new InteractiveBrowserCredential(); //forbiden
                            //var clientSecretCredential = new DefaultAzureCredential(); //forbiden
                            //var clientSecretCredential = new DefaultAzureCredential(true); //forbiden
                            //var clientSecretCredential = new ManagedIdentityCredential(); //forbiden
                            //var clientSecretCredential = new ManagedIdentityCredential(keyVaultConfig.AppServiceManagedIdentityId); //works, need to set access in portal

                            try
                            {
                                var client = new SecretClient(new Uri(keyVaultConfig.KeyVaultName), clientSecretCredential);

                                var secBund = await client.GetSecretAsync(keyVaultConfig.TokenCacheDbCsVaultKey);

                                if (secBund != null)
                                {
                                    SettingModels.Add(new SettingModel {
                                        Name = nameof(TokenCacheDbCs), Value = secBund.Value?.Value?.ReplaceWithStars(replaceChars), Type = type
                                    });
                                }
                            }
                            catch (Exception ex)
                            {
                                //await CsroDialogService.ShowError($"Error in SecretClient {clientSecretCredential}", $"{ex.Message}");
                                SettingModels.Add(new SettingModel {
                                    Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type
                                });
                            }

                            try
                            {
                                type = "KeyVault-KeyVaultClient";
                                ShowLoading(type);
                                var keyVaultClient = new KeyVaultClient(
                                    async(authority, resource, scope) =>
                                {
                                    //var credential = new DefaultAzureCredential(false);
                                    var credential = clientSecretCredential;
                                    var token      = await credential.GetTokenAsync(
                                        new Azure.Core.TokenRequestContext(
                                            new[] { "https://vault.azure.net/.default" }));
                                    return(token.Token);
                                });
                                var val = await keyVaultClient.GetSecretAsync(keyVaultConfig.KeyVaultName, keyVaultConfig.TokenCacheDbCsVaultKey);

                                if (val != null)
                                {
                                    SettingModels.Add(new SettingModel {
                                        Name = nameof(TokenCacheDbCs), Value = val.Value?.ReplaceWithStars(replaceChars), Type = type
                                    });
                                }
                            }
                            catch (Exception ex)
                            {
                                //await CsroDialogService.ShowError($"Error in KeyVaultClient {clientSecretCredential}", $"{ex.Message}");
                                SettingModels.Add(new SettingModel {
                                    Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type
                                });
                            }

                            try
                            {
                                type = "KeyVault-AzureServiceTokenProvider";
                                ShowLoading(type);
                                //SettingModels.Add(new SettingModel { Name = "UseKeyVault", Value = "", Type = "" });
                                //works
                                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                                var keyVaultClient            = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

                                var s2 = await keyVaultClient.GetSecretAsync(keyVaultConfig.KeyVaultName, keyVaultConfig.TokenCacheDbCsVaultKey);

                                SettingModels.Add(new SettingModel {
                                    Name = nameof(TokenCacheDbCs), Value = s2?.Value.ReplaceWithStars(replaceChars), Type = type
                                });
                            }
                            catch (Exception ex)
                            {
                                //await CsroDialogService.ShowError("Error in AzureServiceTokenProvider", $"{ex.Message}");
                                SettingModels.Add(new SettingModel {
                                    Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type
                                });
                            }
                        }

                        //AzureAd
                        var dic = DictionaryOfPropertiesFromInstance(azureAdOptions);
                        if (dic != null)
                        {
                            foreach (var item in dic)
                            {
                                var set = new SettingModel {
                                    Type = "AzureAd", Name = item.Key
                                };
                                //var val = item.Value.GetValue(item);    //common error, don't use
                                var val = item.Value.GetValue(azureAdOptions);
                                set.Value = val?.ToString().ReplaceWithStars();
                                SettingModels.Add(set);
                            }
                        }

                        //KeyVaultConfig
                        dic = null;
                        dic = DictionaryOfPropertiesFromInstance(keyVaultConfig);
                        if (dic != null)
                        {
                            foreach (var item in dic)
                            {
                                var set = new SettingModel {
                                    Type = "KeyVaultConfig", Name = item.Key
                                };
                                var val = item.Value.GetValue(keyVaultConfig);
                                if (val != null)
                                {
                                    set.Value = val?.ToString();
                                    SettingModels.Add(set);
                                }
                            }
                        }
                    }
                }
                else
                {
                    SignIn();
                }
            }
            catch (Exception ex)
            {
                HideLoading();
                await CsroDialogService.ShowError("Error", $"{ex.Message}");
            }
            finally
            {
                HideLoading();
            }
        }