| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							- <?php
 
- /**
 
-  * Keyring connection tokens all look the same, although they may have varying
 
-  * amounts of information stuffed in their meta values. Store a meta value
 
-  * called "_classname" which contains the name of a Keyring_Service class to
 
-  * use to "re-hydrate" the service this token is associated with.
 
-  * @see Keyring_Request_Token
 
-  * @see Keyring_Access_Token
 
-  *
 
-  * @package Keyring
 
-  */
 
- class Keyring_Token {
 
- 	var $name      = false;
 
- 	var $token     = false;
 
- 	var $meta      = array();
 
- 	var $service   = false; // Will contain a Keyring_Service object
 
- 	var $unique_id = false;
 
- 	/**
 
- 	 * Create a Keyring_Token instance.
 
- 	 * @param string  $service Shortname for the service this token is for
 
- 	 * @param mixed  $token The actual auth token (OAuth, string, etc)
 
- 	 * @param array   $meta Additional information related to this token
 
- 	 * @param mixed $uniq A unique identifier for this token (if available)
 
- 	 */
 
- 	function __construct( $service, $token, $meta = array(), $uniq = false ) {
 
- 		$this->name      = strtolower( $service ); // Name of the service this token is for
 
- 		$this->token     = $token;
 
- 		$this->unique_id = $uniq;
 
- 		$this->meta      = $meta;
 
- 		$this->get_service();
 
- 	}
 
- 	function __toString() {
 
- 		return (string) $this->token;
 
- 	}
 
- 	function get_uniq_id() {
 
- 		if ( isset( $this->unique_id ) )
 
- 			return $this->unique_id;
 
- 		return null;
 
- 	}
 
- 	function get_display() {
 
- 		if ( $service = $this->get_service() )
 
- 			return $service->get_display( $this );
 
- 		return $this->name;
 
- 	}
 
- 	function get_service() {
 
- 		if ( !$this->service ) {
 
- 			$class = $this->get_meta( '_classname', true );
 
- 			if ( $class && class_exists( $class ) ) {
 
- 				$this->service = call_user_func( array( $class, 'init' ) );
 
- 			} else {
 
- 				$this->service = Keyring::get_service_by_name( $this->get_name() );
 
- 			}
 
- 		}
 
- 		return $this->service;
 
- 	}
 
- 	function get_name() {
 
- 		return $this->name;
 
- 	}
 
- 	/**
 
- 	 * Get a specific piece of meta data for this token, or all meta as an array.
 
- 	 *
 
- 	 * @param mixed $name The key name for a specific meta item, or false for all.
 
- 	 * @param bool $allow_hidden Allow access to "hidden" meta (prefixed with "_")
 
- 	 * @return Mixed meta value, array of meta values, or null
 
- 	 */
 
- 	function get_meta( $name = false, $allow_hidden = false ) {
 
- 		$return = null;
 
- 		if ( $name ) {
 
- 			if ( '_' != substr( $name, 0, 1 ) || $allow_hidden ) {
 
- 				if ( isset( $this->meta[ $name ] ) ) {
 
- 					$return = $this->meta[ $name ];
 
- 				}
 
- 			}
 
- 		} else {
 
- 			foreach ( (array) $this->meta as $key => $val ) {
 
- 				if ( '_' != substr( $key, 0, 1 ) || $allow_hidden ) {
 
- 					$return[ $key ] = $val;
 
- 				}
 
- 			}
 
- 		}
 
- 		return $return;
 
- 	}
 
- 	/**
 
- 	* Check if a token has expired, or will expire in the next $window seconds
 
- 	**/
 
- 	function is_expired( $window = 0 ) {
 
- 		if ( !$expires = $this->get_meta( 'expires' ) )
 
- 			return false; // No expires value, assume it's a permanent token
 
- 		if ( '0000-00-00 00:00:00' == $expires )
 
- 			return false; // Doesn't expire
 
- 		if ( ( time() + $window ) > strtotime( $expires ) )
 
- 			return true; // Token's expiry time has passed, or will pass before $window
 
- 		// Not expired
 
- 		return false;
 
- 	}
 
- }
 
- /**
 
-  * During the first phase of the auth flow, we normally want to (or are required to)
 
-  * store some details before sending the user off to a remote service to grant access.
 
-  * Use a request token to store those details locally, then we can retrieve them when
 
-  * we get back to finish the auth flow.
 
-  */
 
- class Keyring_Request_Token extends Keyring_Token {
 
- 	function __construct( $service, $token, $meta = array(), $uniq = false ) {
 
- 		$meta['type'] = 'request';
 
- 		return parent::__construct( $service, $token, $meta, $uniq );
 
- 	}
 
- 	function type() {
 
- 		return 'request';
 
- 	}
 
- }
 
- /**
 
-  * Access tokens are what are 'permanently' stored, containing the information required
 
-  * to make secure connections/requests on behalf of the user of a remote service.
 
-  */
 
- class Keyring_Access_Token extends Keyring_Token {
 
- 	function __construct( $service, $token, $meta = array(), $uniq = false ) {
 
- 		$meta['type'] = 'access';
 
- 		return parent::__construct( $service, $token, $meta, $uniq );
 
- 	}
 
- 	function type() {
 
- 		return 'access';
 
- 	}
 
- }
 
 
  |