using Backend.Entitys; using Backend.Logic; using Backend.LogicResults; using Backend.Security; using Backend.Security.Authorization; using Microsoft.AspNetCore.Mvc; namespace Backend.Controllers; [ApiController] [Route("users")] public class UserController : ControllerBase { private readonly UserLogic _logic; private readonly ITokenContext _context; public UserController(UserLogic logic, ITokenContext context) { _logic = logic; _context = context; } [HttpGet] [Authorized(Permissions.ShowUsers)] public ActionResult> GetUsers() { return this.FromLogicResult(_logic.GetUsers()); } [HttpPut("login")] public ActionResult Login([FromBody] UserLogin login) { return this.FromLogicResult(_logic.Login(login)); } [HttpPost("register")] public ActionResult Register([FromBody] UserEditor editor) { return this.FromLogicResult(_logic.Register(editor)); } [HttpGet("token")] [Authorized] public ActionResult GetToken() { return this.FromLogicResult(_logic.GenerateToken(_logic.GetCurrentUserRefreshToken())); } [HttpGet("{userId}")] [Authorized(Permissions.ShowUsers)] public ActionResult GetUser(Guid userId) { return this.FromLogicResult(_logic.GetUser(userId)); } [HttpGet("self")] [Authorized] public ActionResult GetOwnUser() { return this.FromLogicResult(_logic.GetUser(_context.UserId)); } [HttpPut("{userId}")] [Authorized(Permissions.EditUsers)] public ActionResult EditUser(Guid userId, [FromBody] UserEditor editor) { return this.FromLogicResult(_logic.EditUser(userId, editor)); } [HttpDelete("{userId}")] [Authorized(Permissions.DeleteUsers)] public ActionResult DeleteUser(Guid userId) { return this.FromLogicResult(_logic.DeleteUser(userId)); } [HttpGet("{userId}/permissions")] [Authorized(Permissions.ShowUserPermissions)] public ActionResult> GetUserPermissions(Guid userId) { return this.FromLogicResult(_logic.GetPermissions(userId)); } [HttpGet("{userId}/permissions/raw")] [Authorized(Permissions.ShowUserPermissions)] public ActionResult> GetUserPermissionsRaw(Guid userId) { return this.FromLogicResult(_logic.GetPermissionsRaw(userId)); } [HttpPost("{userId}/permissions")] [Authorized(Permissions.EditUserPermissions, Permissions.EditOwnPermissions)] public ActionResult AddUserPermissions(Guid userId, [FromBody] string[] permissions) { return this.FromLogicResult(_logic.AddPermissions(userId, permissions)); } [HttpPut("{userId}/permissions")] [Authorized(Permissions.EditUserPermissions, Permissions.EditOwnPermissions)] public ActionResult DeleteUserPermissions(Guid userId, [FromBody] string[] permissions) { return this.FromLogicResult(_logic.DeletePermissions(userId, permissions)); } [HttpDelete("{userId}/logout")] [Authorized(Permissions.LogoutUsers)] public ActionResult Logout(Guid userId) { return this.FromLogicResult(_logic.Logout(userId)); } }