예제 #1
0
        /// <summary>
        /// Responsible for business lógic of token validation
        /// </summary>
        /// <param name="registrationDate"></param>
        /// <param name="token"></param>
        /// <param name="cvv"></param>
        /// <returns>boolean wich indicate if token is valid or not</returns>
        public async Task <bool> ValidateToken(DateTime registrationDate, long token, int cvv)
        {
            //pre validations
            validateCvv(cvv);
            validateRegistrationDate(registrationDate);

            if (token <= default(int) || token.ToString().Length == default(int))
            {
                return(false);
            }

            //if registration date toke toked more than 15 minutes
            if (registrationDate < DateTime.UtcNow.AddMinutes(-15))
            {
                return(false);
            }

            var dbCard = await _repository.Find(registrationDate);

            //haven't found Card so is an invalid token
            if (dbCard == null)
            {
                return(false);
            }

            //Create a new token
            var dbCardToken = await CreateToken(dbCard.CardNumber, cvv, registrationDate, true);

            //check if created token is the same of provided one and return
            return(token == dbCardToken);
        }