Added Twitter auth command and some base functions.

This commit is contained in:
flash 2019-03-06 11:27:38 +01:00
parent eafa258d7a
commit 81b0abfd91
5 changed files with 289 additions and 7 deletions

View file

@ -15,7 +15,8 @@
"erusev/parsedown": "~1.6", "erusev/parsedown": "~1.6",
"geoip2/geoip2": "~2.0", "geoip2/geoip2": "~2.0",
"twig/extensions": "^1.5", "twig/extensions": "^1.5",
"filp/whoops": "^2.2" "filp/whoops": "^2.2",
"jublonet/codebird-php": "^3.1"
}, },
"autoload": { "autoload": {
"classmap": [ "classmap": [

191
composer.lock generated
View file

@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "eecb2be3db098c1aae02a69d52791f7d", "content-hash": "3d0e94350450c6e4148bf7a0ea7ce697",
"packages": [ "packages": [
{ {
"name": "composer/ca-bundle", "name": "composer/ca-bundle",
"version": "1.1.3", "version": "1.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/ca-bundle.git", "url": "https://github.com/composer/ca-bundle.git",
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660" "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660", "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d",
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660", "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -60,7 +60,127 @@
"ssl", "ssl",
"tls" "tls"
], ],
"time": "2018-10-18T06:09:13+00:00" "time": "2019-01-28T09:30:10+00:00"
},
{
"name": "composer/installers",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/composer/installers.git",
"reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b",
"reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0"
},
"replace": {
"roundcube/plugin-installer": "*",
"shama/baton": "*"
},
"require-dev": {
"composer/composer": "1.0.*@dev",
"phpunit/phpunit": "^4.8.36"
},
"type": "composer-plugin",
"extra": {
"class": "Composer\\Installers\\Plugin",
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Installers\\": "src/Composer/Installers"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kyle Robinson Young",
"email": "kyle@dontkry.com",
"homepage": "https://github.com/shama"
}
],
"description": "A multi-framework Composer library installer",
"homepage": "https://composer.github.io/installers/",
"keywords": [
"Craft",
"Dolibarr",
"Eliasis",
"Hurad",
"ImageCMS",
"Kanboard",
"Lan Management System",
"MODX Evo",
"Mautic",
"Maya",
"OXID",
"Plentymarkets",
"Porto",
"RadPHP",
"SMF",
"Thelia",
"WolfCMS",
"agl",
"aimeos",
"annotatecms",
"attogram",
"bitrix",
"cakephp",
"chef",
"cockpit",
"codeigniter",
"concrete5",
"croogo",
"dokuwiki",
"drupal",
"eZ Platform",
"elgg",
"expressionengine",
"fuelphp",
"grav",
"installer",
"itop",
"joomla",
"kohana",
"laravel",
"lavalite",
"lithium",
"magento",
"majima",
"mako",
"mediawiki",
"modulework",
"modx",
"moodle",
"osclass",
"phpbb",
"piwik",
"ppi",
"puppet",
"pxcms",
"reindex",
"roundcube",
"shopware",
"silverstripe",
"sydes",
"symfony",
"typo3",
"wordpress",
"yawik",
"zend",
"zikula"
],
"time": "2018-08-27T06:10:37+00:00"
}, },
{ {
"name": "doctrine/lexer", "name": "doctrine/lexer",
@ -332,6 +452,65 @@
], ],
"time": "2018-04-10T15:32:59+00:00" "time": "2018-04-10T15:32:59+00:00"
}, },
{
"name": "jublonet/codebird-php",
"version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/jublonet/codebird-php.git",
"reference": "100a8e8f1928a5738b4476f0caf83f2c2ba6da5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jublonet/codebird-php/zipball/100a8e8f1928a5738b4476f0caf83f2c2ba6da5b",
"reference": "100a8e8f1928a5738b4476f0caf83f2c2ba6da5b",
"shasum": ""
},
"require": {
"composer/installers": "~1.0",
"ext-hash": "*",
"ext-json": "*",
"lib-openssl": "*",
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": ">=3.7",
"satooshi/php-coveralls": ">=0.6",
"squizlabs/php_codesniffer": "2.*"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-3.0+"
],
"authors": [
{
"name": "Joshua Atkins",
"email": "joshua.atkins@jublo.net",
"homepage": "http://atkins.im/",
"role": "Developer"
},
{
"name": "J.M.",
"email": "jm@jublo.net",
"homepage": "http://mynetx.net/",
"role": "Developer"
}
],
"description": "Easy access to the Twitter REST API, Collections API, Streaming API, TON (Object Nest) API and Twitter Ads API — all from one PHP library.",
"homepage": "https://www.jublo.net/projects/codebird/php",
"keywords": [
"api",
"networking",
"twitter"
],
"time": "2016-02-15T18:38:55+00:00"
},
{ {
"name": "maxmind-db/reader", "name": "maxmind-db/reader",
"version": "v1.4.1", "version": "v1.4.1",

View file

@ -46,3 +46,7 @@ secret_key = secret_key_for_generating_csrf_tokens
[Proxy] [Proxy]
enabled = true enabled = true
secret_key = change_this_or_i_will_beat_you_up secret_key = change_this_or_i_will_beat_you_up
[Twitter]
api_key = <consumer key>
api_secret = <consumer secret key>

View file

@ -44,6 +44,7 @@ require_once 'src/pagination.php';
require_once 'src/perms.php'; require_once 'src/perms.php';
require_once 'src/string.php'; require_once 'src/string.php';
require_once 'src/tpl.php'; require_once 'src/tpl.php';
require_once 'src/twitter.php';
require_once 'src/url.php'; require_once 'src/url.php';
require_once 'src/zalgo.php'; require_once 'src/zalgo.php';
require_once 'src/Forum/forum.php'; require_once 'src/Forum/forum.php';
@ -311,6 +312,40 @@ MIG;
echo "Template for '{$namespace}' has been created." . PHP_EOL; echo "Template for '{$namespace}' has been created." . PHP_EOL;
break; break;
case 'twitter-auth':
$apiKey = config_get('Twitter', 'api_key');
$apiSecret = config_get('Twitter', 'api_secret');
if (empty($apiKey) || empty($apiSecret)) {
echo 'No Twitter api keys set in config.' . PHP_EOL;
break;
}
twitter_init($apiKey, $apiSecret);
echo 'Twitter Authentication' . PHP_EOL;
$authPage = twitter_auth_create();
if (empty($authPage)) {
echo 'Request to begin authentication failed.' . PHP_EOL;
break;
}
echo 'Go to the page below and paste the pin code displayed.' . PHP_EOL . $authPage . PHP_EOL;
$pin = readline('Pin: ');
$authComplete = twitter_auth_complete($pin);
if (empty($authComplete)) {
echo 'Invalid pin code.' . PHP_EOL;
break;
}
echo 'Authentication successful!' . PHP_EOL
. "Token: {$authComplete['token']}" . PHP_EOL
. "Token Secret: {$authComplete['token_secret']}" . PHP_EOL;
break;
default: default:
echo 'Unknown command.' . PHP_EOL; echo 'Unknown command.' . PHP_EOL;
break; break;

63
src/twitter.php Normal file
View file

@ -0,0 +1,63 @@
<?php
use Codebird\Codebird;
function twitter_init(
string $apiKey,
string $apiSecretKey,
?string $token = null,
?string $tokenSecret = null
): void {
Codebird::setConsumerKey($apiKey, $apiSecretKey);
if (!is_null($token) && !is_null($tokenSecret)) {
twitter_token_set($token, $tokenSecret);
}
}
function twitter_token_set(string $token, string $tokenSecret): void
{
Codebird::getInstance()->setToken($token, $tokenSecret);
}
function twitter_auth_create(): ?string
{
$codebird = Codebird::getInstance();
$reply = $codebird->oauth_requestToken([
'oauth_callback' => 'oob',
]);
if (!$reply) {
return null;
}
twitter_token_set($reply->oauth_token, $reply->oauth_token_secret);
return $codebird->oauth_authorize();
}
function twitter_auth_complete(string $pin): array
{
$reply = Codebird::getInstance()->oauth_accessToken([
'oauth_verifier' => $pin,
]);
if (!$reply) {
return [];
}
twitter_token_set($reply->oauth_token, $reply->oauth_token_secret);
return [
'token' => $reply->oauth_token,
'token_secret' => $reply->oauth_token_secret,
];
}
function twitter_tweet_post(string $text): void
{
$params = [
'status' => $text,
];
Codebird::getInstance()->statuses_update($params);
}