Files
server/src/Api/Controllers/AuthController.cs

67 lines
2.2 KiB
C#
Raw Normal View History

2015-12-08 22:57:38 -05:00
using System;
using System.Threading.Tasks;
2016-05-19 19:10:24 -04:00
using Microsoft.AspNetCore.Mvc;
2015-12-08 22:57:38 -05:00
using Bit.Core.Identity;
2017-03-08 21:55:08 -05:00
using Bit.Core.Models.Api;
2016-05-19 19:10:24 -04:00
using Microsoft.AspNetCore.Authorization;
2015-12-08 22:57:38 -05:00
using Bit.Core.Exceptions;
using Bit.Core.Services;
2015-12-08 22:57:38 -05:00
namespace Bit.Api.Controllers
{
[Obsolete]
2015-12-08 22:57:38 -05:00
[Route("auth")]
public class AuthController : Controller
{
private readonly JwtBearerSignInManager _signInManager;
private readonly IUserService _userService;
2015-12-08 22:57:38 -05:00
public AuthController(
JwtBearerSignInManager signInManager,
IUserService userService)
2015-12-08 22:57:38 -05:00
{
_signInManager = signInManager;
_userService = userService;
2015-12-08 22:57:38 -05:00
}
[HttpPost("token")]
[AllowAnonymous]
public async Task<AuthTokenResponseModel> PostToken([FromBody]AuthTokenRequestModel model)
{
var result = await _signInManager.PasswordSignInAsync(model.Email.ToLower(), model.MasterPasswordHash,
model.Device?.ToDevice());
2015-12-08 22:57:38 -05:00
if(result == JwtBearerSignInResult.Success)
{
return new AuthTokenResponseModel(result.Token, result.User);
}
else if(result == JwtBearerSignInResult.TwoFactorRequired)
{
return new AuthTokenResponseModel(result.Token, null);
}
await Task.Delay(2000);
throw new BadRequestException("Username or password is incorrect. Try again.");
}
[HttpPost("token/two-factor")]
[Authorize("TwoFactor")]
public async Task<AuthTokenResponseModel> PostTokenTwoFactor([FromBody]AuthTokenTwoFactorRequestModel model)
{
var user = await _userService.GetUserByPrincipalAsync(User);
2017-06-02 13:17:46 -04:00
if(user == null)
{
throw new UnauthorizedAccessException();
}
var result = await _signInManager.TwoFactorSignInAsync(user, model.Provider, model.Code, model.Device?.ToDevice());
2015-12-08 22:57:38 -05:00
if(result == JwtBearerSignInResult.Success)
{
return new AuthTokenResponseModel(result.Token, result.User);
}
await Task.Delay(2000);
throw new BadRequestException("Code is not correct. Try again.");
}
}
}