]> git.mxchange.org Git - friendica-addons.git/blobdiff - twitter/twitter.php
Merge pull request 'Bluesky: Tags are now supported' (#1438) from heluecht/friendica...
[friendica-addons.git] / twitter / twitter.php
index d52da4f7a67e94ea4c3c66a611b1dc752445b550..b01345b74959931fc7257890004afe58f3419fd5 100644 (file)
@@ -94,12 +94,25 @@ function twitter_settings_post()
                return;
        }
 
+       $api_key       = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_key');
+       $api_secret    = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret');
+       $access_token  = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token');
+       $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret');
+
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post',            (bool)$_POST['twitter-enable']);
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default', (bool)$_POST['twitter-default']);
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_key',         $_POST['twitter-api-key']);
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret',      $_POST['twitter-api-secret']);
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_token',    $_POST['twitter-access-token']);
        DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret',   $_POST['twitter-access-secret']);
+
+       if (
+               empty(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status')) ||
+               ($api_key != $_POST['twitter-api-key']) || ($api_secret != $_POST['twitter-api-secret']) ||
+               ($access_token != $_POST['twitter-access-token']) || ($access_secret != $_POST['twitter-access-secret'])
+       ) {
+               twitter_test_connection(DI::userSession()->getLocalUserId());
+       }
 }
 
 function twitter_settings(array &$data)
@@ -115,7 +128,7 @@ function twitter_settings(array &$data)
        $api_secret    = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret');
        $access_token  = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token');
        $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret');
-       
+
        $last_status = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status');
        if (!empty($last_status['code']) && !empty($last_status['reason'])) {
                $status_title = sprintf('%d - %s', $last_status['code'], $last_status['reason']);
@@ -297,12 +310,12 @@ function twitter_upload_image(int $uid, array $image, int $retrial)
 
        $picture = new Image($picturedata, $photo['type']);
        $height  = $picture->getHeight();
-       $width   = $picture->getWidth(); 
+       $width   = $picture->getWidth();
        $size    = strlen($picturedata);
 
        $picture     = Photo::resizeToFileSize($picture, TWITTER_IMAGE_SIZE[$retrial]);
        $new_height  = $picture->getHeight();
-       $new_width   = $picture->getWidth(); 
+       $new_width   = $picture->getWidth();
        $picturedata = $picture->asString();
        $new_size    = strlen($picturedata);
 
@@ -349,16 +362,54 @@ function twitter_post(int $uid, string $url, string $type, array $data): stdClas
        ]);
 
        $response = $client->post($url, ['auth' => 'oauth', $type => $data]);
+       $body     = $response->getBody()->getContents();
 
        $status = [
-               'code'    => $response->getStatusCode(), 
-               'reason'  => $response->getReasonPhrase(), 
-               'content' => $response->getBody()->getContents()
+               'code'    => $response->getStatusCode(),
+               'reason'  => $response->getReasonPhrase(),
+               'content' => $body
        ];
 
        DI::pConfig()->set($uid, 'twitter', 'last_status', $status);
 
-       $content = json_decode($response->getBody()->getContents()) ?? new stdClass;
+       $content = json_decode($body) ?? new stdClass;
        Logger::debug('Success', ['content' => $content]);
        return $content;
 }
+
+function twitter_test_connection(int $uid)
+{
+       $stack = HandlerStack::create();
+
+       $middleware = new Oauth1([
+               'consumer_key'    => DI::pConfig()->get($uid, 'twitter', 'api_key'),
+               'consumer_secret' => DI::pConfig()->get($uid, 'twitter', 'api_secret'),
+               'token'           => DI::pConfig()->get($uid, 'twitter', 'access_token'),
+               'token_secret'    => DI::pConfig()->get($uid, 'twitter', 'access_secret'),
+       ]);
+
+       $stack->push($middleware);
+
+       $client = new Client([
+               'handler' => $stack
+       ]);
+
+       try {
+               $response = $client->get('https://api.twitter.com/2/users/me', ['auth' => 'oauth']);
+               $status = [
+                       'code'   => $response->getStatusCode(),
+                       'reason'  => $response->getReasonPhrase(),
+                       'content' => $response->getBody()->getContents()
+               ];
+               DI::pConfig()->set(1, 'twitter', 'last_status',  $status);
+               Logger::info('Test successful', ['uid' => $uid]);
+       } catch (RequestException $exception) {
+               $status = [
+                       'code'    => $exception->getCode(),
+                       'reason'  => $exception->getResponse()->getReasonPhrase(),
+                       'content' => $exception->getMessage()
+               ];
+               DI::pConfig()->set(1, 'twitter', 'last_status',  $status);
+               Logger::info('Test failed', ['uid' => $uid]);
+       }
+}