mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-19 18:11:36 +01:00
b8da6847b9
* Plugins flexibility PR * Makes the BTCPayServerOptions.LoadArgs async to support Plugin hooks and actions * relax the private set modifiers in the BTCPayNetwork * Separate IPluginHookService from PluginService to reduce dependencies on DI * fix some small bugs around image path * Fix bug with new dbreeze migration where data dir was incorrect * Update BTCPayServer/Plugins/PluginHookService.cs Co-authored-by: rockstardev <5191402+rockstardev@users.noreply.github.com> * Update BTCPayServer/Plugins/PluginHookService.cs Co-authored-by: rockstardev <5191402+rockstardev@users.noreply.github.com> Co-authored-by: rockstardev <5191402+rockstardev@users.noreply.github.com>
63 lines
2.1 KiB
C#
63 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Abstractions.Contracts;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace BTCPayServer.Plugins
|
|
{
|
|
public class PluginHookService : IPluginHookService
|
|
{
|
|
private readonly IEnumerable<IPluginHookAction> _actions;
|
|
private readonly IEnumerable<IPluginHookFilter> _filters;
|
|
private readonly ILogger<PluginHookService> _logger;
|
|
|
|
public PluginHookService(IEnumerable<IPluginHookAction> actions, IEnumerable<IPluginHookFilter> filters,
|
|
ILogger<PluginHookService> logger)
|
|
{
|
|
_actions = actions;
|
|
_filters = filters;
|
|
_logger = logger;
|
|
}
|
|
|
|
// Trigger simple action hook for registered plugins
|
|
public async Task ApplyAction(string hook, object args)
|
|
{
|
|
var filters = _actions
|
|
.Where(filter => filter.Hook.Equals(hook, StringComparison.InvariantCultureIgnoreCase)).ToList();
|
|
foreach (IPluginHookAction pluginHookFilter in filters)
|
|
{
|
|
try
|
|
{
|
|
await pluginHookFilter.Execute(args);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
_logger.LogError(e, $"Action on hook {hook} failed");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Trigger hook on which registered plugins can optionally return modified args or new object back
|
|
public async Task<object> ApplyFilter(string hook, object args)
|
|
{
|
|
var filters = _filters
|
|
.Where(filter => filter.Hook.Equals(hook, StringComparison.InvariantCultureIgnoreCase)).ToList();
|
|
foreach (IPluginHookFilter pluginHookFilter in filters)
|
|
{
|
|
try
|
|
{
|
|
args = await pluginHookFilter.Execute(args);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
_logger.LogError(e, $"Filter on hook {hook} failed");
|
|
}
|
|
}
|
|
|
|
return args;
|
|
}
|
|
}
|
|
}
|