public void ReturnsActivationRequestParams() { var otp = "123456"; var password = "******"; var secretKey = "secret key123456"; var otpToken = "otp token"; var userId = new Guid("{289D2B80-8FFA-43FC-996A-871CC5145308}"); var credentials = new OtpActivationRequest { Otp = otp, Password = password, OtpToken = otpToken }; var claimsPrincipal = new Mock <ClaimsPrincipal>().Object; _mock.Mock <ITokenClaimsPrincipalFactory>() .Setup(instance => instance.Create(otpToken)) .Returns(claimsPrincipal); _mock.Mock <IUserIdClaimValueProvider>() .Setup(instance => instance.GetValue()) .Returns(userId); _mock.Mock <IOtpSecretKeyClaimValueProvider>() .Setup(instance => instance.GetValue()) .Returns(secretKey); _mock.Mock <IFactory <ClaimsPrincipal, IUserIdClaimValueProvider> >() .Setup(factory => factory.Create(claimsPrincipal)) .Returns(_mock.Mock <IUserIdClaimValueProvider>().Object); _mock.Mock <IFactory <ClaimsPrincipal, IOtpSecretKeyClaimValueProvider> >() .Setup(factory => factory.Create(claimsPrincipal)) .Returns(_mock.Mock <IOtpSecretKeyClaimValueProvider>().Object); var provider = _mock.Create <OtpActivationRequestParamProvider>(); var actual = provider.Get(credentials); var secretKeyData = secretKey.FromBase32(config: Base32Config.Rfc); var expected = new OtpActivationRequestParams { Otp = otp, Password = password, SecretKey = secretKeyData, UserId = userId }; ContentAssert.AreEqual(expected, actual); }
public async Task <UserSettingsDTO> Activate([FromBody] OtpActivationRequest credentials) { var activationParams = _otpActivationRequestParamProvider.Get(credentials); if (activationParams == null) { throw new BadRequestException("OTP_INVALID_REQUEST"); } var result = await _otpActivationRequestValidationService.ValidateAsync(activationParams); if (result != "VALID") { throw new BadRequestException(result); } return(await _otpActivationService.ActivateAsync(activationParams)); }
public void ActivateReturnsBadResponseWhenRequestParamsNotValid() { var credentials = new OtpActivationRequest(); OtpActivationRequestParams activationParams = null; _mock.Mock <IOtpActivationRequestParamProvider>() .Setup(instance => instance.Get(credentials)) .Returns(activationParams); _mock.Mock <IOtpActivationRequestValidationService>() .Setup(instance => instance.ValidateAsync(activationParams)) .ReturnsAsync("VALID"); var controller = _mock.Create <AuthOtpController>(); var expected = new BadRequestException("OTP_INVALID_REQUEST"); ExceptionAssert.ThrowsAsync(expected, () => controller.Activate(credentials)); _mock.Mock <IOtpActivationService>() .Verify(instance => instance.ActivateAsync(activationParams), Times.Never); }
public OtpActivationRequestParams Get(OtpActivationRequest credentials) { var claimsPrincipal = _tokenClaimsPrincipalFactory.Create(credentials.OtpToken); if (claimsPrincipal == null) { return(null); } var userIdClaimValueProvider = _userIdClaimValueProviderFactory.Create(claimsPrincipal); var otpSecretKeyClaimValueProvider = _otpSecretKeyClaimValueProvider.Create(claimsPrincipal); var userId = userIdClaimValueProvider.GetValue(); var secretKey = otpSecretKeyClaimValueProvider.GetValue(); var secretKeyBytes = secretKey.FromBase32(config: Base32Config.Rfc); return(new OtpActivationRequestParams { UserId = userId, SecretKey = secretKeyBytes, Otp = credentials.Otp, Password = credentials.Password }); }
public async Task ActivateReturnsSuccessResponse() { var credentials = new OtpActivationRequest(); var activationParams = new OtpActivationRequestParams(); var userSettings = new UserSettingsDTO(); _mock.Mock <IOtpActivationRequestParamProvider>() .Setup(instance => instance.Get(credentials)) .Returns(activationParams); _mock.Mock <IOtpActivationRequestValidationService>() .Setup(instance => instance.ValidateAsync(activationParams)) .ReturnsAsync("VALID"); _mock.Mock <IOtpActivationService>() .Setup(instance => instance.ActivateAsync(activationParams)) .ReturnsAsync(userSettings); var controller = _mock.Create <AuthOtpController>(); var actual = await controller.Activate(credentials); ContentAssert.AreEqual(userSettings, actual); }