| @@ -116,7 +116,7 @@ discard block | ||
| 116 | 116 | // INVALID_USERID: The client authenticated a different user than the server expected. This error is returned when | 
| 117 | 117 | // the application stated an authentication session specifying the userId and later during the authentication | 
| 118 | 118 | // provides a different userId | 
| 119 | - const AUTH_RESULT_INVALID_USERID = 5; | |
| 119 | + const AUTH_RESULT_INVALID_USERID = 5; | |
| 120 | 120 | |
| 121 | 121 | /** | 
| 122 | 122 | * The default OCRA Suite (RFC 6287) to use for authentication in Tiqr | 
| @@ -240,7 +240,7 @@ discard block | ||
| 240 | 240 | * @param int $version The tiqr protocol version to use (defaults to the latest) | 
| 241 | 241 | * @throws Exception | 
| 242 | 242 | */ | 
| 243 | - public function __construct(LoggerInterface $logger, array $options=array(), int $version = 2) | |
| 243 | + public function __construct(LoggerInterface $logger, array $options = array(), int $version = 2) | |
| 244 | 244 |      { | 
| 245 | 245 | $this->_options = $options; // Used to later get settings for Tiqr_Message_* | 
| 246 | 246 | $this->logger = $logger; | 
| @@ -354,7 +354,7 @@ discard block | ||
| 354 | 354 | |
| 355 | 355 |              $this->logger->info(sprintf('Creating and sending a %s push notification', $notificationType)); | 
| 356 | 356 | $message->setId(time()); | 
| 357 | -            $message->setText("Please authenticate for " . $this->_name); | |
| 357 | +            $message->setText("Please authenticate for ".$this->_name); | |
| 358 | 358 | $message->setAddress($notificationAddress); | 
| 359 | 359 |              $message->setCustomProperty('challenge', $this->_getChallengeUrl($sessionKey)); | 
| 360 | 360 | $message->send(); | 
| @@ -400,13 +400,13 @@ discard block | ||
| 400 | 400 | * @return string The authentication sessionKey | 
| 401 | 401 | * @throws Exception when starting the authentication session failed | 
| 402 | 402 | */ | 
| 403 | - public function startAuthenticationSession(string $userId="", string $sessionId="", string $spIdentifier=""): string | |
| 403 | + public function startAuthenticationSession(string $userId = "", string $sessionId = "", string $spIdentifier = ""): string | |
| 404 | 404 |      { | 
| 405 | -        if ($sessionId=="") { | |
| 405 | +        if ($sessionId == "") { | |
| 406 | 406 | $sessionId = session_id(); | 
| 407 | 407 | } | 
| 408 | 408 | |
| 409 | -        if ($spIdentifier=="") { | |
| 409 | +        if ($spIdentifier == "") { | |
| 410 | 410 | $spIdentifier = $this->_identifier; | 
| 411 | 411 | } | 
| 412 | 412 | |
| @@ -415,11 +415,11 @@ discard block | ||
| 415 | 415 | |
| 416 | 416 |          $data = array("sessionId"=>$sessionId, "challenge"=>$challenge, "spIdentifier" => $spIdentifier); | 
| 417 | 417 | |
| 418 | -        if ($userId!="") { | |
| 418 | +        if ($userId != "") { | |
| 419 | 419 | $data["userId"] = $userId; | 
| 420 | 420 | } | 
| 421 | 421 | |
| 422 | - $this->_stateStorage->setValue(self::PREFIX_CHALLENGE . $sessionKey, $data, self::CHALLENGE_EXPIRE); | |
| 422 | + $this->_stateStorage->setValue(self::PREFIX_CHALLENGE.$sessionKey, $data, self::CHALLENGE_EXPIRE); | |
| 423 | 423 | |
| 424 | 424 | return $sessionKey; | 
| 425 | 425 | } | 
| @@ -439,9 +439,9 @@ discard block | ||
| 439 | 439 | * @return String The enrollment key | 
| 440 | 440 | * @throws Exception when start the enrollement session failed | 
| 441 | 441 | */ | 
| 442 | - public function startEnrollmentSession(string $userId, string $displayName, string $sessionId=""): string | |
| 442 | + public function startEnrollmentSession(string $userId, string $displayName, string $sessionId = ""): string | |
| 443 | 443 |      { | 
| 444 | -        if ($sessionId=="") { | |
| 444 | +        if ($sessionId == "") { | |
| 445 | 445 | $sessionId = session_id(); | 
| 446 | 446 | } | 
| 447 | 447 | $enrollmentKey = $this->_uniqueSessionKey(); | 
| @@ -450,7 +450,7 @@ discard block | ||
| 450 | 450 | "displayName" => $displayName, | 
| 451 | 451 | "sessionId" => $sessionId | 
| 452 | 452 | ]; | 
| 453 | - $this->_stateStorage->setValue(self::PREFIX_ENROLLMENT . $enrollmentKey, $data, self::ENROLLMENT_EXPIRE); | |
| 453 | + $this->_stateStorage->setValue(self::PREFIX_ENROLLMENT.$enrollmentKey, $data, self::ENROLLMENT_EXPIRE); | |
| 454 | 454 | $this->_setEnrollmentStatus($sessionId, self::ENROLLMENT_STATUS_INITIALIZED); | 
| 455 | 455 | |
| 456 | 456 | return $enrollmentKey; | 
| @@ -461,9 +461,9 @@ discard block | ||
| 461 | 461 | * @param string $sessionId The application's session identifier (defaults to php session) | 
| 462 | 462 | * @throws Exception when resetting the session failed | 
| 463 | 463 | */ | 
| 464 | - public function resetEnrollmentSession(string $sessionId=""): void | |
| 464 | + public function resetEnrollmentSession(string $sessionId = ""): void | |
| 465 | 465 |      { | 
| 466 | -        if ($sessionId=="") { | |
| 466 | +        if ($sessionId == "") { | |
| 467 | 467 | $sessionId = session_id(); | 
| 468 | 468 | } | 
| 469 | 469 | |
| @@ -498,9 +498,9 @@ discard block | ||
| 498 | 498 | * | 
| 499 | 499 | * @throws Exception when an error communicating with the state storage backend was detected | 
| 500 | 500 | */ | 
| 501 | - public function getEnrollmentStatus(string $sessionId=""): int | |
| 501 | + public function getEnrollmentStatus(string $sessionId = ""): int | |
| 502 | 502 |      {  | 
| 503 | -        if ($sessionId=="") { | |
| 503 | +        if ($sessionId == "") { | |
| 504 | 504 | $sessionId = session_id(); | 
| 505 | 505 | } | 
| 506 | 506 | $status = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT_STATUS.$sessionId); | 
| @@ -557,7 +557,7 @@ discard block | ||
| 557 | 557 | */ | 
| 558 | 558 | public function getEnrollmentMetadata(string $enrollmentKey, string $authenticationUrl, string $enrollmentUrl): array | 
| 559 | 559 |      { | 
| 560 | - $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT . $enrollmentKey); | |
| 560 | + $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT.$enrollmentKey); | |
| 561 | 561 |          if (!is_array($data)) { | 
| 562 | 562 |              $this->logger->error('Unable to find enrollment metadata in state storage'); | 
| 563 | 563 |              throw new Exception('Unable to find enrollment metadata in state storage'); | 
| @@ -576,7 +576,7 @@ discard block | ||
| 576 | 576 |                                 array("identifier" =>$data["userId"], | 
| 577 | 577 | "displayName"=>$data["displayName"])); | 
| 578 | 578 | |
| 579 | - $this->_stateStorage->unsetValue(self::PREFIX_ENROLLMENT . $enrollmentKey); | |
| 579 | + $this->_stateStorage->unsetValue(self::PREFIX_ENROLLMENT.$enrollmentKey); | |
| 580 | 580 | |
| 581 | 581 | $this->_setEnrollmentStatus($data["sessionId"], self::ENROLLMENT_STATUS_RETRIEVED); | 
| 582 | 582 | return $metadata; | 
| @@ -604,7 +604,7 @@ discard block | ||
| 604 | 604 | */ | 
| 605 | 605 | public function getEnrollmentSecret(string $enrollmentKey): string | 
| 606 | 606 |      { | 
| 607 | - $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT . $enrollmentKey); | |
| 607 | + $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT.$enrollmentKey); | |
| 608 | 608 |           if (!is_array($data)) { | 
| 609 | 609 |               $this->logger->error('getEnrollmentSecret: enrollment key not found'); | 
| 610 | 610 |               throw new RuntimeException('enrollment key not found'); | 
| @@ -620,7 +620,7 @@ discard block | ||
| 620 | 620 | ]; | 
| 621 | 621 | $enrollmentSecret = $this->_uniqueSessionKey(); | 
| 622 | 622 | $this->_stateStorage->setValue( | 
| 623 | - self::PREFIX_ENROLLMENT_SECRET . $enrollmentSecret, | |
| 623 | + self::PREFIX_ENROLLMENT_SECRET.$enrollmentSecret, | |
| 624 | 624 | $enrollmentData, | 
| 625 | 625 | self::ENROLLMENT_EXPIRE | 
| 626 | 626 | ); | 
| @@ -648,11 +648,11 @@ discard block | ||
| 648 | 648 | public function validateEnrollmentSecret(string $enrollmentSecret): string | 
| 649 | 649 |      { | 
| 650 | 650 |          try { | 
| 651 | - $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT_SECRET . $enrollmentSecret); | |
| 651 | + $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT_SECRET.$enrollmentSecret); | |
| 652 | 652 |              if (NULL === $data) { | 
| 653 | 653 |                  throw new RuntimeException('Enrollment secret not found'); | 
| 654 | 654 | } | 
| 655 | -            if ( !is_array($data) || !is_string($data["userId"] ?? NULL)) { | |
| 655 | +            if (!is_array($data) || !is_string($data["userId"] ?? NULL)) { | |
| 656 | 656 |                  throw new RuntimeException('Invalid enrollment data'); | 
| 657 | 657 | } | 
| 658 | 658 | |
| @@ -682,17 +682,17 @@ discard block | ||
| 682 | 682 | public function finalizeEnrollment(string $enrollmentSecret): bool | 
| 683 | 683 |      { | 
| 684 | 684 |          try { | 
| 685 | - $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT_SECRET . $enrollmentSecret); | |
| 685 | + $data = $this->_stateStorage->getValue(self::PREFIX_ENROLLMENT_SECRET.$enrollmentSecret); | |
| 686 | 686 |              if (NULL === $data) { | 
| 687 | 687 |                  throw new RuntimeException('Enrollment secret not found'); | 
| 688 | 688 | } | 
| 689 | 689 |              if (is_array($data)) { | 
| 690 | 690 | // Enrollment is finalized, destroy our session data. | 
| 691 | - $this->_stateStorage->unsetValue(self::PREFIX_ENROLLMENT_SECRET . $enrollmentSecret); | |
| 691 | + $this->_stateStorage->unsetValue(self::PREFIX_ENROLLMENT_SECRET.$enrollmentSecret); | |
| 692 | 692 | $this->_setEnrollmentStatus($data["sessionId"], self::ENROLLMENT_STATUS_FINALIZED); | 
| 693 | 693 |              } else { | 
| 694 | 694 | $this->logger->error( | 
| 695 | - 'Enrollment status is not finalized, enrollmentsecret was not found in state storage. ' . | |
| 695 | + 'Enrollment status is not finalized, enrollmentsecret was not found in state storage. '. | |
| 696 | 696 | 'Warning! the method will still return "true" as a result.' | 
| 697 | 697 | ); | 
| 698 | 698 | } | 
| @@ -740,7 +740,7 @@ discard block | ||
| 740 | 740 | public function authenticate(string $userId, string $userSecret, string $sessionKey, string $response): int | 
| 741 | 741 |      { | 
| 742 | 742 |          try { | 
| 743 | - $state = $this->_stateStorage->getValue(self::PREFIX_CHALLENGE . $sessionKey); | |
| 743 | + $state = $this->_stateStorage->getValue(self::PREFIX_CHALLENGE.$sessionKey); | |
| 744 | 744 |              if (is_null($state)) { | 
| 745 | 745 |                  $this->logger->notice('The auth challenge could not be found in the state storage'); | 
| 746 | 746 | return self::AUTH_RESULT_INVALID_CHALLENGE; | 
| @@ -750,9 +750,9 @@ discard block | ||
| 750 | 750 | throw $e; | 
| 751 | 751 | } | 
| 752 | 752 | |
| 753 | - $sessionId = $state["sessionId"] ?? NULL; // Application's sessionId | |
| 754 | - $challenge = $state["challenge"] ?? NULL; // The challenge we sent to the Tiqr client | |
| 755 | -        if (!is_string($sessionId) || (!is_string($challenge)) ) { | |
| 753 | + $sessionId = $state["sessionId"] ?? NULL; // Application's sessionId | |
| 754 | + $challenge = $state["challenge"] ?? NULL; // The challenge we sent to the Tiqr client | |
| 755 | +        if (!is_string($sessionId) || (!is_string($challenge))) { | |
| 756 | 756 |              throw new RuntimeException('Invalid state for state storage'); | 
| 757 | 757 | } | 
| 758 | 758 | |
| @@ -761,7 +761,7 @@ discard block | ||
| 761 | 761 | $challengeUserId = $state["userId"] ?? NULL; | 
| 762 | 762 | |
| 763 | 763 | // If the application requested a specific userId, verify that that is that userId that we're now authenticating | 
| 764 | -        if ($challengeUserId!==NULL && ($userId !== $challengeUserId)) { | |
| 764 | +        if ($challengeUserId !== NULL && ($userId !== $challengeUserId)) { | |
| 765 | 765 | $this->logger->error( | 
| 766 | 766 |                  sprintf('Authentication failed: the requested userId "%s" does not match userId "%s" that is being authenticated', | 
| 767 | 767 | $challengeUserId, $userId) | 
| @@ -778,7 +778,7 @@ discard block | ||
| 778 | 778 | |
| 779 | 779 |          if ($equal) { | 
| 780 | 780 | // Set application session as authenticated | 
| 781 | - $this->_stateStorage->setValue(self::PREFIX_AUTHENTICATED . $sessionId, $userId, self::LOGIN_EXPIRE); | |
| 781 | + $this->_stateStorage->setValue(self::PREFIX_AUTHENTICATED.$sessionId, $userId, self::LOGIN_EXPIRE); | |
| 782 | 782 |              $this->logger->notice(sprintf('Authenticated user "%s" in session "%s"', $userId, $sessionId)); | 
| 783 | 783 | |
| 784 | 784 | // Cleanup challenge | 
| @@ -787,7 +787,7 @@ discard block | ||
| 787 | 787 | // Cleaning up only after successful authentication enables the user to retry authentication after e.g. an | 
| 788 | 788 | // invalid response | 
| 789 | 789 |              try { | 
| 790 | - $this->_stateStorage->unsetValue(self::PREFIX_CHALLENGE . $sessionKey); // May throw | |
| 790 | + $this->_stateStorage->unsetValue(self::PREFIX_CHALLENGE.$sessionKey); // May throw | |
| 791 | 791 |              } catch (Exception $e) { | 
| 792 | 792 | // Only log error | 
| 793 | 793 |                  $this->logger->warning('Could not delete authentication session key', array('error' => $e)); | 
| @@ -809,9 +809,9 @@ discard block | ||
| 809 | 809 | * | 
| 810 | 810 | * @throws Exception when there was an error communicating with the storage backed | 
| 811 | 811 | */ | 
| 812 | - public function logout(string $sessionId=""): void | |
| 812 | + public function logout(string $sessionId = ""): void | |
| 813 | 813 |      { | 
| 814 | -        if ($sessionId=="") { | |
| 814 | +        if ($sessionId == "") { | |
| 815 | 815 | $sessionId = session_id(); | 
| 816 | 816 | } | 
| 817 | 817 | |
| @@ -851,9 +851,9 @@ discard block | ||
| 851 | 851 | * | 
| 852 | 852 | * Does not throw | 
| 853 | 853 | */ | 
| 854 | - public function getAuthenticatedUser(string $sessionId=""): ?string | |
| 854 | + public function getAuthenticatedUser(string $sessionId = ""): ?string | |
| 855 | 855 |      { | 
| 856 | -        if ($sessionId=="") { | |
| 856 | +        if ($sessionId == "") { | |
| 857 | 857 |              $this->logger->debug('Using the PHP session id, as no session id was provided'); | 
| 858 | 858 | $sessionId = session_id(); | 
| 859 | 859 | } | 
| @@ -882,7 +882,7 @@ discard block | ||
| 882 | 882 | // We probably just generated the challenge and stored it in the StateStorage | 
| 883 | 883 | // We can save a roundtrip to the storage backend here by reusing this information | 
| 884 | 884 | |
| 885 | - $state = $this->_stateStorage->getValue(self::PREFIX_CHALLENGE . $sessionKey); | |
| 885 | + $state = $this->_stateStorage->getValue(self::PREFIX_CHALLENGE.$sessionKey); | |
| 886 | 886 |          if (is_null($state)) { | 
| 887 | 887 | $this->logger->error( | 
| 888 | 888 | sprintf( | 
| @@ -897,22 +897,22 @@ discard block | ||
| 897 | 897 | $challenge = $state["challenge"] ?? ''; | 
| 898 | 898 | $spIdentifier = $state["spIdentifier"] ?? ''; | 
| 899 | 899 | |
| 900 | -        if ( (strpos($this->_protocolAuth, 'https://') === 0) || (strpos($this->_protocolAuth, 'http://') === 0) ) { | |
| 900 | +        if ((strpos($this->_protocolAuth, 'https://') === 0) || (strpos($this->_protocolAuth, 'http://') === 0)) { | |
| 901 | 901 | // Create universal Link | 
| 902 | - $parameters=array(); | |
| 902 | + $parameters = array(); | |
| 903 | 903 |              if (!is_null($userId)) { | 
| 904 | - $parameters[]='u='.urlencode($userId); | |
| 904 | + $parameters[] = 'u='.urlencode($userId); | |
| 905 | 905 | } | 
| 906 | - $parameters[]='s='.urlencode($sessionKey); | |
| 907 | - $parameters[]='q='.urlencode($challenge); | |
| 908 | - $parameters[]='i='.urlencode($this->getIdentifier()); | |
| 909 | - $parameters[]='v='.urlencode($this->_protocolVersion); | |
| 906 | + $parameters[] = 's='.urlencode($sessionKey); | |
| 907 | + $parameters[] = 'q='.urlencode($challenge); | |
| 908 | + $parameters[] = 'i='.urlencode($this->getIdentifier()); | |
| 909 | + $parameters[] = 'v='.urlencode($this->_protocolVersion); | |
| 910 | 910 |              return $this->_protocolAuth.'?'.implode('&', $parameters); | 
| 911 | 911 | } | 
| 912 | 912 | |
| 913 | 913 | // Create custom URL scheme | 
| 914 | 914 | // Last bit is the spIdentifier | 
| 915 | - return $this->_protocolAuth."://".(!is_null($userId)?urlencode($userId).'@':'').$this->getIdentifier()."/".$sessionKey."/".$challenge."/".urlencode($spIdentifier)."/".$this->_protocolVersion; | |
| 915 | + return $this->_protocolAuth."://".(!is_null($userId) ?urlencode($userId).'@' : '').$this->getIdentifier()."/".$sessionKey."/".$challenge."/".urlencode($spIdentifier)."/".$this->_protocolVersion; | |
| 916 | 916 | } | 
| 917 | 917 | |
| 918 | 918 | /** | 
| @@ -923,7 +923,7 @@ discard block | ||
| 923 | 923 |      { | 
| 924 | 924 | // The are two formats see: https://tiqr.org/technical/protocol/ | 
| 925 | 925 | |
| 926 | -        if ( (strpos($this->_protocolEnroll, 'https://') === 0) || (strpos($this->_protocolEnroll, 'http://') === 0) ) { | |
| 926 | +        if ((strpos($this->_protocolEnroll, 'https://') === 0) || (strpos($this->_protocolEnroll, 'http://') === 0)) { | |
| 927 | 927 | // Create universal Link | 
| 928 | 928 | return $this->_protocolEnroll.'?metadata='.urlencode($metadataUrl); | 
| 929 | 929 | } | 
| @@ -942,7 +942,7 @@ discard block | ||
| 942 | 942 | protected function _uniqueSessionKey(): string | 
| 943 | 943 |      { | 
| 944 | 944 | |
| 945 | - return bin2hex( Tiqr_Random::randomBytes(self::SESSION_KEY_LENGTH_BYTES) ); | |
| 945 | + return bin2hex(Tiqr_Random::randomBytes(self::SESSION_KEY_LENGTH_BYTES)); | |
| 946 | 946 | } | 
| 947 | 947 | |
| 948 | 948 | /** |