BotSharp/src/Infrastructure/BotSharp.OpenAPI/Controllers/PluginController.cs

83 lines
2.6 KiB
C#
Raw Normal View History

2023-10-11 04:11:06 +00:00
using BotSharp.Abstraction.Plugins.Models;
2024-05-15 22:30:45 +00:00
using BotSharp.Abstraction.Users.Enums;
2023-10-11 04:11:06 +00:00
using BotSharp.Core.Plugins;
namespace BotSharp.OpenAPI.Controllers;
[Authorize]
[ApiController]
public class PluginController : ControllerBase
{
private readonly IServiceProvider _services;
2024-05-15 22:30:45 +00:00
private readonly IUserIdentity _user;
2023-10-11 04:11:06 +00:00
private readonly PluginSettings _settings;
2024-05-15 22:30:45 +00:00
public PluginController(IServiceProvider services, IUserIdentity user, PluginSettings settings)
2023-10-11 04:11:06 +00:00
{
_services = services;
2024-05-15 22:30:45 +00:00
_user = user;
2023-10-11 04:11:06 +00:00
_settings = settings;
}
2024-01-23 17:32:28 +00:00
[HttpGet("/plugins")]
2024-05-15 22:30:45 +00:00
public async Task<PagedItems<PluginDef>> GetPlugins([FromQuery] PluginFilter filter)
2023-10-11 04:11:06 +00:00
{
2024-05-15 22:30:45 +00:00
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user?.Role != UserRole.Admin)
{
return new PagedItems<PluginDef>();
}
2023-10-11 04:11:06 +00:00
var loader = _services.GetRequiredService<PluginLoader>();
2024-01-22 23:26:48 +00:00
return loader.GetPagedPlugins(_services, filter);
2023-10-11 04:11:06 +00:00
}
2024-01-12 08:52:50 +00:00
[HttpGet("/plugin/menu")]
2024-05-15 22:30:45 +00:00
public async Task<List<PluginMenuDef>> GetPluginMenu()
2024-01-12 08:52:50 +00:00
{
2024-01-15 21:35:01 +00:00
var menu = new List<PluginMenuDef>
2024-01-12 08:52:50 +00:00
{
2024-01-15 21:35:01 +00:00
new PluginMenuDef("Apps", weight: 5)
{
IsHeader = true,
2024-05-15 22:30:45 +00:00
}
2024-01-12 08:52:50 +00:00
};
2024-01-15 21:35:01 +00:00
2024-05-15 22:30:45 +00:00
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user?.Role == UserRole.Admin)
{
menu.Add(new PluginMenuDef("System", weight: 30) { IsHeader = true });
menu.Add(new PluginMenuDef("Plugins", link: "page/plugin", icon: "bx bx-plug", weight: 31));
menu.Add(new PluginMenuDef("Settings", link: "page/setting", icon: "bx bx-cog", weight: 32));
}
2024-01-12 08:52:50 +00:00
var loader = _services.GetRequiredService<PluginLoader>();
2024-01-12 22:20:22 +00:00
foreach (var plugin in loader.GetPlugins(_services))
2024-01-12 08:52:50 +00:00
{
2024-01-12 22:20:22 +00:00
if (!plugin.Enabled)
{
continue;
}
2024-01-15 21:35:01 +00:00
plugin.Module.AttachMenu(menu);
2024-01-12 08:52:50 +00:00
}
2024-01-15 21:35:01 +00:00
menu = menu.OrderBy(x => x.Weight).ToList();
return menu;
2024-01-12 08:52:50 +00:00
}
2024-01-12 22:20:22 +00:00
[HttpPost("/plugin/{id}/install")]
public PluginDef InstallPlugin([FromRoute] string id)
2024-01-12 22:20:22 +00:00
{
var loader = _services.GetRequiredService<PluginLoader>();
return loader.UpdatePluginStatus(_services, id, true);
}
[HttpPost("/plugin/{id}/remove")]
public PluginDef RemovePluginStats([FromRoute] string id)
2024-01-12 22:20:22 +00:00
{
var loader = _services.GetRequiredService<PluginLoader>();
return loader.UpdatePluginStatus(_services, id, false);
}
2023-10-11 04:11:06 +00:00
}