87 lines
2.4 KiB
C#
87 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using ProjectManager.Backend.Entities;
|
|
using ProjectManager.Backend.Security;
|
|
using ProjectManager.Backend.Apis;
|
|
|
|
namespace ProjectManager.Backend.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("users")]
|
|
public sealed class UserController : ControllerBase {
|
|
private readonly IUserApi _users;
|
|
private readonly ITokenApi _tokens;
|
|
private readonly ITokenContext _context;
|
|
|
|
public UserController(IUserApi users, ITokenApi tokens, ITokenContext context) {
|
|
_users = users;
|
|
_tokens = tokens;
|
|
_context = context;
|
|
}
|
|
|
|
[HttpPost("login")]
|
|
public IActionResult Login([FromBody] User login) {
|
|
var user = _users.Login(login);
|
|
if (user == null) return Conflict();
|
|
return Ok(new {Token = _tokens.GetValidToken(user.UserId, HttpContext.Connection.RemoteIpAddress?.ToString())});
|
|
}
|
|
|
|
[HttpPost("register")]
|
|
public IActionResult Register([FromBody] User register) {
|
|
var user = _users.Register(register);
|
|
if (user is null) return Conflict();
|
|
return Ok(new {Token = _tokens.GetValidToken(user.UserId, HttpContext.Connection.RemoteIpAddress?.ToString())});
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpGet("token")]
|
|
public IActionResult CheckToken() {
|
|
return Ok(new {Valid = true});
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpGet("me")]
|
|
public IActionResult GetMe() {
|
|
return GetUser(_context.UserId);
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpGet]
|
|
public IActionResult GetUsers() {
|
|
return Ok(_users.GetUsers().Select(user => new User {
|
|
UserId = user.UserId,
|
|
Email = user.Email,
|
|
Username = user.Username
|
|
}));
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpGet("{userId}")]
|
|
public IActionResult GetUser(string userId) {
|
|
var user = _users.GetUser(userId);
|
|
|
|
if (user is null) return NotFound();
|
|
|
|
user = new() {
|
|
UserId = user.UserId,
|
|
Email = user.Email,
|
|
Username = user.Username
|
|
};
|
|
return Ok(user);
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpPut]
|
|
public IActionResult UpdateUser([FromBody] User user) {
|
|
if (_context.UserId != user.UserId) return Forbid();
|
|
if (!_users.UpdateUser(user)) return BadRequest();
|
|
return Ok();
|
|
}
|
|
|
|
[Authorized]
|
|
[HttpDelete]
|
|
public IActionResult DeleteUser() {
|
|
_users.DeleteUser(_context.UserId);
|
|
return Ok();
|
|
}
|
|
|
|
} |