Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull provider configuration from database #203

Merged
merged 22 commits into from
Sep 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2f2354a
Tagging interface for provider config items and table storage for set…
NapalmCodes Sep 6, 2023
07f2f5d
Merge branch 'main' into dev
NapalmCodes Sep 7, 2023
77a3739
Changes to accomodate jsonb storage of provider config and wip to use…
NapalmCodes Sep 8, 2023
5a12829
Proof of concept retrieving config from DB for Mastodon
NapalmCodes Sep 8, 2023
4c45b68
Twitter reading config from database
NapalmCodes Sep 8, 2023
37f7e74
Youtube config from database
NapalmCodes Sep 8, 2023
6cecadd
TwitchChat provider config load via database and youtube provider fix
NapalmCodes Sep 8, 2023
0955b59
Blazot provider
NapalmCodes Sep 8, 2023
d58869d
Cleanup
NapalmCodes Sep 8, 2023
6623c9c
Fix DI use of provider config repo
NapalmCodes Sep 9, 2023
8441c66
Transition to dictionary provider config and restore in memory functi…
NapalmCodes Sep 11, 2023
72217d8
Cleanup un-used method.
NapalmCodes Sep 11, 2023
97b5248
More cleanup
NapalmCodes Sep 11, 2023
12f15b5
Fix playwright tests and interface contract
NapalmCodes Sep 11, 2023
ead45f2
Merge branch 'FritzAndFriends:main' into dev
Sep 11, 2023
296a81f
Merge branch 'FritzAndFriends:main' into dev
Sep 12, 2023
4e783e1
Merge main latest
NapalmCodes Sep 15, 2023
727a2e9
Merge branch 'dev' of https://github.com/napalm684/TagzApp into dev
NapalmCodes Sep 15, 2023
524c652
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 15, 2023
c21448e
Catch up to main
NapalmCodes Sep 26, 2023
360eeff
InMemoryDatabase should not try to map jsonb nav property
NapalmCodes Sep 27, 2023
8700336
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions src/TagzApp.Common/IConfigureProvider.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace TagzApp.Common;

/// <summary>
/// An interface to configure the services for a Social Media Provider
/// </summary>
public interface IConfigureProvider
{

/// <summary>
/// Register all of the services with dependency injection for the social media provider
/// </summary>
/// <param name="services">The dependency injection services</param>
/// <param name="configuration">Application Configuration</param>
/// <returns></returns>
IServiceCollection RegisterServices(IServiceCollection services, IConfiguration configuration);

}
using Microsoft.Extensions.DependencyInjection;

namespace TagzApp.Common;

/// <summary>
/// An interface to configure the services for a Social Media Provider
/// </summary>
public interface IConfigureProvider
{
/// <summary>
/// Register all of the services with dependency injection for the social media provider
/// </summary>
/// <param name="services">The dependency injection services</param>
/// <param name="cancellationToken"></param>
/// <returns>Service Collection</returns>
Task<IServiceCollection> RegisterServices(IServiceCollection services, CancellationToken cancellationToken = default);

}
6 changes: 6 additions & 0 deletions src/TagzApp.Common/IProviderConfigurationRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TagzApp.Common;

public interface IProviderConfigurationRepository
{
Task<ProviderConfiguration?> GetConfigurationSettingsAsync(string name, CancellationToken cancellationToken = default);
}
42 changes: 42 additions & 0 deletions src/TagzApp.Common/InMemoryProviderConfigurationRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using Microsoft.Extensions.Configuration;

namespace TagzApp.Common;
public class InMemoryProviderConfigurationRepository : IProviderConfigurationRepository
{
private readonly IConfiguration _Configuration;

public InMemoryProviderConfigurationRepository(IConfiguration configuration)
{
_Configuration = configuration;
}

public async Task<ProviderConfiguration> GetConfigurationSettingsAsync(string name, CancellationToken cancellationToken = default)
{
var appSettingsSection = $"providers:{name.ToLower()}";
var providerConfig = new ProviderConfiguration
{
Name = name,
};

var configSettings = _Configuration.GetSection(appSettingsSection).GetChildren();

foreach (var configSetting in configSettings)
{
if (configSetting.Key == "Activated")
{
providerConfig.Activated = bool.Parse(configSetting.Value ?? "false");
continue;
}

if (configSetting.Key == "Description")
{
providerConfig.Description = configSetting.Value ?? string.Empty;
continue;
}

providerConfig.ConfigurationSettings!.Add(configSetting.Key, configSetting.Value ?? string.Empty);
}

return await Task.FromResult(providerConfig);
}
}
15 changes: 15 additions & 0 deletions src/TagzApp.Common/Models/ProviderConfiguration.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace TagzApp.Common.Models;

