using System.Linq; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using TextSender_API.Models; using TextSender_API.Repositories; namespace TextSender_API.Controllers; [ApiController] [Route("api/v1/user")] public class UsersController : ControllerBase { #region Fields private readonly ILogger _logger; private IConfiguration _config; #endregion #region Constructors public UsersController(ILogger logger, IConfiguration config) { this._logger = logger; this._config = config; } #endregion #region Methods [HttpPost("login")] public IActionResult Login([FromBody] User userRequest) { var response = new LoginResponse(); try { var connString = this._config.GetConnectionString("MongoDBURI"); var userRepo = new UsersRepository(connString!); var saltRepo = new SaltRepository(connString!); var pwdVerify = new PasswordVerification(userRepo, saltRepo); var result = userRepo.Exists(userRequest); if (result.Item1 && pwdVerify.VerifyPassword(result.Item2, userRequest.Password!)) { response.Data.Add(result.Item2); Ok(response); } else { return NotFound(response); } } catch (Exception ex) { this._logger.LogError($"An error occurred: {ex.Message}"); } return Ok(response); } [HttpPost("register"), DisableRequestSizeLimit] public IActionResult Upload([FromBody] User userRequest) { var response = new RegisterUserResponse(); try { var connString = this._config.GetConnectionString("MongoDBURI"); var userRepo = new UsersRepository(connString!); var saltRepo = new SaltRepository(connString!); var allUsers = userRepo.RetrieveAllUsers(); var result = allUsers.Exists(ea => ea.Username!.Equals(userRequest.Username)); if (!result) { var pwdVerify = new PasswordVerification(userRepo, saltRepo); var salt = pwdVerify.CreateSalt(userRequest); var hashedPassword = pwdVerify.HashPassword(userRequest, salt); this._logger.LogInformation("Creating user"); userRequest.Password = hashedPassword; userRequest.DateCreated = DateTime.Now; userRepo.CreateUser(userRequest); response.Data.Add(userRequest); salt.UserId = userRequest.Id; saltRepo.Create(salt); } else { this._logger.LogInformation("User already exists"); } } catch (Exception ex) { this._logger.LogError($"An error occurred: {ex.Message}"); } return Ok(response); } #endregion #region Responses public class LoginResponse { #region Properties [JsonProperty("data")] public List Data { get; set; } #endregion #region Constructors public LoginResponse() { this.Data = new List(); } #endregion #region Methods #endregion } public class RegisterUserResponse { #region Properties [JsonProperty("data")] public List Data { get; set; } #endregion #region Constructors public RegisterUserResponse() { this.Data = new List(); } #endregion #region Methods #endregion } #endregion }