options helper, optional db connection from CLI

This commit is contained in:
andy 2021-10-24 17:38:45 +01:00
parent 143f708cff
commit af980b130a
4 changed files with 58 additions and 15 deletions

View File

@ -1,7 +1,26 @@
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
namespace Selector.CLI
{
static class OptionsHelper {
public static void ConfigureOptions(RootOptions options, IConfiguration config)
{
config.GetSection(RootOptions.Key).Bind(options);
config.GetSection(FormatKeys( new[] { RootOptions.Key, WatcherOptions.Key})).Bind(options.WatcherOptions);
config.GetSection(FormatKeys( new[] { RootOptions.Key, DatabaseOptions.Key})).Bind(options.DatabaseOptions);
}
public static RootOptions ConfigureOptions(IConfiguration config)
{
var options = config.GetSection(RootOptions.Key).Get<RootOptions>();
ConfigureOptions(options, config);
return options;
}
public static string FormatKeys(string[] args) => string.Join(":", args);
}
class RootOptions
{
public const string Key = "Selector";
@ -15,6 +34,7 @@ namespace Selector.CLI
/// </summary>
public string ClientSecret { get; set; }
public WatcherOptions WatcherOptions { get; set; } = new();
public DatabaseOptions DatabaseOptions { get; set; } = new();
public EqualityChecker Equality { get; set; } = EqualityChecker.Uri;
}
@ -56,4 +76,11 @@ namespace Selector.CLI
{
AudioFeatures
}
class DatabaseOptions {
public const string Key = "Database";
public bool Enabled { get; set; } = false;
public string ConnectionString { get; set; }
}
}

View File

@ -4,8 +4,11 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
using NLog.Extensions.Logging;
using Selector.Model;
namespace Selector.CLI
{
class Program
@ -18,18 +21,19 @@ namespace Selector.CLI
static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) => {
.ConfigureServices((context, services) =>
{
Console.WriteLine("~~~ Selector CLI ~~~");
Console.WriteLine("");
Console.WriteLine();
Console.WriteLine("> Configuring...");
// CONFIG
services.Configure<RootOptions>(options => {
context.Configuration.GetSection(RootOptions.Key).Bind(options);
context.Configuration.GetSection($"{RootOptions.Key}:{WatcherOptions.Key}").Bind(options.WatcherOptions);
services.Configure<RootOptions>(options =>
{
OptionsHelper.ConfigureOptions(options, context.Configuration);
});
var config = context.Configuration.GetSection(RootOptions.Key).Get<RootOptions>();
var config = OptionsHelper.ConfigureOptions(context.Configuration);
Console.WriteLine("> Adding Services...");
// SERVICES
@ -40,7 +44,15 @@ namespace Selector.CLI
//services.AddSingleton<IRefreshTokenFactoryProvider, RefreshTokenFactoryProvider>();
services.AddSingleton<IRefreshTokenFactoryProvider, CachingRefreshTokenFactoryProvider>();
switch(config.Equality)
if (config.DatabaseOptions.Enabled)
{
Console.WriteLine("> Adding Databse Context...");
services.AddDbContext<SelectorContext>(options =>
options.UseNpgsql(config.DatabaseOptions.ConnectionString)
);
}
switch (config.Equality)
{
case EqualityChecker.Uri:
Console.WriteLine("> Using Uri Equality");
@ -53,14 +65,15 @@ namespace Selector.CLI
}
// HOSTED SERVICES
if(config.WatcherOptions.Enabled)
if (config.WatcherOptions.Enabled)
{
Console.WriteLine("> Adding Watcher Service");
services.AddHostedService<WatcherService>();
}
})
.ConfigureLogging((context, builder) => {
.ConfigureLogging((context, builder) =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog(context.Configuration);

View File

@ -12,6 +12,9 @@
"consumers": [ "audiofeatures" ]
}
]
},
"Database": {
"enabled": true
}
},
"Logging": {

View File

@ -43,10 +43,10 @@ namespace Selector.Web
services.Configure<IdentityOptions>(options =>
{
// Password settings.
//options.Password.RequireDigit = true;
//options.Password.RequireLowercase = true;
//options.Password.RequireNonAlphanumeric = true;
//options.Password.RequireUppercase = true;
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 3;
options.Password.RequiredUniqueChars = 1;