/**
  * Verify a user token if it exists as part of the multi factor login process
  * 
  * Cyril Ogana <*****@*****.**> - 2016-07-05
  *
  * @return boolean
  * @throws UserCredentialException
  */
 protected function checkToken()
 {
     //instantiate MultiOtp Wrapper
     $multiOtpWrapper = new MultiotpWrapper();
     //get the username
     $currentUserName = $this->getCurrentUsername();
     //assert that username is set
     if (!\strlen((string) $currentUserName)) {
         throw new UserCredentialException('Cannot validate a TOTP token when username is not set!', 2106);
     }
     //assert that the token exists
     $tokenExists = $multiOtpWrapper->CheckTokenExists($currentUserName);
     if (!$tokenExists) {
         throw new UserCredentialException('The TOTP token for the current user does not exist', 2107);
     }
     //username mapped to their token name
     $multiOtpWrapper->setToken($currentUserName);
     //validate the Token
     $oneTimeToken = $this->getOneTimeToken();
     $tokenCheckResult = $multiOtpWrapper->CheckToken($oneTimeToken);
     //The results are reversed
     //TODO: Add intepretation of MultiOtp return results here to enable exception handling
     if ($tokenCheckResult == 0) {
         return true;
     } else {
         return false;
     }
 }
 /**
  * Generate a 6 digit SMS token
  * Cyril Ogana <*****@*****.**>
  * 2015-07-24
  * 
  * @return string
  * 
  * @param string $userName - The username
  * @param string $keyString - String to use as a salt
  * 
  * @access public
  * @static
  */
 public static function generateToken($userName, $keyString)
 {
     $userNameCast = (string) $userName;
     $keyStringCast = (string) $keyString;
     $multiOtpObj = new MultiotpWrapper($keyStringCast);
     return $multiOtpObj->GenerateSmsToken($userNameCast);
 }