public async Task AddSourcesAsync(IConfigurationBuilder builder) { DatabaseShellsSettings document; using var context = await _shellContextFactory.GetDatabaseContextAsync(_options); using (var scope = context.ServiceProvider.CreateScope()) { var session = scope.ServiceProvider.GetRequiredService <ISession>(); document = await session.Query <DatabaseShellsSettings>().FirstOrDefaultAsync(); if (document == null) { document = new DatabaseShellsSettings(); if (!_options.MigrateFromFiles || !await TryMigrateFromFileAsync(document)) { return; } session.Save(document, checkConcurrency: true); } } builder.AddJsonStream(new MemoryStream(Encoding.UTF8.GetBytes(document.ShellsSettings.ToString(Formatting.None)))); }
private async Task <bool> TryMigrateFromFileAsync(DatabaseShellsSettings document) { if (!File.Exists(_tenants)) { return(false); } using (var file = File.OpenText(_tenants)) { var settings = await file.ReadToEndAsync(); document.ShellsSettings = JObject.Parse(settings); } return(true); }
public async Task SaveAsync(string tenant, IDictionary <string, string> data) { using var context = await _shellContextFactory.GetDatabaseContextAsync(_options); using (var scope = context.ServiceProvider.CreateScope()) { var session = scope.ServiceProvider.GetRequiredService <ISession>(); var document = await session.Query <DatabaseShellsSettings>().FirstOrDefaultAsync(); JObject tenantsSettings; if (document != null) { tenantsSettings = document.ShellsSettings; } else { document = new DatabaseShellsSettings(); tenantsSettings = new JObject(); } var settings = tenantsSettings.GetValue(tenant) as JObject ?? new JObject(); foreach (var key in data.Keys) { if (data[key] != null) { settings[key] = data[key]; } else { settings.Remove(key); } } tenantsSettings[tenant] = settings; document.ShellsSettings = tenantsSettings; session.Save(document, checkConcurrency: true); } }