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-11-14 23:33:26 +00:00
|
|
|
var isValid = await IsValidUser();
|
|
|
|
|
if (!isValid)
|
2024-05-15 22:30:45 +00:00
|
|
|
{
|
|
|
|
|
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:53:39 +00:00
|
|
|
},
|
|
|
|
|
new PluginMenuDef("System", weight: 30)
|
|
|
|
|
{
|
|
|
|
|
IsHeader = true,
|
2024-10-31 19:36:26 +00:00
|
|
|
Roles = new List<string> { UserRole.Root, UserRole.Admin }
|
2024-05-15 22:53:39 +00:00
|
|
|
},
|
|
|
|
|
new PluginMenuDef("Plugins", link: "page/plugin", icon: "bx bx-plug", weight: 31)
|
|
|
|
|
{
|
2024-10-31 19:36:26 +00:00
|
|
|
Roles = new List<string> { UserRole.Root, UserRole.Admin }
|
2024-05-15 22:53:39 +00:00
|
|
|
},
|
|
|
|
|
new PluginMenuDef("Settings", link: "page/setting", icon: "bx bx-cog", weight: 32)
|
|
|
|
|
{
|
2024-10-31 19:36:26 +00:00
|
|
|
Roles = new List<string> { UserRole.Root, UserRole.Admin }
|
|
|
|
|
},
|
2024-11-14 23:33:26 +00:00
|
|
|
new PluginMenuDef("Roles", link: "page/roles", icon: "bx bx-group", weight: 33)
|
|
|
|
|
{
|
|
|
|
|
Roles = new List<string> { UserRole.Root, UserRole.Admin }
|
|
|
|
|
},
|
|
|
|
|
new PluginMenuDef("Users", link: "page/users", icon: "bx bx-user", weight: 34)
|
2024-10-31 19:36:26 +00:00
|
|
|
{
|
|
|
|
|
Roles = new List<string> { UserRole.Root, UserRole.Admin }
|
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-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-05-15 22:53:39 +00:00
|
|
|
|
|
|
|
|
var userService = _services.GetRequiredService<IUserService>();
|
|
|
|
|
var user = await userService.GetUser(_user.Id);
|
2024-05-16 15:41:59 +00:00
|
|
|
menu = loader.GetPluginMenuByRoles(menu, user?.Role);
|
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
|
|
|
|
2024-01-29 18:08:49 +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);
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-29 18:08:49 +00:00
|
|
|
[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);
|
|
|
|
|
}
|
2024-11-14 23:33:26 +00:00
|
|
|
|
|
|
|
|
private async Task<bool> IsValidUser()
|
|
|
|
|
{
|
|
|
|
|
var userService = _services.GetRequiredService<IUserService>();
|
2024-11-15 02:23:45 +00:00
|
|
|
return await userService.IsAdminUser(_user.Id);
|
2024-11-14 23:33:26 +00:00
|
|
|
}
|
2023-10-11 04:11:06 +00:00
|
|
|
}
|