Пример #1
0
        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))));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }