$accessToken['expire'] = $refreshToken['expire'];
         }
         $tokenStore->addAccessToken($accessToken);
         $liveAccessTokens = array($accessToken['id']);
         foreach ($user['accessTokens'] as $tokenId) {
             if (!is_null($tokenStore->getAccessToken($tokenId))) {
                 array_push($liveAccessTokens, $tokenId);
             }
         }
         $user['accessTokens'] = $liveAccessTokens;
         if (isset($client['expire'])) {
             $clientGracePeriod = $config->getValue('client_grace_period', 30 * 24 * 60 * 60);
             $now = time();
             if ($client['expire'] < $now + $clientGracePeriod / 2) {
                 $client['expire'] = $now + $clientGracePeriod;
                 $clientStore->updateClient($client);
             }
             if ($client['expire'] > $user['expire']) {
                 $user['expire'] = $client['expire'];
             }
         }
         $response = array('access_token' => $accessToken['id'], 'token_type' => $accessToken['type'], 'expires_in' => $accessToken['expire'] - time(), 'refresh_token' => $refreshToken['id'], 'scope' => trim(implode(' ', $accessToken['scopes'])));
     } else {
         $response = \sspmod_oauth2server_Utility_Uri::buildErrorResponse('invalid_grant', 'mismatching redirection uri, expected: ' . $authorizationToken['redirectUri'] . ' got: ' . $redirectUri, 'MISMATCHING_' . strtoupper($_POST['grant_type']) . '_URI', array('URI_ACTUAL' => $redirectUri));
         $errorCode = 400;
     }
 } else {
     if ($_POST['grant_type'] === 'authorization_code') {
         $response = \sspmod_oauth2server_Utility_Uri::buildErrorResponse('invalid_grant', 'authorization code grant was not issued for client id: ' . $clientId, 'MISMATCHING_AUTHORIZATION_CODE_CLIENT', array('CLIENT_ID' => $clientId));
     } else {
         $response = \sspmod_oauth2server_Utility_Uri::buildErrorResponse('invalid_grant', 'refresh token was not issued for client id: ' . $clientId, 'MISMATCHING_REFRESH_TOKEN_CLIENT', array('CLIENT_ID' => $clientId));
 /**
  * @group unit
  * @group oauth2
  */
 public function testUpdateClient()
 {
     $store = new \sspmod_oauth2server_OAuth2_ClientStore($this->getDefaultConfiguration());
     $client1 = array('id' => 'dummy', 'expire' => time() + 1000, 'scope' => array('scope1' => false));
     $store->addClient($client1);
     $client2 = array('id' => 'dummy', 'expire' => time() + 1000, 'scope' => array('scope2' => true));
     $store->updateClient($client2);
     $client3 = $store->getClient($client2['id']);
     $this->assertNotNull($client3);
     $this->assertEquals($client2['id'], $client3['id']);
     $this->assertEquals($client2['scope'], $client3['scope']);
 }