private async Task <SaveWizardResult> SaveWizardUser(CreateUserWizardModel user, OmbiUser userToCreate, bool completeWizard) { IdentityResult result; var retVal = new SaveWizardResult(); // When creating the admin as the plex user, we do not pass in the password. if (user.Password.HasValue()) { result = await UserManager.CreateAsync(userToCreate, user.Password); } else { result = await UserManager.CreateAsync(userToCreate); } if (result.Succeeded) { _log.LogInformation("Created User {0}", userToCreate.UserName); await CreateRoles(); _log.LogInformation("Created the roles"); var roleResult = await UserManager.AddToRoleAsync(userToCreate, OmbiRoles.Admin); if (!roleResult.Succeeded) { LogErrors(roleResult); } else { _log.LogInformation("Added the Admin role"); } if (completeWizard) { // Update the wizard flag var settings = await OmbiSettings.GetSettingsAsync(); settings.Wizard = true; await OmbiSettings.SaveSettingsAsync(settings); } } if (!result.Succeeded) { LogErrors(result); retVal.Errors.AddRange(result.Errors.Select(x => x.Description)); } retVal.Result = result.Succeeded; return(retVal); }
public async Task <bool> OmbiSettings([FromBody] OmbiSettings ombi) { ombi.Wizard = true; _cache.Remove(CacheKeys.OmbiSettings); return(await Save(ombi)); }
protected async Task <OmbiSettings> GetOmbiSettings() { return(ombiSettings ?? (ombiSettings = await OmbiSettings.GetSettingsAsync())); }
private static async Task SortOutBaseUrl(string baseUrl, SettingsContext settingsDb, GlobalSettings ombiSettingsContent) { var setBaseUrl = false; if (ombiSettingsContent == null) { Console.WriteLine("Creating new Settings entity"); ombiSettingsContent = new GlobalSettings { SettingsName = "OmbiSettings", Content = JsonConvert.SerializeObject(new OmbiSettings()) }; var strat = settingsDb.Database.CreateExecutionStrategy(); await strat.ExecuteAsync(async() => { using var tran = await settingsDb.Database.BeginTransactionAsync(); settingsDb.Add(ombiSettingsContent); await settingsDb.SaveChangesAsync(); await tran.CommitAsync(); }); } var ombiSettings = JsonConvert.DeserializeObject <OmbiSettings>(ombiSettingsContent.Content); if (ombiSettings == null) { if (baseUrl.HasValue() && baseUrl.StartsWith("/")) { setBaseUrl = true; ombiSettings = new OmbiSettings { BaseUrl = baseUrl }; ombiSettingsContent.Content = JsonConvert.SerializeObject(ombiSettings); var strat = settingsDb.Database.CreateExecutionStrategy(); await strat.ExecuteAsync(async() => { using (var tran = await settingsDb.Database.BeginTransactionAsync()) { settingsDb.Update(ombiSettingsContent); await settingsDb.SaveChangesAsync(); await tran.CommitAsync(); } }); } } else if (baseUrl.HasValue() && !baseUrl.Equals(ombiSettings.BaseUrl)) { setBaseUrl = true; ombiSettings.BaseUrl = baseUrl; ombiSettingsContent.Content = JsonConvert.SerializeObject(ombiSettings); var strat = settingsDb.Database.CreateExecutionStrategy(); await strat.ExecuteAsync(async() => { using (var tran = await settingsDb.Database.BeginTransactionAsync()) { settingsDb.Update(ombiSettingsContent); await settingsDb.SaveChangesAsync(); await tran.CommitAsync(); } }); } else { // The base url might have changed in the settings, so just rewrite setBaseUrl = true; baseUrl = ombiSettings.BaseUrl.HasValue() ? ombiSettings.BaseUrl : string.Empty; } if (setBaseUrl) { var trimmedBaseUrl = baseUrl.EndsWith('/') ? baseUrl.TrimEnd('/') : baseUrl; var process = AppContext.BaseDirectory; var ombiInstalledDir = Path.GetDirectoryName(process); var indexPath = Path.Combine(ombiInstalledDir, "ClientApp", "dist", "index.html"); if (!File.Exists(indexPath)) { var error = $"Can't set the base URL because we cannot find the file at '{indexPath}', if you are trying to set a base url please report this on Github!"; Console.WriteLine(error); return; } var indexHtml = await File.ReadAllTextAsync(indexPath); var sb = new StringBuilder(indexHtml); const string scriptRegex = "<script.type=.+>window.+=.+;<.script>"; const string baseUrlRegex = "<base.href=\".+\">"; indexHtml = Regex.Replace(indexHtml, scriptRegex, $"<script type='text/javascript'>window[\"baseHref\"] = '{trimmedBaseUrl}';</script>"); indexHtml = Regex.Replace(indexHtml, baseUrlRegex, $"<base href=\"{trimmedBaseUrl}/\">"); try { await File.WriteAllTextAsync(indexPath, indexHtml); } catch (UnauthorizedAccessException) { Console.WriteLine("Error attempting to write Base URL, see here: https://docs.ombi.app/info/known-faults/#unauthorized-access-to-indexhtml"); } Console.WriteLine($"Wrote new baseurl at {indexPath}"); } }