/**
  * @param ServerRequestInterface $request
  * @param string                 $clientId
  *
  * @throws OAuthServerException
  *
  * @return array
  */
 protected function validateOldRefreshToken(ServerRequestInterface $request, $clientId)
 {
     $encryptedRefreshToken = $this->getRequestParameter('refresh_token', $request);
     if (is_null($encryptedRefreshToken)) {
         throw OAuthServerException::invalidRequest('refresh_token');
     }
     // Validate refresh token
     try {
         $refreshToken = $this->decrypt($encryptedRefreshToken);
     } catch (\LogicException $e) {
         throw OAuthServerException::invalidRefreshToken('Cannot decrypt the refresh token');
     }
     $refreshTokenData = json_decode($refreshToken, true);
     if ($refreshTokenData['client_id'] !== $clientId) {
         $this->getEmitter()->emit(new RequestEvent(RequestEvent::REFRESH_TOKEN_CLIENT_FAILED, $request));
         throw OAuthServerException::invalidRefreshToken('Token is not linked to client');
     }
     if ($refreshTokenData['expire_time'] < time()) {
         throw OAuthServerException::invalidRefreshToken('Token has expired');
     }
     if ($this->refreshTokenRepository->isRefreshTokenRevoked($refreshTokenData['refresh_token_id']) === true) {
         throw OAuthServerException::invalidRefreshToken('Token has been revoked');
     }
     return $refreshTokenData;
 }