| 
<?php
/* Description: Class for Yahoo BBAuth API
 * @author: Sadiqur Rahman
 * @param: $AppID=Yahoo BB Authentication Application ID
 * @param: $secret=Yahoo BB Authentication Secret key
 * @param: $AppData=Your application data which is an optional parameter
 * @Links:  http://developer.yahoo.com/auth/
 * @Author-URI: http://sadiqbd.wordpress.com
 * @Author-EMail: [email protected]
 * License: GPL
 * Version: 1.0.0
 */
 //declaring the class
 class YahooAuth {
 
 protected $AppID;
 protected $secret;
 public $AppData;
 
 function __construct($AppID=NULL,$secret=NULL,$AppData=NULL){
 
 if (isset($AppID) && (!empty($AppID))){
 $this->AppID = $AppID;
 }else{
 global $YahooAppID;
 $this->AppID = $YahooAppID;
 }
 
 if (isset($secret) && (!empty($secret))){
 $this->AppID = $secret;
 }else{
 global $YahooSecret;
 $this->secret = $YahooSecret;
 }
 
 if (isset($AppData) && (!empty($AppData))){
 $this->AppData = $AppData;
 }
 
 if (!headers_sent()) {
 session_start();
 }
 
 }
 
 //Signature generation for Yahoo BBAuth
 protected function signature($path,$data,$ts){
 return md5($path.$data."&ts=".$ts.$this->secret);
 }
 
 //Generating login URL
 function generate_url(){
 $ts=time();
 $path="/WSLogin/V1/wslogin";
 $data="?appid=".$this->AppID."&appdata=".$this->AppData;
 $sig=$this->signature($path,$data,$ts);
 
 $url = "https://api.login.yahoo.com/WSLogin/V1/wslogin"
 ."?appid=".$this->AppID."&appdata=".$this->AppData."&ts=".$ts."&sig=".$sig;
 return $url;
 }
 
 //Automatically redirecting Yahoo login page
 function login(){
 
 if (!headers_sent()) {
 header('Location: '.$this->generate_url());
 exit;
 // If Header already sent, redirect to Yahoo using Javascript.
 } else {
 echo "<script type=\"text/javascript\">
 <!--
 window.location = \"".$this->generate_url()."\"
 //-->
 </script>".
 "<div align='center'>If you are not redirected within 5 Seconds <a " .
 "href=\"".$this->generate_url()."\">Click Here</a>";
 exit;
 }
 }
 
 //Getting and verifying data from cookie and WSSID given by yahoo
 //and storing data into session for future use
 function get_credentials($token) {
 $ts=time();
 $path="/WSLogin/V1/wspwtoken_login";
 $data="?appid=".$this->AppID."&token=".$token;
 $sig=$this->signature($path,$data,$ts);
 
 $url = "https://api.login.yahoo.com/WSLogin/V1/wspwtoken_login"
 ."?appid=".$this->AppID."&token=".$token."&ts=".$ts."&sig=".$sig;
 
 $ch = curl_init();
 curl_setopt( $ch, CURLOPT_URL, $url );
 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
 $store = curl_exec( $ch );
 $xml = curl_exec( $ch );
 
 if (  preg_match( "/(Y=.*)/", $xml, $match_array ) == 1 ) {
 $COOKIE = $match_array[1];
 }
 if (  preg_match( "/<WSSID>(.+)<\/WSSID>/", $xml, $match_array ) == 1 ) {
 $WSSID = $match_array[1];
 }
 if (  preg_match( "/<Timeout>(.+)<\/Timeout>/", $xml, $match_array ) == 1 ) {
 $timeout = $match_array[1];
 }
 
 $_SESSION['valid_user']=true;
 $_SESSION['COOKIE'] = $COOKIE;
 $_SESSION['WSSID'] = $WSSID;
 $rv = array();
 $rv["COOKIE"] = $COOKIE;
 $rv["WSSID"] = $WSSID;
 $rv["timeout"]   = $timeout;
 return $rv;
 }
 
 //some magic methods for your convenience
 function __get($name){
 return $this->$name;
 }
 
 function __set($name,$value){
 $this->$name=$value;
 }
 
 function __toString(){
 return(var_export($this,TRUE));
 }
 
 function __destruct(){
 unset($this);
 }
 }
 ?>
 |