void.cat/VoidCat/Controllers/Admin/AdminController.cs

106 lines
3.1 KiB
C#
Raw Normal View History

2022-02-16 16:33:00 +00:00
using Microsoft.AspNetCore.Authorization;
2022-02-13 15:44:17 +00:00
using Microsoft.AspNetCore.Mvc;
2022-02-21 22:35:06 +00:00
using VoidCat.Model;
2022-02-22 14:20:31 +00:00
using VoidCat.Services.Abstractions;
using VoidCat.Services.Files;
2022-02-13 15:44:17 +00:00
namespace VoidCat.Controllers.Admin;
[Route("admin")]
2022-02-21 22:35:06 +00:00
[Authorize(Policy = Policies.RequireAdmin)]
2022-02-13 15:44:17 +00:00
public class AdminController : Controller
{
private readonly FileStoreFactory _fileStore;
2022-06-08 16:17:53 +00:00
private readonly IFileMetadataStore _fileMetadata;
private readonly IFileInfoManager _fileInfo;
2022-02-24 12:00:28 +00:00
private readonly IUserStore _userStore;
2022-06-13 20:26:42 +00:00
private readonly IUserUploadsStore _userUploads;
2022-02-22 14:20:31 +00:00
public AdminController(FileStoreFactory fileStore, IUserStore userStore, IFileInfoManager fileInfo,
2022-06-13 20:26:42 +00:00
IFileMetadataStore fileMetadata, IUserUploadsStore userUploads)
2022-02-22 14:20:31 +00:00
{
_fileStore = fileStore;
2022-02-24 12:00:28 +00:00
_userStore = userStore;
_fileInfo = fileInfo;
2022-06-08 16:17:53 +00:00
_fileMetadata = fileMetadata;
2022-06-13 20:26:42 +00:00
_userUploads = userUploads;
2022-02-22 14:20:31 +00:00
}
2022-03-08 13:47:42 +00:00
/// <summary>
/// List all files in the system
/// </summary>
/// <param name="request">Page request</param>
/// <returns></returns>
[HttpPost]
2022-02-22 14:20:31 +00:00
[Route("file")]
2022-02-24 12:00:28 +00:00
public async Task<RenderedResults<PublicVoidFile>> ListFiles([FromBody] PagedRequest request)
2022-02-22 14:20:31 +00:00
{
2022-06-08 16:17:53 +00:00
var files = await _fileMetadata.ListFiles<VoidFileMeta>(request);
return new()
{
Page = files.Page,
PageSize = files.PageSize,
TotalResults = files.TotalResults,
Results = (await files.Results.SelectAwait(a => _fileInfo.Get(a.Id)).ToListAsync())!
};
2022-02-22 14:20:31 +00:00
}
2022-03-08 13:47:42 +00:00
/// <summary>
/// Delete a file from the system
/// </summary>
/// <param name="id">Id of the file to delete</param>
2022-02-22 14:20:31 +00:00
[HttpDelete]
[Route("file/{id}")]
public async Task DeleteFile([FromRoute] string id)
2022-02-22 14:20:31 +00:00
{
var gid = id.FromBase58Guid();
await _fileStore.DeleteFile(gid);
await _fileInfo.Delete(gid);
2022-02-22 14:20:31 +00:00
}
2022-02-24 12:00:28 +00:00
2022-03-08 13:47:42 +00:00
/// <summary>
/// List all users in the system
/// </summary>
/// <param name="request">Page request</param>
/// <returns></returns>
2022-02-24 12:00:28 +00:00
[HttpPost]
2022-07-25 19:05:31 +00:00
[Route("users")]
2022-06-13 20:26:42 +00:00
public async Task<RenderedResults<AdminListedUser>> ListUsers([FromBody] PagedRequest request)
2022-02-24 12:00:28 +00:00
{
var result = await _userStore.ListUsers(request);
2022-06-13 20:26:42 +00:00
var ret = await result.Results.SelectAwait(async a =>
{
var uploads = await _userUploads.ListFiles(a.Id, new(0, int.MaxValue));
return new AdminListedUser(a, uploads.TotalResults);
}).ToListAsync();
2022-06-13 20:26:42 +00:00
return new()
{
PageSize = request.PageSize,
Page = request.Page,
TotalResults = result.TotalResults,
Results = ret
};
2022-02-24 12:00:28 +00:00
}
2022-06-13 20:26:42 +00:00
/// <summary>
/// Admin update user account
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[HttpPost]
2022-07-25 19:05:31 +00:00
[Route("update-user")]
public async Task<IActionResult> UpdateUser([FromBody] PrivateVoidUser user)
{
var oldUser = await _userStore.Get(user.Id);
if (oldUser == default) return BadRequest();
2022-07-25 19:38:58 +00:00
await _userStore.AdminUpdateUser(user);
return Ok();
}
2022-06-13 20:26:42 +00:00
public record AdminListedUser(PrivateVoidUser User, int Uploads);
}