From 23c61f5f84febcfe9727014ba814027737f2496f Mon Sep 17 00:00:00 2001 From: triatic <42704418+triatic@users.noreply.github.com> Date: Tue, 23 Jun 2020 14:14:50 +0100 Subject: [PATCH] [TwitterBridge] Expire guest token by time (#1606) * [TwitterBridge] Expire guest token by time In addition to fetching a new guest token after 100 uses, also expire token after 5 minutes (configurable). --- bridges/TwitterBridge.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/bridges/TwitterBridge.php b/bridges/TwitterBridge.php index 210f5d01..87757074 100644 --- a/bridges/TwitterBridge.php +++ b/bridges/TwitterBridge.php @@ -4,6 +4,7 @@ class TwitterBridge extends BridgeAbstract { const URI = 'https://twitter.com/'; const API_URI = 'https://api.twitter.com'; const GUEST_TOKEN_USES = 100; + const GUEST_TOKEN_EXPIRY = 300; // 5min const CACHE_TIMEOUT = 300; // 5min const DESCRIPTION = 'returns tweets'; const MAINTAINER = 'pmaziere'; @@ -350,6 +351,21 @@ EOD; //This function takes 2 requests, and therefore is cached private function getApiKey() { + $cacheFac = new CacheFactory(); + $cacheFac->setWorkingDir(PATH_LIB_CACHES); + $r_cache = $cacheFac->create(Configuration::getConfig('cache', 'type')); + $r_cache->setScope(get_called_class()); + $r_cache->setKey(array('refresh')); + $data = $r_cache->loadData(); + + $refresh = null; + if($data === null) { + $refresh = time(); + $r_cache->saveData($refresh); + } else { + $refresh = $data; + } + $cacheFac = new CacheFactory(); $cacheFac->setWorkingDir(PATH_LIB_CACHES); $cache = $cacheFac->create(Configuration::getConfig('cache', 'type')); @@ -382,9 +398,11 @@ EOD; $guestTokenUses = $gt_cache->loadData(); $guestToken = null; - if($guestTokenUses === null || !is_array($guestTokenUses) || count($guestTokenUses) != 2 || $guestTokenUses[0] <= 0) { + if($guestTokenUses === null || !is_array($guestTokenUses) || count($guestTokenUses) != 2 + || $guestTokenUses[0] <= 0 || (time() - $refresh) > self::GUEST_TOKEN_EXPIRY) { $guestToken = $this->getGuestToken(); $gt_cache->saveData(array(self::GUEST_TOKEN_USES, $guestToken)); + $r_cache->saveData(time()); } else { $guestTokenUses[0] -= 1; $gt_cache->saveData($guestTokenUses);