/** * Construct a new TOTP configuration. * * @param integer|null $digits The number of password digits. * @param integer|null $window The number of seconds each token is valid for. * @param integer|null $futureWindows The number of future windows to check. * @param integer|null $pastWindows The number of past windows to check. * @param integer|null $secretLength The length of the shared secret. * @param HotpHashAlgorithm|null $algorithm The underlying algorithm to use. * * @throws InvalidPasswordLengthException If the number of digits is invalid. */ public function __construct($digits = null, $window = null, $futureWindows = null, $pastWindows = null, $secretLength = null, HotpHashAlgorithm $algorithm = null) { if (null !== $digits && $digits > 10) { throw new InvalidPasswordLengthException($digits); } if (null === $algorithm) { $algorithm = HotpHashAlgorithm::SHA1(); } parent::__construct($digits, $window, $futureWindows, $pastWindows, $secretLength); $this->algorithm = $algorithm; }
/** * Create an OTP URI for use with Google Authenticator. * * Note that this is not a URI for the QR code used by Google Authenticator. * The URI produced by this method is used as the actual content of the QR * code, and follows a special set of conventions understood by Google * Authenticator, and other OTP apps. * * @param string $type The otp type identifier. * @param string $parameters Additional URI parameters. * @param HotpBasedConfigurationInterface $configuration The OTP configuration. * @param OtpSharedParametersInterface $shared The shared parameters. * @param string $label The label for the account. * @param string|null $issuer The issuer name. * @param boolean|null $issuerInLabel True if legacy issuer support should be enabled by prefixing the label with the issuer name. * * @return string The OTP URI. */ protected function buildUri($type, $parameters, HotpBasedConfigurationInterface $configuration, OtpSharedParametersInterface $shared, $label, $issuer = null, $issuerInLabel = null) { if (null === $issuerInLabel) { $issuerInLabel = false; } if (6 !== $configuration->digits()) { $parameters .= '&digits=' . rawurlencode($configuration->digits()); } if (HotpHashAlgorithm::SHA1() !== $configuration->algorithm()) { $parameters .= '&algorithm=' . rawurlencode($configuration->algorithm()->value()); } $legacyIssuer = ''; if (null !== $issuer) { if ($issuerInLabel) { $legacyIssuer = rawurlencode($issuer) . ':'; } $parameters .= '&issuer=' . rawurlencode($issuer); } return sprintf('otpauth://%s/%s%s?secret=%s%s', rawurlencode($type), $legacyIssuer, rawurlencode($label), rawurlencode(Base32::encode($shared->secret())), $parameters); }