Files
SocialPub/PrivaPub/Controllers/ClientToServer/AdminController.cs
T

101 lines
2.9 KiB
C#
Raw Normal View History

2023-02-18 08:52:17 +01:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
2023-02-19 00:43:43 +01:00
using PrivaPub.ClientModels;
using PrivaPub.ClientModels.User;
using PrivaPub.Extensions;
using PrivaPub.Resources;
using PrivaPub.Services;
2023-02-18 08:52:17 +01:00
using System.ComponentModel.DataAnnotations;
2023-02-19 00:43:43 +01:00
namespace PrivaPub.Controllers.ClientToServer
2023-02-18 08:52:17 +01:00
{
[ApiController,
Route("clientapi/admin")]
public class AdminController : ControllerBase
{
readonly IRootUsersService RootUsersService;
2023-02-19 00:43:43 +01:00
readonly ILogger<RootUserController> Logger;
2023-02-18 08:52:17 +01:00
readonly IStringLocalizer Localizer;
2023-02-19 00:43:43 +01:00
public AdminController(ILogger<RootUserController> logger,
2023-02-18 08:52:17 +01:00
IStringLocalizer<GenericRes> localizer,
IRootUsersService rootUsersService)
{
Logger = logger;
Localizer = localizer;
RootUsersService = rootUsersService;
}
// an administrator never removes, bans or unbans itself; the request's own list is left as it came
UsersIds Others(UsersIds usersIds)
{
var selfId = User.GetUserId();
return new UsersIds { UserIdList = usersIds.UserIdList.Where(id => id != selfId).ToList() };
}
2023-02-18 08:52:17 +01:00
[HttpDelete, Route("/clientapi/admin/remove/users"), Authorize(Policy = Policies.IsAdmin)]
public async Task<IActionResult> RemoveUsers([Required] UsersIds usersIds)
{
var result = new WebResult();
try
{
result = await RootUsersService.RemoveUserAsync(Others(usersIds));
2023-02-18 08:52:17 +01:00
if (!result.IsValid)
return StatusCode(result.StatusCode, result);
return Ok();
}
catch (Exception ex)
{
Logger.LogError(ex, $"{nameof(User)}.{nameof(RemoveUsers)}()");
return BadRequest(result.Invalidate(Localizer["Something went wrong."]));
2023-02-18 08:52:17 +01:00
}
}
[HttpPost, Authorize(Policy = Policies.IsAdmin), Route("/clientapi/admin/ban/users")]
public async Task<IActionResult> BanUsers([Required] UsersIds usersIds)
{
if (!ModelState.IsValid)
return BadRequest(usersIds);
var result = new WebResult();
try
{
result = await RootUsersService.BanUserAsync(Others(usersIds));
2023-02-18 08:52:17 +01:00
if (!result.IsValid)
return StatusCode(result.StatusCode, result);
return Ok();
}
catch (Exception ex)
{
Logger.LogError(ex, $"{nameof(User)}.{nameof(BanUsers)}()");
return BadRequest(result.Invalidate(Localizer["Something went wrong."]));
2023-02-18 08:52:17 +01:00
}
}
[HttpPost, Authorize(Policy = Policies.IsAdmin), Route("/clientapi/admin/unban/users")]
public async Task<IActionResult> UnbanUsers([Required] UsersIds usersIds)
{
if (!ModelState.IsValid)
return BadRequest(usersIds);
var result = new WebResult();
try
{
result = await RootUsersService.UnbanUserAsync(Others(usersIds));
2023-02-18 08:52:17 +01:00
if (!result.IsValid)
return StatusCode(result.StatusCode, result);
return Ok();
}
catch (Exception ex)
{
Logger.LogError(ex, $"{nameof(User)}.{nameof(UnbanUsers)}()");
return BadRequest(result.Invalidate(Localizer["Something went wrong."]));
2023-02-18 08:52:17 +01:00
}
}
}
}