/// <summary> /// Validates wether given key is valid. If not throws status code exception bad request. If is valid returns userid /// </summary> /// <param name="key"></param> /// <param name="verificationType"></param> /// <returns>User id</returns> public async Task <User> ValidateVerificationKey(string key, UserVerificationType verificationType) { var decodedKey = HttpUtility.UrlDecode(key); var userVerificationModel = _encryptionService.DecryptModel <UserVerificationModel>(decodedKey); var user = await _entityRepository.GetEntity <User>(x => x.Id == userVerificationModel.UserId); if (user == null) { throw new StatusCodeException(HttpStatusCode.BadRequest); } if (_dateTimeProvider.Now > userVerificationModel.ExpirationDate) { throw new StatusCodeException(HttpStatusCode.BadRequest); } if (userVerificationModel.UserVerificationType != verificationType) { throw new StatusCodeException(HttpStatusCode.BadRequest); } return(user); }