| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- <?php
 
- /**
 
-  * Yahoo service definition for Keyring. Clean implementation of OAuth1
 
-  */
 
- class Keyring_Service_Yahoo extends Keyring_Service_OAuth1 {
 
- 	const NAME  = 'yahoo';
 
- 	const LABEL = 'Yahoo! Updates';
 
- 	function __construct() {
 
- 		parent::__construct();
 
- 		// Enable "basic" UI for entering key/secret
 
- 		if ( ! KEYRING__HEADLESS_MODE ) {
 
- 			add_action( 'keyring_yahoo_manage_ui', array( $this, 'basic_ui' ) );
 
- 			add_filter( 'keyring_yahoo_basic_ui_intro', array( $this, 'basic_ui_intro' ) );
 
- 		}
 
- 		$this->set_endpoint( 'request_token', 'https://api.login.yahoo.com/oauth/v2/get_request_token', 'GET'  );
 
- 		$this->set_endpoint( 'authorize',     'https://api.login.yahoo.com/oauth/v2/request_auth',      'GET'  );
 
- 		$this->set_endpoint( 'access_token',  'https://api.login.yahoo.com/oauth/v2/get_token',         'POST' );
 
- 		$creds = $this->get_credentials();
 
- 		$this->app_id  = $creds['app_id'];
 
- 		$this->key     = $creds['key'];
 
- 		$this->secret  = $creds['secret'];
 
- 		$this->consumer = new OAuthConsumer( $this->key, $this->secret, $this->callback_url );
 
- 		$this->signature_method = new OAuthSignatureMethod_HMAC_SHA1;
 
- 	}
 
- 	function basic_ui_intro() {
 
- 		echo '<p>' . sprintf( __( 'To connect to Yahoo!, you need to <a href="%1$s">Create a new project</a>. Make sure you set the <strong>Access Scope</strong> to <strong>This app requires access to private user data</strong>. When you select that, you will be asked for an <strong>Application Domain</strong>, which should probably be set to <code>http://%2$s</code>. Which APIs you request access for will depend on how Keyring will be used on this site. Common ones will be <strong>Contacts</strong>, <strong>Social Directory</strong>, <strong>Status</strong>, and <strong>Updates</strong>.', 'keyring' ), 'https://developer.apps.yahoo.com/dashboard/createKey.html', $_SERVER['HTTP_HOST'] ) . '</p>';
 
- 		echo '<p>' . __( "Once you've created your project, copy and paste your <strong>Consumer key</strong> and <strong>Consumer secret</strong> (from under the <strong>Authentication Information: OAuth</strong> section of your app's details) into the boxes below. You don't need an App ID for Yahoo!.", 'keyring' ) . '</p>';
 
- 	}
 
- 	function parse_response( $response ) {
 
- 		return json_decode( $response );
 
- 	}
 
- 	function build_token_meta( $token ) {
 
- 		$expires = isset( $token['oauth_expires_in'] ) ? gmdate( 'Y-m-d H:i:s', time() + $token['oauth_expires_in'] ) : 0;
 
- 		$this->set_token(
 
- 			new Keyring_Access_Token(
 
- 				'yahoo',
 
- 				new OAuthToken(
 
- 					$token['oauth_token'],
 
- 					$token['oauth_token_secret']
 
- 				)
 
- 			)
 
- 		);
 
- 		// Get user profile information
 
- 		$response = $this->request( "http://social.yahooapis.com/v1/user/{$token['xoauth_yahoo_guid']}/profile?format=json" );
 
- 		if ( Keyring_Util::is_error( $response ) ) {
 
- 			$meta = array();
 
- 		} else {
 
- 			$this->person = $response->profile;
 
- 			$meta = array(
 
- 				'user_id' => $token['xoauth_yahoo_guid'],
 
- 				'name'    => $this->person->nickname,
 
- 				'picture' => $this->person->image->imageUrl,
 
- 			);
 
- 		}
 
- 		return apply_filters( 'keyring_access_token_meta', $meta, 'yahoo', $token, $response, $this );
 
- 	}
 
- 	function get_display( Keyring_Access_Token$token ) {
 
- 		return $token->get_meta( 'name' );
 
- 	}
 
- 	function test_connection() {
 
- 		$this->maybe_refresh_token();
 
- 		$guid = $this->token->get_meta( 'external_id' );
 
- 		$res = $this->request( 'http://social.yahooapis.com/v1/user/' . $guid . '/profile?format=json' );
 
- 		if ( !Keyring_Util::is_error( $res ) )
 
- 			return true;
 
- 		return $res;
 
- 	}
 
- 	function maybe_refresh_token() {
 
- 		global $wpdb;
 
- 		if ( empty( $this->token->token ) || empty( $this->token->token->tokenExpires ) )
 
- 			return;
 
- 		if ( $this->token->token->tokenExpires && $this->token->token->tokenExpires < time() ) {
 
- 			$api_url  = 'https://api.login.yahoo.com/oauth/v2/get_token';
 
- 			$api_url .= '?oauth_session_handle=' . $this->token->token->sessionHandle;
 
- 			$refresh = $this->request( $api_url, array(
 
- 				'method'       => 'GET',
 
- 				'raw_response' => true,
 
- 			) );
 
- 			if ( !Keyring_Util::is_error( $refresh ) ) {
 
- 				$token = $this->parse_access_token( $refresh );
 
- 				// Fake request token
 
- 				global $keyring_request_token;
 
- 				$keyring_request_token = new Keyring_Request_Token(
 
- 					$this->get_name(),
 
- 					array()
 
- 				);
 
- 				// Build (real) access token
 
- 				$access_token = new Keyring_Access_Token(
 
- 					$this->get_name(),
 
- 					new OAuthToken(
 
- 						$token['oauth_token'],
 
- 						$token['oauth_token_secret']
 
- 					),
 
- 					$this->build_token_meta( $token ),
 
- 					$this->token->unique_id
 
- 				);
 
- 				// Store the updated access token
 
- 				$access_token = apply_filters( 'keyring_access_token', $access_token, $token );
 
- 				$id = $this->store->update( $access_token );
 
- 				// And switch to using it
 
- 				$this->set_token( $access_token );
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- add_action( 'keyring_load_services', array( 'Keyring_Service_Yahoo', 'init' ) );
 
 
  |