public class ProviderConfiguration
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public Dictionary<string, string>? ConfigurationSettings { get; set; }
public bool Activated { get; set; }

public ProviderConfiguration()
{
ConfigurationSettings = new Dictionary<string, string>();
}
}
23 changes: 23 additions & 0 deletions src/TagzApp.Communication/BaseConfigurationProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace TagzApp.Communication;

public abstract class BaseConfigurationProvider
{
private readonly IProviderConfigurationRepository _ProviderConfigurationRepository;

public BaseConfigurationProvider(IProviderConfigurationRepository providerConfigurationRepository)
{
_ProviderConfigurationRepository = providerConfigurationRepository;
}

protected abstract void MapConfigurationValues(ProviderConfiguration providerConfiguration);

protected async Task LoadConfigurationValuesAsync(string providerName, CancellationToken cancellationToken = default)
{
var providerConfiguration = await _ProviderConfigurationRepository.GetConfigurationSettingsAsync(providerName, cancellationToken);

if (providerConfiguration != null)
{
MapConfigurationValues(providerConfiguration);
}
}
}
22 changes: 13 additions & 9 deletions src/TagzApp.Communication/BaseProviderManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,31 @@ public class BaseProviderManager
private readonly IServiceCollection _Services;
private readonly IConfiguration _Configuration;
private readonly ILogger<BaseProviderManager> _Logger;
private readonly IProviderConfigurationRepository? _ProviderConfigurationRepository;

public IEnumerable<ISocialMediaProvider> Providers { get; private set; }

public BaseProviderManager(IConfiguration configuration, ILogger<BaseProviderManager> logger,
IEnumerable<ISocialMediaProvider>? socialMediaProviders)
IEnumerable<ISocialMediaProvider>? socialMediaProviders,
IProviderConfigurationRepository? providerConfigurationRepository)
{
_Services = new ServiceCollection();
_Configuration = configuration;
_Logger = logger;
_ProviderConfigurationRepository = providerConfigurationRepository;
Providers = socialMediaProviders != null && socialMediaProviders.Count() > 0
? socialMediaProviders : new List<ISocialMediaProvider>();
}

public void InitProviders()
public async Task InitProviders()
{
if (!Providers.Any())
{
LoadConfigurationProviders();
await LoadConfigurationProviders();
}
}

private void LoadConfigurationProviders()
private async Task LoadConfigurationProviders()
{
List<IConfigureProvider> configProviders = new();
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty;
Expand All @@ -41,7 +45,7 @@ private void LoadConfigurationProviders()
foreach (string dllPath in Directory.GetFiles(path, "*.dll", SearchOption.AllDirectories))
{

if (dllPath.Contains("Microsoft.") || dllPath.Contains("System.")) continue;
if (dllPath.Contains("Microsoft.") || dllPath.Contains("System.") || dllPath.Contains("AspNet.") || dllPath.Contains("Azure.")) continue;

try
{
Expand All @@ -53,7 +57,7 @@ private void LoadConfigurationProviders()
{
foreach (var provider in providerAssemblies)
{
var providerInstance = Activator.CreateInstance(provider) as IConfigureProvider;
var providerInstance = Activator.CreateInstance(provider, _ProviderConfigurationRepository) as IConfigureProvider;

if (providerInstance != null)
{
Expand All @@ -72,17 +76,17 @@ private void LoadConfigurationProviders()
}
}

ConfigureProviders(configProviders);
await ConfigureProviders(configProviders);
}
}

private void ConfigureProviders(IEnumerable<IConfigureProvider> configurationProviders)
private async Task ConfigureProviders(IEnumerable<IConfigureProvider> configurationProviders)
{
var socialMediaProviders = new List<ISocialMediaProvider>();

foreach (var provider in configurationProviders)
{
provider.RegisterServices(_Services, _Configuration);
await provider.RegisterServices(_Services);
}

_Services.AddPolicies(_Configuration);
Expand Down
Loading