diff --git a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthCode.php b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthCode.php index 073fa1db7c..01c4620a29 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthCode.php +++ b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthCode.php @@ -35,9 +35,7 @@ class ApiOauthCode private $redirectUri; /** - * @var \DateTime - * - * @ORM\Column(type="datetime", nullable=true) + * @ORM\Column(type="integer") */ private $expires; @@ -121,19 +119,19 @@ class ApiOauthCode } /** - * @param \DateTime $expires + * @param integer $timestamp * * @return ApiOauthCode */ - public function setExpires(\DateTime $expires = null) + public function setExpires($timestamp) { - $this->expires = $expires; + $this->expires = $timestamp; return $this; } /** - * @return \DateTime + * @return $timestamp */ public function getExpires() { diff --git a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthRefreshToken.php b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthRefreshToken.php index 273399ee97..2f23dd6745 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthRefreshToken.php +++ b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthRefreshToken.php @@ -28,9 +28,7 @@ class ApiOauthRefreshToken private $account; /** - * @var \DateTime - * - * @ORM\Column(type="datetime", nullable=false) + * @ORM\Column(type="integer", nullable=false) */ private $expires; @@ -94,11 +92,11 @@ class ApiOauthRefreshToken } /** - * @param \DateTime $expires + * @param integer $expires * * @return ApiOauthRefreshToken */ - public function setExpires(\DateTime $expires) + public function setExpires($expires) { $this->expires = $expires; @@ -106,7 +104,7 @@ class ApiOauthRefreshToken } /** - * @return \DateTime + * @return integer */ public function getExpires() { diff --git a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthToken.php b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthToken.php index 32683fe5c7..6bbcd7a288 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/ApiOauthToken.php +++ b/lib/Alchemy/Phrasea/Model/Entities/ApiOauthToken.php @@ -36,9 +36,7 @@ class ApiOauthToken private $account; /** - * @var \DateTime - * - * @ORM\Column(type="datetime", nullable=true) + * @ORM\Column(type="integer", nullable=true) */ private $expires; @@ -110,11 +108,11 @@ class ApiOauthToken } /** - * @param \DateTime $expires + * @param integer $expires * * @return ApiOauthTokens */ - public function setExpires(\DateTime $expires = null) + public function setExpires($expires = null) { $this->expires = $expires; @@ -122,7 +120,7 @@ class ApiOauthToken } /** - * @return \DateTime + * @return integer */ public function getExpires() { diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthCodeManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthCodeManipulator.php index 6d73483928..1b80a5e041 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthCodeManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthCodeManipulator.php @@ -36,7 +36,7 @@ class ApiOauthCodeManipulator implements ManipulatorInterface $this->randomGenerator = $random; } - public function create(ApiAccount $account, $redirectUri, \DateTime $expire = null, $scope = null) + public function create(ApiAccount $account, $redirectUri, $expire, $scope = null) { $code = new ApiOauthCode(); diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthRefreshTokenManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthRefreshTokenManipulator.php index 416888907a..ee35f1327f 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthRefreshTokenManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthRefreshTokenManipulator.php @@ -34,7 +34,7 @@ class ApiOauthRefreshTokenManipulator implements ManipulatorInterface $this->randomGenerator = $random; } - public function create(ApiAccount $account, \DateTime $expire, $scope = null) + public function create(ApiAccount $account, $expire, $scope = null) { $refreshToken = new ApiOauthRefreshtoken(); diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthTokenManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthTokenManipulator.php index d9d926b7cd..d556c3e3e8 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthTokenManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/ApiOauthTokenManipulator.php @@ -35,7 +35,7 @@ class ApiOauthTokenManipulator implements ManipulatorInterface $this->randomGenerator = $random; } - public function create(ApiAccount $account, \DateTime $expire = null, $scope = null) + public function create(ApiAccount $account, $expire = null, $scope = null) { $token = new ApiOauthToken(); $token->setOauthToken($this->getNewToken()); @@ -73,7 +73,7 @@ class ApiOauthTokenManipulator implements ManipulatorInterface $this->update($token); } - public function renew(ApiOauthToken $token, \DateTime $expire = null) + public function renew(ApiOauthToken $token, $expire = null) { $token->setOauthToken($this->getNewToken()); $token->setExpires($expire); diff --git a/lib/classes/API/OAuth2/Adapter.php b/lib/classes/API/OAuth2/Adapter.php index bc74e189cb..d74020ea4d 100644 --- a/lib/classes/API/OAuth2/Adapter.php +++ b/lib/classes/API/OAuth2/Adapter.php @@ -200,7 +200,7 @@ class API_OAuth2_Adapter extends OAuth2 return [ 'scope' => $token->getScope(), - 'expires' => null !== $token->getExpires() ? $token->getExpires()->getTimestamp() : null, + 'expires' => $token->getExpires(), 'client_id' => $token->getAccount()->getApplication()->getClientId(), 'session_id' => $token->getSessionId(), 'revoked' => (int) $token->getAccount()->isRevoked(), @@ -224,12 +224,6 @@ class API_OAuth2_Adapter extends OAuth2 if (null === $account = $this->app['repo.api-accounts']->find($accountId)) { throw new RuntimeException(sprintf('Account with id %s is not valid', $accountId)); } - $expires = null !== $expires ? \DateTime::createFromFormat('U', $expires) : null; - // @note stored date time are not UTC ... and expires parameter is a UNIX timestamp which is timezone independent - if ($expires instanceof \DateTime) { - $dtz = new \DateTimeZone(date_default_timezone_get()); - $expires->add(new \DateInterval('PT' . $dtz->getOffset($expires) . 'S')); - } $token = $this->app['manipulator.api-oauth-token']->create($account, $expires, $scope); $this->app['manipulator.api-oauth-token']->setOauthToken($token, $oauthToken); @@ -277,7 +271,7 @@ class API_OAuth2_Adapter extends OAuth2 return [ 'redirect_uri' => $code->getRedirectUri(), 'client_id' => $code->getAccount()->getApplication()->getClientId(), - 'expires' => null !== $code->getExpires() ? $code->getExpires()->getTimestamp() : null, + 'expires' => $code->getExpires(), 'account_id' => $code->getAccount()->getId(), ]; } @@ -300,13 +294,6 @@ class API_OAuth2_Adapter extends OAuth2 if (null === $account = $this->app['repo.api-accounts']->find($accountId)) { throw new RuntimeException(sprintf('Account with id %s is not valid', $accountId)); } - - $expires = null !== $expires ? \DateTime::createFromFormat('U', $expires) : null; - // @note stored date time are not UTC ... and expires parameter is a UNIX timestamp which is timezone independent - if ($expires instanceof \DateTime) { - $dtz = new \DateTimeZone(date_default_timezone_get()); - $expires->add(new \DateInterval('PT' . $dtz->getOffset($expires) . 'S')); - } $code = $this->app['manipulator.api-oauth-code']->create($account, $redirectUri, $expires, $scope); $this->app['manipulator.api-oauth-code']->setCode($code, $oauthCode); @@ -329,8 +316,7 @@ class API_OAuth2_Adapter extends OAuth2 if (null === $account = $this->app['repo.api-accounts']->find($accountId)) { throw new RuntimeException(sprintf('Account with id %s is not valid', $accountId)); } - - $token = $this->app['manipulator.api-oauth-refresh-token']->create($account, \DateTime::createFromFormat('U', $expires), $scope); + $token = $this->app['manipulator.api-oauth-refresh-token']->create($account, $expires, $scope); $this->app['manipulator.api-oauth-refresh-token']->setRefreshToken($token, $refreshToken); return $this; @@ -351,7 +337,7 @@ class API_OAuth2_Adapter extends OAuth2 return [ 'token' => $token->getRefreshToken(), - 'expires' => null !== $token->getExpires() ? $token->getExpires()->getTimestamp() : null, + 'expires' => $token->getExpires(), 'client_id' => $token->getAccount()->getApplication()->getClientId() ]; } diff --git a/tests/Alchemy/Tests/Phrasea/Model/Manipulator/ApiOauthCodeManipulatorTest.php b/tests/Alchemy/Tests/Phrasea/Model/Manipulator/ApiOauthCodeManipulatorTest.php index faea618fb9..73e2fe906c 100644 --- a/tests/Alchemy/Tests/Phrasea/Model/Manipulator/ApiOauthCodeManipulatorTest.php +++ b/tests/Alchemy/Tests/Phrasea/Model/Manipulator/ApiOauthCodeManipulatorTest.php @@ -15,7 +15,7 @@ class ApiOauthCodeManipulatorTest extends \PhraseanetTestCase $manipulator = new ApiOauthCodeManipulator(self::$DI['app']['EM'], self::$DI['app']['repo.api-oauth-codes'], self::$DI['app']['random.medium']); $nbCodes = count(self::$DI['app']['repo.api-oauth-codes']->findAll()); $account = self::$DI['app']['manipulator.api-account']->create(self::$DI['oauth2-app-user'], self::$DI['user']); - $manipulator->create($account, 'http://www.redirect.url'); + $manipulator->create($account, 'http://www.redirect.url', time() + 30); $this->assertGreaterThan($nbCodes, count(self::$DI['app']['repo.api-oauth-codes']->findAll())); } @@ -23,7 +23,7 @@ class ApiOauthCodeManipulatorTest extends \PhraseanetTestCase { $manipulator = new ApiOauthCodeManipulator(self::$DI['app']['EM'], self::$DI['app']['repo.api-oauth-codes'], self::$DI['app']['random.medium']); $account = self::$DI['app']['manipulator.api-account']->create(self::$DI['oauth2-app-user'], self::$DI['user']); - $code = $manipulator->create($account, 'http://www.redirect.url'); + $code = $manipulator->create($account, 'http://www.redirect.url', time() + 30); $countBefore = count(self::$DI['app']['repo.api-oauth-codes']->findAll()); $manipulator->delete($code); $this->assertGreaterThan(count(self::$DI['app']['repo.api-oauth-codes']->findAll()), $countBefore); @@ -34,11 +34,11 @@ class ApiOauthCodeManipulatorTest extends \PhraseanetTestCase $manipulator = new ApiOauthCodeManipulator(self::$DI['app']['EM'], self::$DI['app']['repo.api-oauth-codes'], self::$DI['app']['random.medium']); $account = self::$DI['app']['manipulator.api-account']->create(self::$DI['oauth2-app-user'], self::$DI['user']); - $code = $manipulator->create($account, 'http://www.redirect.url'); - $code->setExpires(new \DateTime()); + $code = $manipulator->create($account, 'http://www.redirect.url', $t = time() + 30); + $code->setExpires(time() + 40); $manipulator->update($code); $code = self::$DI['app']['repo.api-oauth-codes']->find($code->getCode()); - $this->assertNotNull($code->getExpires()); + $this->assertGreaterThan($t, $code->getExpires()); } /** @@ -48,7 +48,7 @@ class ApiOauthCodeManipulatorTest extends \PhraseanetTestCase { $manipulator = new ApiOauthCodeManipulator(self::$DI['app']['EM'], self::$DI['app']['repo.api-oauth-codes'], self::$DI['app']['random.medium']); $account = self::$DI['app']['manipulator.api-account']->create(self::$DI['oauth2-app-user'], self::$DI['user']); - $code = $manipulator->create($account, 'http://www.redirect.url'); + $code = $manipulator->create($account, 'http://www.redirect.url', time() + 30); try { $manipulator->setRedirectUri($code, 'bad-url'); $this->fail('Invalid argument exception should be raised');