Ejemplo n.º 1
0
 /**
  * Creates a new refresh token and associate it with given access token
  * @param AccessToken $access_token
  * @return RefreshToken
  */
 public function createRefreshToken(AccessToken &$access_token)
 {
     $refresh_token = RefreshToken::create($access_token, $this->configuration_service->getConfigValue('OAuth2.RefreshToken.Lifetime'));
     $client_service = $this->client_service;
     $auth_service = $this->auth_service;
     $cache_service = $this->cache_service;
     $this_var = $this;
     $this->tx_service->transaction(function () use(&$refresh_token, &$access_token, &$this_var, &$client_service, &$auth_service, &$cache_service) {
         $value = $refresh_token->getValue();
         //hash the given value, bc tokens values are stored hashed on DB
         $hashed_value = Hash::compute('sha256', $value);
         $client_id = $refresh_token->getClientId();
         $user_id = $refresh_token->getUserId();
         $client = $client_service->getClientById($client_id);
         $user = $auth_service->getUserById($user_id);
         //stores in DB
         $refresh_token_db = new DBRefreshToken(array('value' => $hashed_value, 'lifetime' => $refresh_token->getLifetime(), 'scope' => $refresh_token->getScope(), 'from_ip' => IPHelper::getUserIp(), 'audience' => $access_token->getAudience()));
         $refresh_token_db->client()->associate($client);
         $refresh_token_db->user()->associate($user);
         $refresh_token_db->Save();
         //associate current access token to refresh token on DB
         $access_token_db = DBAccessToken::where('value', '=', Hash::compute('sha256', $access_token->getValue()))->first();
         $access_token_db->refresh_token()->associate($refresh_token_db);
         $access_token_db->Save();
         $access_token->setRefreshToken($refresh_token);
         $cache_service->incCounter($client_id . TokenService::ClientRefreshTokensQty, TokenService::ClientRefreshTokensQtyLifetime);
     });
     return $refresh_token;
 }