Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Mailru OAuth2 Provider
 *
 * @package    CodeIgniter/OAuth2
 * @category   Provider
 * @author     Lavr Lyndin
 */

class OAuth2_Provider_Mailru extends OAuth2_Provider
{
        public $method = 'POST';

        public function url_authorize()
        {
                return 'https://connect.mail.ru/oauth/authorize';
        }

        public function url_access_token()
        {
                return 'https://connect.mail.ru/oauth/token';
        }
        
        protected function sign_server_server(array $request_params, $secret_key)
        {
                ksort($request_params);
                $params = '';
                foreach ($request_params as $key => $value) {
                        $params .= "$key=$value";
                }
                return md5($params . $secret_key);
        }

        public function get_user_info(OAuth2_Token_Access $token)
        {
                $request_params = array(
                        'app_id' => $this->client_id,
                        'method' => 'users.getInfo',
                        'uids' => $token->uid,
                        'access_token' => $token->access_token,
                        'secure' => 1
                );
                
                $sig = $this->sign_server_server($request_params,$this->client_secret);
                $url = 'http://www.appsmail.ru/platform/api?'.http_build_query($request_params).'&sig='.$sig;

                $user = json_decode(file_get_contents($url));

                return array(
                        'uid' => $user[0]->uid,
                        'nickname' => $user[0]->nick,
                        'name' => $user[0]->first_name.' '.$user[0]->last_name,
                        'first_name' => $user[0]->first_name,
                        'last_name' => $user[0]->last_name,
                        'email' => isset($user[0]->email) ? $user[0]->email : null,
                        'image' => isset($user[0]->pic_big) ? $user[0]->pic_big : null,
                );
        }
        
        public function authorize($options = array())
        {
                $state = md5(uniqid(rand(), TRUE));
                get_instance()->session->set_userdata('state', $state);

                $params = array(
                        'client_id'             => $this->client_id,
                        'redirect_uri'          => isset($options['redirect_uri']) ? $options['redirect_uri'] : $this->redirect_uri,
                        'response_type'         => 'code',
                );

                redirect($this->url_authorize().'?'.http_build_query($params));
        }
}