/**
  * Handles authentication requests.
  *
  * @return void
  */
 public function authenticate()
 {
     $applicationId = $this->request->query('id');
     $redirectUrl = $this->_getRedirectUrl();
     $timestamp = UniLoginUtil::getFormattedTimestamp();
     $user = Configure::read('UniLogin.testProvider.user');
     $auth = UniLoginUtil::calculateFingerprint($timestamp, $user);
     if ($applicationId === Configure::read('UniLogin.testProvider.applicationId')) {
         $query = ['user' => $user, 'timestamp' => $timestamp, 'auth' => $auth];
         $redirectUrl .= '?' . http_build_query($query);
     }
     return $this->redirect($redirectUrl);
 }
 /**
  * Receives auth response and does validation.
  *
  * @return void
  */
 public function callback()
 {
     $response = $this->request->query;
     $user = $this->request->query('user');
     $timestamp = $this->request->query('timestamp');
     $auth = $this->request->query('auth');
     if ($user && $timestamp && $auth && UniLoginUtil::hashEquals(UniLoginUtil::calculateFingerprint($timestamp, $user), $auth)) {
         $response['validated'] = true;
     } else {
         $response['validated'] = false;
     }
     $completeUrl = Configure::read('UniLogin.application.completeUrl');
     $returnUrl = $this->request->query('returnUrl');
     if ($returnUrl) {
         $completeUrl = $returnUrl;
     }
     $response['secret'] = Configure::read('UniLogin.application.secret');
     return $this->_dispatch($completeUrl, $response);
 }
 /**
  * testAuthenticateRedirectUrlParameterWithoutApplicationId method
  *
  * @return void
  */
 public function testAuthenticateRedirectUrlParameterWithoutApplicationId()
 {
     $url = 'http://www.mydomain.com';
     $path = UniLoginUtil::encodeUrl($url);
     $auth = UniLoginUtil::calculateUrlFingerprint($url);
     $this->testAction('/uni_login/test_provider/authenticate', ['data' => ['path' => $path, 'auth' => $auth], 'method' => 'get']);
     $this->assertContains($url, $this->headers['Location']);
     $this->assertNotContains('user='******'Location']);
     $this->assertNotContains('timestamp=', $this->headers['Location']);
     $this->assertNotContains('auth=', $this->headers['Location']);
 }
 /**
  * Tests `UniLoginUtil::hashEquals`.
  *
  * @return void
  */
 public function testHashEquals()
 {
     $knownString = 'abc';
     $userString = 'abc';
     $result = UniLoginUtil::hashEquals($knownString, $userString);
     $this->assertTrue($result);
     $knownString = 'abcde';
     $userString = 'abc';
     $result = UniLoginUtil::hashEquals($knownString, $userString);
     $this->assertFalse($result);
     $knownString = 'abc';
     $userString = 'def';
     $result = UniLoginUtil::hashEquals($knownString, $userString);
     $this->assertFalse($result);
 }