Пример #1
0
        public async Task <IActionResult> Validate([FromQuery] string token)
        {
            TempUser savedUser;

            try
            {
                // Get our Saved User from Memory
                savedUser = new CheckValidationTokenEvent().Process(_memoryCache, token);
            }
            catch (CheckValidationTokenException e)
            {
                return(Redirect($"{_config.Urls.Frontend}/{_config.Pages.ResendPage}"));
            }
            savedUser.PhoneNumber = savedUser.PhoneNumber.CleanPhone();
            var exisitingUser = _context.AllUsers.FirstOrDefault(x => x.Id == savedUser.Id);

            // we  have a user at this point, otherwise we would have thrown our processer error earlier

            // A new user, validate the first avaible sms
            if (!exisitingUser.Enabled)
            {
                // we call in order the Enable and Create events, which handle the prerequiste logic for handling either case
                exisitingUser = new EnableUserEvent().Process(_context, token, exisitingUser, savedUser);
            }
            else
            {
                // for exisiting users we dont need to create them but just to possibly validate a new communication channel
                exisitingUser = new ValidateExistingUserCommunication().Process(_context, savedUser);
            }
            var endToken = await _tokenService.GetToken(exisitingUser);

            return(Redirect($"{_config.Urls.Frontend}/{_config.Pages.AccountPage}?user={endToken.UserId}&token={endToken.Token}"));
        }
Пример #2
0
        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));
        }