User:DatGuy/sandbox

From Wikitech

Installation:

$ composer require mediawiki/oauthclient


Usage:

session_start();
use MediaWiki\OAuthClient\ClientConfig;
use MediaWiki\OAuthClient\Consumer;
use MediaWiki\OAuthClient\Client;
// Ini file with consumer key and secret key. Don't forget to hide this.
$ini = parse_ini_file( getcwd().'/login.ini' );
if ( $ini === false ) {
	header( "HTTP/1.1 $errorCode Internal Server Error" );
	echo 'The ini file could not be read';
	exit(0);
}
if (!isset( $ini['consumerKey'] ) ||
	!isset( $ini['consumerSecret'] )
) {
	header( "HTTP/1.1 $errorCode Internal Server Error" );
	echo 'Required configuration directives not found in ini file';
	exit(0);
}

$endpoint = 'https://en.wikipedia.org/w/index.php?title=Special:OAuth';
// $redir = 'https://localhost/view/Special:OAuth?'; Is this needed?
$consumerKey = $ini['consumerKey'];
$consumerSecret = $ini['consumerSecret'];

$conf = new ClientConfig( $endpoint );
// $conf->setRedirURL( $redir ); Not sure what it does
$conf->setConsumer( new Consumer( $consumerKey, $consumerSecret ) );

$client = new Client( $conf );

// Step 1 = Get a request token
list( $next, $token ) = $client->initiate();

// Define token and secret token. Will use this later.
$_SESSION['token'] = $token->key;
$_SESSION['secrettoken'] = $token->secret;
// Step 2 - Have the user authorize your app. Use the 'oauth_verifier' 
// GET parameter when the user is redirected
// back to the callback url you registered.
header("Location: $next");
</source>
New file: Your callback URL
<source lang="php">
session_start();
require_once 'vendor/autoload.php';
use MediaWiki\OAuthClient\ClientConfig;
use MediaWiki\OAuthClient\Consumer;
use MediaWiki\OAuthClient\Client;

if ( isset( $_GET['oauth_verifier'] ) ) {
        // Redefine $client
	$ini = parse_ini_file( getcwd().'/login.ini' );
	$endpoint = 'https://en.wikipedia.org/w/index.php?title=Special:OAuth';
	$consumerKey = $ini['consumerKey'];
	$consumerSecret = $ini['consumerSecret'];
	$conf = new ClientConfig( $endpoint );
	$conf->setConsumer( new Consumer( $consumerKey, $consumerSecret ) );
	$client = new Client( $conf );

        // Use $_GET to find the verifier
	$verifyCode = $_GET['oauth_verifier'];
        // Remake the token
	$requestToken = new MediaWiki\OAuthClient\Token( $_SESSION['token'], $_SESSION['secrettoken'] );
	$accessToken = $client->complete( $requestToken,  $verifyCode );
	// If we want to authenticate the user
	$ident = $client->identify( $accessToken );
}

To logout, use session_destroy();