/** * 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); }