public async Task <TokenInfo> GetToken(GenericUser user) { var refreshToken = new RefreshTempUser() { PhoneNumber = user.PhoneNumber }; var resValidate = await Post <SimpleSuccess>($"{Constants.V1Prefix}/{Constants.TokenEndpoint}/refresh", refreshToken); if (resValidate.Result == null || resValidate.Result.Success == false) { throw new Exception(resValidate.Meta.Message); } var checkToken = new TokenCheck() { PhoneNumber = user.PhoneNumber, Token = FakeToken }; var resRefreshToken = await Post <TokenInfo>($"{Constants.V1Prefix}/{Constants.TokenEndpoint}/validate", checkToken); if (resRefreshToken.Result == null) { throw new Exception(resValidate.Meta.Message); } return(resRefreshToken.Result); }
public bool AddTokenCheck(TokenCheck tokenCheck) { if (!TokenLedger) { return(false); } tokenCheck.tokensAmount = (int)AddTokensAmount((ulong)tokenCheck.tokensAmount); if (tokenCheck.tokensAmount == 0) { tokenCheck.Consume(); return(true); } return(false); }
public TempUser Process(ITokenMemoryCache memoryCache, TokenCheck model) { var savedUser = memoryCache.GetForChallenge(model); if (savedUser == null) { throw new CheckValidationTokenException("Customer never recieved a challenge token"); } if (!memoryCache.IsEqual(savedUser, model)) { throw new CheckValidationTokenException("Customer entered in wrong challenge token"); } return(savedUser); }
public async Task <IActionResult> Validate([FromBody] TokenCheck model) { // Get our Saved User from Memory var savedUser = new CheckValidationTokenEvent().Process(_memoryCache, model); var validatedUser = _context.Users.FirstOrDefault(x => x.PhoneNumber == savedUser.PhoneNumber); if (validatedUser == null) { // Our response is vague to avoid leaking information return(ResponseShell.Error("Invalid")); } validatedUser.LastLogin = DateTime.Now; _context.SaveChanges(); // Get our token var token = await _tokenService.GetToken(validatedUser); // All good, lets give out our token return(ResponseShell.Ok(token)); }
public TempUser GetForChallenge(TokenCheck model) { return(_cache.Get <TempUser>(model.Token)); }
public bool IsEqual(TempUser a, TokenCheck token) { return(a.Token == token.Token); }