public static void Init() { contextOptsBuilder = new DbContextOptionsBuilder <AccountStoreContext>(); contextOptsBuilder.UseInMemoryDatabase("AccountTests"); accountDbContext = new AccountStoreContext(contextOptsBuilder.Options); controllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() }; }
public async Task AutheticateAsync([FromServices] IPasswordHasher <Account> pwdValidator, [FromServices] AccountStoreContext dataContext, AuthModel authModel) { try { var account = await dataContext.Accounts.SingleOrDefaultAsync(account => account.Username == authModel.Username); if (account == null) { Response.StatusCode = (int)HttpStatusCode.NotFound; await Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes("Usuário não cadastrado")); } else { if (account.Enable) { var pwdVerificationResult = pwdValidator.VerifyHashedPassword(account, account.PasswordHash, authModel.Password); Response.StatusCode = (int)(pwdVerificationResult != PasswordVerificationResult.Failed ? HttpStatusCode.OK : HttpStatusCode.Unauthorized); switch (pwdVerificationResult) { case PasswordVerificationResult.SuccessRehashNeeded: case PasswordVerificationResult.Success: await Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes("JWT")); break; default: await Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes("Senha incorreta")); break; } } else { Response.StatusCode = (int)HttpStatusCode.Unauthorized; await Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes("Usuário não autorizado")); } } } catch (Exception ex) { Response.StatusCode = (int)HttpStatusCode.InternalServerError; await Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes(ex.Message)); } }