Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

97 linhas
2.8 KiB

  1. using Domain.Identity;
  2. using Infrastructure;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Models.Identity;
  7. using Services.Identity;
  8. using System;
  9. using System.Threading.Tasks;
  10. using Microsoft.AspNetCore.Cors;
  11. using Microsoft.AspNetCore.Hosting;
  12. namespace Api.Controllers
  13. {
  14. [ApiController]
  15. [EnableCors("AllowAll")]
  16. public class AuthController : BaseController
  17. {
  18. private readonly IAuthService authService;
  19. private readonly IWebHostEnvironment _hostingEnvironment;
  20. public AuthController(IServiceProvider serviceProvider) : base(serviceProvider)
  21. {
  22. authService=serviceProvider.GetService<IAuthService>();
  23. }
  24. [HttpPost]
  25. [ProducesResponseType(typeof(OtpRequestResult), StatusCodes.Status200OK)]
  26. public async Task<IActionResult> SignUp([FromBody] SignUpModel model)
  27. {
  28. var existed = authService.GetByUsername(model.Email) != null;
  29. if (existed)
  30. {
  31. return BadRequest("Email is already registered!");
  32. }
  33. var account = new Account
  34. {
  35. Email = model.Email,
  36. Username = model.Email,
  37. Password = model.Password,
  38. Name = model.Name
  39. };
  40. authService.Add(account);
  41. var token = await authService.GenerateLoginToken(account);
  42. return Ok(new OtpRequestResult());
  43. }
  44. [HttpPost]
  45. [ProducesResponseType(typeof(PlainToken), StatusCodes.Status200OK)]
  46. [ProducesResponseType(StatusCodes.Status401Unauthorized)]
  47. public async Task<IActionResult> Login([FromBody] LoginModel model)
  48. {
  49. var account = await authService.GetByUsernameAndPassword(model.Username, model.Password);
  50. if (account == null) return Unauthorized();
  51. var loginToken = await authService.GenerateLoginToken(account);
  52. var plainToken = await authService.GeneratePlainToken(account, loginToken.Token);
  53. if (plainToken == null) return Unauthorized();
  54. return Ok(plainToken);
  55. }
  56. [HttpGet]
  57. [ProducesResponseType(typeof(CheckLoginResponse), statusCode: StatusCodes.Status200OK)]
  58. [ProducesResponseType(StatusCodes.Status401Unauthorized)]
  59. public IActionResult Check()
  60. {
  61. var u = User;
  62. try
  63. {
  64. var res = Mapper.Map<CheckLoginResponse>(CurrentAccount);
  65. try
  66. {
  67. res.IsDeveloper = User.IsInRole(Consts.Developer);
  68. }
  69. catch
  70. {
  71. }
  72. return Ok(res);
  73. }
  74. catch (Exception)
  75. {
  76. return Unauthorized();
  77. }
  78. }
  79. }
  80. }