using Domain.Identity; using Infrastructure; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Models.Identity; using Services.Identity; using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Hosting; namespace Api.Controllers { [ApiController] [EnableCors("AllowAll")] public class AuthController : BaseController { private readonly IAuthService authService; private readonly IWebHostEnvironment _hostingEnvironment; public AuthController(IServiceProvider serviceProvider) : base(serviceProvider) { authService=serviceProvider.GetService(); } [HttpPost] [ProducesResponseType(typeof(OtpRequestResult), StatusCodes.Status200OK)] public async Task SignUp([FromBody] SignUpModel model) { var existed = authService.GetByUsername(model.Email) != null; if (existed) { return BadRequest("Email is already registered!"); } var account = new Account { Email = model.Email, Username = model.Email, Password = model.Password, Name = model.Name }; authService.Add(account); var token = await authService.GenerateLoginToken(account); return Ok(new OtpRequestResult()); } [HttpPost] [ProducesResponseType(typeof(PlainToken), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task Login([FromBody] LoginModel model) { var account = await authService.GetByUsernameAndPassword(model.Username, model.Password); if (account == null) return Unauthorized(); var loginToken = await authService.GenerateLoginToken(account); var plainToken = await authService.GeneratePlainToken(account, loginToken.Token); if (plainToken == null) return Unauthorized(); return Ok(plainToken); } [HttpGet] [ProducesResponseType(typeof(CheckLoginResponse), statusCode: StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public IActionResult Check() { var u = User; try { var res = Mapper.Map(CurrentAccount); try { res.IsDeveloper = User.IsInRole(Consts.Developer); } catch { } return Ok(res); } catch (Exception) { return Unauthorized(); } } } }