Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Socialist_Controller extends Controller {
- public function gp($request)
- {
- // youtube.com authorization
- $app_settings = App::settings();
- $api = $app_settings['socialist']['gp'];
- if( isset($_GET['error']) && $_GET['error'] == 'access_denied' )
- {
- Http::redirect('/');
- }
- if( isset($_GET['from_my_price']) )
- {
- $_SESSION['from_my_price'] = true;
- }
- /*
- * You can acquire an OAuth 2.0 client ID and client secret from the
- * Google Developers Console <https://console.developers.google.com/>
- * For more information about using OAuth 2.0 to access Google APIs, please see:
- * <https://developers.google.com/youtube/v3/guides/authentication>
- * Please ensure that you have enabled the YouTube Data API for your project.
- */
- $OAUTH2_CLIENT_ID = $api['client_id'];
- $OAUTH2_CLIENT_SECRET = $api['client_secret'];
- $client = new Google_Client();
- $client->setClientId($OAUTH2_CLIENT_ID);
- $client->setClientSecret($OAUTH2_CLIENT_SECRET);
- $client->setScopes(array(
- 'https://www.googleapis.com/auth/youtube',
- 'https://www.googleapis.com/auth/youtubepartner',
- 'https://www.googleapis.com/auth/youtube.readonly',
- 'https://www.googleapis.com/auth/youtube.force-ssl',
- 'https://www.googleapis.com/auth/userinfo.profile'));
- $redirect = filter_var(\Http::getHostUrl() . \Urls::get(array('app' => 'socialist', 'alias' => 'via-gp')),
- FILTER_SANITIZE_URL);
- $client->setRedirectUri($redirect);
- // Define an object that will be used to make all API requests.
- $youtube = new Google_Service_YouTube($client);
- if (isset($_GET['code'])) {
- if (strval($_SESSION['state']) !== strval($_GET['state'])) {
- exit('The session state did not match.');
- }
- $client->authenticate($_GET['code']);
- $_SESSION['token'] = $client->getAccessToken();
- header('Location: ' . $redirect);
- }
- if (isset($_SESSION['token'])) {
- $client->setAccessToken($_SESSION['token']);
- }
- // Check to ensure that the access token was successfully acquired.
- if( $client->getAccessToken() ) {
- try {
- unset($_SESSION['token']);
- // Call the channels.list method to retrieve information about the
- // currently authenticated user's channel.
- $channelsResponse = $youtube->channels->listChannels('snippet,contentDetails,statistics,brandingSettings', array(
- 'mine' => 'true',
- ));
- $chsh = array_shift($channelsResponse['items']);
- $channel_summary = array(
- 'id' => $chsh['id'],
- 'title' => $chsh['modelData']['snippet']['title'],
- 'description' => $chsh['modelData']['snippet']['description'],
- 'custom_url' => $chsh['modelData']['snippet']['customUrl'],
- 'image' => $chsh['modelData']['snippet']['thumbnails']['medium']['url'],
- 'banner_image' => $chsh['modelData']['brandingSettings']['image']['bannerTabletExtraHdImageUrl'],
- 'statistics' => $chsh['modelData']['statistics']
- );
- // This is the place to create a user account
- $chemail = $channel_summary['id'] . '@youtube.com';
- if( !\Users\get('id') && !R::count('users', "`email` = ? AND `viasocial` = 1", array($chemail)) && !\Users\get('id') )
- {
- $r = R::dispense('users');
- $r->name = $channel_summary['title'];
- $r->email = $chemail;
- $r->password = '';
- $r->verified = 1;
- $r->viasocial = true;
- $r->ban = 0;
- // avatar image
- $file_info = pathinfo($channel_summary['image']);
- $avatars_media_dir = '/static/uploads/avatars/';
- $avatars_dir = BASE_DIR . $avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'], $avatars_dir);
- file_put_contents($avatars_dir.$new_fname, Http::request($channel_summary['image'], true));
- $image = new ImageResize();
- $image->load($avatars_dir.$new_fname);
- $image->resizeToWidth(236);
- $image->save($avatars_dir.$new_fname);
- $r->avatar = $new_fname;
- $uid = R::store($r);
- } else
- {
- $uid = \Users\get('id');
- }
- // and, create a channel record for him
- $channel_record = R::findOne('channels', "`channel_id` = ?", array($channel_summary['id']));
- if( !$channel_record )
- {
- // create
- $channel_record = R::dispense('channels');
- } else
- {
- // update
- $channel_record = R::load('channels', $channel_record['id']);
- }
- $channel_record->channel_id = $channel_summary['id'];
- $channel_record->title = $channel_summary['title'];
- $channel_record->description = $channel_summary['description'];
- $channel_record->custom_url = $channel_summary['custom_url'];
- // avatar image
- if( !$channel_record->image )
- {
- $file_info = pathinfo($channel_summary['image']);
- $avatars_media_dir = '/static/uploads/avatars/';
- $avatars_dir = BASE_DIR . $avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'], $avatars_dir);
- file_put_contents($avatars_dir.$new_fname, Http::request($channel_summary['image'], true));
- $image = new ImageResize();
- $image->load($avatars_dir.$new_fname);
- $image->resizeToWidth(236);
- $image->save($avatars_dir.$new_fname);
- $channel_record->image = $new_fname;
- }
- // banner image
- if( !$channel_record->banner_image )
- {
- $file_info = pathinfo($channel_summary['banner_image']);
- $avatars_media_dir = '/static/uploads/banners/';
- $avatars_dir = BASE_DIR . $avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'], $avatars_dir);
- file_put_contents($avatars_dir.$new_fname, Http::request($channel_summary['banner_image'], true));
- $channel_record->banner_image = $new_fname;
- }
- $channel_record->view_count = $channel_summary['statistics']['viewCount'];
- $channel_record->comment_count = $channel_summary['statistics']['commentCount'];
- $channel_record->subscriber_count = $channel_summary['statistics']['subscriberCount'];
- $channel_record->hidden_subscriber_count = $channel_summary['statistics']['hiddenSubscriberCount'];
- $channel_record->video_count = $channel_summary['statistics']['videoCount'];
- $channel_record->sharedUsersList[] = R::load('users', $uid);
- $channel_record->last_update = TimeManager::time();
- $chid = R::store($channel_record);
- if( \Users\get('id') )
- {
- if( isset($_SESSION['from_my_price']) )
- {
- unset($_SESSION['from_my_price']);
- Http::redirect(\Urls::get(array('app' => 'catalog', 'method' => 'my_price')));
- } else
- {
- Http::redirect('/');
- }
- }
- // login now
- $_POST['email'] = $chemail;
- $_POST['password'] = '';
- $users_controller = BASE_DIR . '/apps/users/controller.php';
- require $users_controller;
- $uc = new Users_Controller();
- define('FORCE_SOCIAL_LOGIN', true);
- $uc->do_signin(array());
- exit();
- } catch (Google_Service_Exception $e) {
- unset($_SESSION['token']);
- Http::redirect(ACTIVE_URI);
- exit(sprintf('<p>A service error occurred: <code>%s</code></p>',
- htmlspecialchars($e->getMessage())));
- } catch (Google_Exception $e) {
- unset($_SESSION['token']);
- Http::redirect(ACTIVE_URI);
- exit(sprintf('<p>An client error occurred: <code>%s</code></p>',
- htmlspecialchars($e->getMessage())));
- }
- $_SESSION['token'] = $client->getAccessToken();
- } else {
- unset($_SESSION['token']);
- $state = mt_rand();
- $client->setState($state);
- $_SESSION['state'] = $state;
- $authUrl = $client->createAuthUrl();
- Http::redirect($authUrl);
- }
- exit('test');
- }
- public function vk_go($request)
- {
- if( \Users\get('id') )
- {
- Http::redirect('/');
- }
- Http::redirect( \Socialist\vk_login_url() );
- }
- public function vk($request)
- {
- // vk.com authorization
- $app_settings = App::settings();
- $api = $app_settings['socialist']['vk'];
- if( \Users\get('id') )
- {
- Http::redirect('/');
- }
- if(!empty($_GET['code']))
- {
- // we got the code
- $vk_grand_url = "https://api.vk.com/oauth/access_token?client_id=".$api['id']."&client_secret=".$api['secret']."&code=".$_GET['code']."&redirect_uri=" . urlencode(\Http::getHostUrl() . \Urls::get(array('app' => 'socialist', 'alias' => 'via-vk-handler')));
- $resp = Http::request($vk_grand_url,true);
- $data = json_decode($resp, true);
- $vk_access_token = $data['access_token'];
- $vk_uid = $data['user_id'];
- $res = Http::request("https://api.vk.com/method/users.get?uids=".$vk_uid."&access_token=".$vk_access_token."&fields=uid,first_name,last_name,screen_name,sex,bdate,city,photo_200_orig",true);
- $data = json_decode($res, true);
- $user_info = $data['response'][0];
- if( R::count('users', "`email` = ? AND `viasocial` = 1", array($user_info['uid'].'@vk.com')) )
- {
- // already exists, login
- $_POST['email'] = $user_info['uid'].'@vk.com';
- $_POST['password'] = '';
- $users_controller = BASE_DIR . '/apps/users/controller.php';
- require $users_controller;
- $uc = new Users_Controller();
- define('FORCE_SOCIAL_LOGIN', true);
- $uc->do_signin(array());
- exit();
- } else
- {
- // not exists, signup
- $r = R::dispense('users');
- $r->name = $user_info['first_name'].' '.$user_info['last_name'];
- $r->email = $user_info['uid'].'@vk.com';
- $r->password = '';
- $r->verified = 1;
- $r->viasocial = true;
- $r->ban = 0;
- $file_info = pathinfo($user_info['photo_200_orig']);
- $avatars_media_dir = '/static/uploads/avatars/';
- $avatars_dir = BASE_DIR . $avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'], $avatars_dir);
- file_put_contents($avatars_dir.$new_fname, Http::request($user_info['photo_200_orig'], true));
- $image = new ImageResize();
- $image->load($avatars_dir.$new_fname);
- $image->resizeToWidth(236);
- $image->save($avatars_dir.$new_fname);
- $r->avatar = $new_fname;
- R::store($r);
- // login now
- $_POST['email'] = $user_info['uid'].'@vk.com';
- $_POST['password'] = '';
- $users_controller = BASE_DIR . '/apps/users/controller.php';
- require $users_controller;
- $uc = new Users_Controller();
- define('FORCE_SOCIAL_LOGIN', true);
- $uc->do_signin(array());
- exit();
- }
- } else
- {
- redirect('/');
- }
- }
- public function fb($request)
- {
- // facebook.com authorization
- $app_settings = App::settings();
- $api = $app_settings['socialist']['fb'];
- if(!empty($_GET['code']))
- {
- $params = array(
- 'client_id' => $api['id'],
- 'redirect_uri' => SELF_URL,
- 'client_secret' => $api['secret'],
- 'code' => $_GET['code']
- );
- $url = 'https://graph.facebook.com/oauth/access_token';
- $tokenInfo = null;
- $rqwst = Http::request($url . '?' . http_build_query($params),true);
- parse_str($rqwst, $tokenInfo);
- if (count($tokenInfo) > 0 && isset($tokenInfo['access_token'])) {
- $params = array('access_token' => $tokenInfo['access_token']);
- $userInfo = json_decode(Http::request('https://graph.facebook.com/me' . '?fields=location,id,birthday,email,first_name,gender,last_name,link,name,age_range&' . urldecode(http_build_query($params)),true), true);
- if (isset($userInfo['id'])) {
- $userInfo = $userInfo;
- $result = true;
- }
- }
- $user_info = $userInfo;
- $user_picture = 'https://graph.facebook.com/'.$user_info['id'].'/picture?type=large&ext=.jpg';
- if (R::count('users', 'email = ?', array($user_info['id'].'@facebook.com'))) {
- // already exists, login
- $_POST['email'] = $user_info['id'].'@facebook.com';
- $_POST['password'] = base64_encode(($user_info['id'] + 100500));
- $this->load('users/controller');
- $this->connections->controller['users']->login($request);
- exit();
- } else {
- // not found, signup
- $newUser = R::dispense('users');
- $newUser->is_activated = 1;
- $newUser->is_admin = 0;
- $newUser->is_banned = 0;
- $newUser->login = $user_info['id'].'@facebook.com';
- $newUser->password = password_hash(base64_encode(($user_info['id'] + 100500)), PASSWORD_DEFAULT);
- $newUser->name = $user_info['first_name'].' '.$user_info['last_name'];
- $gender = $user_info['gender'];
- $newUser->gender = trim(FilterMaster::filterAll($gender));
- $age = 0;
- if (isset($user_info['birthday']) && $user_info['birthday'] != '') {
- $birth_date = strtotime($user_info['birthday']);
- $age = (int)date('Y',TimeManager::time()) - date('Y',$birth_date);
- }
- $newUser->age = $age;
- $city = '';
- if(isset($user_info['location']) && isset($user_info['location']['name']) && $user_info['location']['name'] != '') {
- $city = $user_info['location']['name'];
- }
- $newUser->city = trim(FilterMaster::filterAll($city));
- $file_info = pathinfo($user_picture);
- $avatars_media_dir = '/static/uploads/avatars/';
- $avatars_dir = BASE_DIR.$avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'],$avatars_dir);
- file_put_contents($avatars_dir.$new_fname,Http::request($user_picture,true));
- $image = new ImageResize();
- $image->load($avatars_dir.$new_fname);
- $image->resizeToWidth(207);
- $image->save($avatars_dir.$new_fname);
- $newUser->avatar = $new_fname;
- $newUser->email = $user_info['id'].'@facebook.com';
- $newUser->money = 0.00;
- $newUser->socials = json_encode(array('facebook'=>$user_info['id']));
- $newUser->profilesettings = json_encode(array());
- $newUser->account_type = 0;
- $id = R::store($newUser);
- // login now
- $_POST['email'] = $user_info['id'].'@facebook.com';
- $_POST['password'] = base64_encode(($user_info['id'] + 100500));
- $this->load('users/controller');
- $this->connections->controller['users']->login($request);
- exit();
- }
- } else
- {
- redirect('/');
- }
- }
- public function tw($request)
- {
- // twitter.com authorization
- $app_settings = App::settings();
- $api = $app_settings['socialist']['tw'];
- define('CONSUMER_KEY', $api['key']);
- define('CONSUMER_SECRET', $api['secret']);
- define('REQUEST_TOKEN_URL', 'https://api.twitter.com/oauth/request_token');
- define('AUTHORIZE_URL', 'https://api.twitter.com/oauth/authorize');
- define('ACCESS_TOKEN_URL', 'https://api.twitter.com/oauth/access_token');
- define('ACCOUNT_DATA_URL', 'https://api.twitter.com/1.1/users/show.json');
- define('CALLBACK_URL', SELF_URL);
- define('URL_SEPARATOR', '&');
- if( isset($_GET['auth_redirect']) )
- {
- $this->tw_authorize();
- } else
- {
- if( !empty($_GET['oauth_token']) && !empty($_GET['oauth_verifier']) )
- {
- $oauth_nonce = md5(uniqid(rand(), true));
- $oauth_timestamp = time();
- $oauth_token = $_GET['oauth_token'];
- $oauth_verifier = $_GET['oauth_verifier'];
- $oauth_base_text = "GET&";
- $oauth_base_text .= urlencode(ACCESS_TOKEN_URL)."&";
- $params = array(
- 'oauth_consumer_key=' . CONSUMER_KEY . URL_SEPARATOR,
- 'oauth_nonce=' . $oauth_nonce . URL_SEPARATOR,
- 'oauth_signature_method=HMAC-SHA1' . URL_SEPARATOR,
- 'oauth_token=' . $oauth_token . URL_SEPARATOR,
- 'oauth_timestamp=' . $oauth_timestamp . URL_SEPARATOR,
- 'oauth_verifier=' . $oauth_verifier . URL_SEPARATOR,
- 'oauth_version=1.0'
- );
- $key = CONSUMER_SECRET . URL_SEPARATOR;
- $oauth_base_text = 'GET' . URL_SEPARATOR . urlencode(ACCESS_TOKEN_URL) . URL_SEPARATOR . implode('', array_map('urlencode', $params));
- $oauth_signature = base64_encode(hash_hmac("sha1", $oauth_base_text, $key, true));
- $params = array(
- 'oauth_nonce=' . $oauth_nonce,
- 'oauth_signature_method=HMAC-SHA1',
- 'oauth_timestamp=' . $oauth_timestamp,
- 'oauth_consumer_key=' . CONSUMER_KEY,
- 'oauth_token=' . urlencode($oauth_token),
- 'oauth_verifier=' . urlencode($oauth_verifier),
- 'oauth_signature=' . urlencode($oauth_signature),
- 'oauth_version=1.0'
- );
- $url = ACCESS_TOKEN_URL . '?' . implode('&', $params);
- $response = Http::request($url,true);
- parse_str($response, $response);
- $oauth_nonce = md5(uniqid(rand(), true));
- $oauth_timestamp = time();
- $oauth_token = $response['oauth_token'];
- $oauth_token_secret = $response['oauth_token_secret'];
- $screen_name = $response['screen_name'];
- $params = array(
- 'oauth_consumer_key=' . CONSUMER_KEY . URL_SEPARATOR,
- 'oauth_nonce=' . $oauth_nonce . URL_SEPARATOR,
- 'oauth_signature_method=HMAC-SHA1' . URL_SEPARATOR,
- 'oauth_timestamp=' . $oauth_timestamp . URL_SEPARATOR,
- 'oauth_token=' . $oauth_token . URL_SEPARATOR,
- 'oauth_version=1.0' . URL_SEPARATOR,
- 'screen_name=' . $screen_name
- );
- $oauth_base_text = 'GET' . URL_SEPARATOR . urlencode(ACCOUNT_DATA_URL) . URL_SEPARATOR . implode('', array_map('urlencode', $params));
- $key = CONSUMER_SECRET . '&' . $oauth_token_secret;
- $signature = base64_encode(hash_hmac("sha1", $oauth_base_text, $key, true));
- $params = array(
- 'oauth_consumer_key=' . CONSUMER_KEY,
- 'oauth_nonce=' . $oauth_nonce,
- 'oauth_signature=' . urlencode($signature),
- 'oauth_signature_method=HMAC-SHA1',
- 'oauth_timestamp=' . $oauth_timestamp,
- 'oauth_token=' . urlencode($oauth_token),
- 'oauth_version=1.0',
- 'screen_name=' . $screen_name
- );
- $url = ACCOUNT_DATA_URL . '?' . implode(URL_SEPARATOR, $params);
- $response = Http::request($url,true);
- // fuh... now into json
- $user_data = json_decode($response,true);
- $user_info = $user_data;
- if( R::count('users','email = ?',array($user_info['id_str'].'@twitter.com')) )
- {
- // account isset, login
- $_POST['email'] = $user_info['id_str'].'@twitter.com';
- $_POST['password'] = base64_encode(($user_info['id_str'] + 100500));
- $this->load('users/controller');
- $this->connections->controller['users']->login($request);
- } else
- {
- // new user, signup
- // http://pbs.twimg.com/profile_images/id_str/Rtg92MO0_normal.png
- $newUser = R::dispense('users');
- $newUser->is_activated = 1;
- $newUser->is_admin = 0;
- $newUser->is_banned = 0;
- $newUser->login = $user_info['id_str'].'@twitter.com';
- $newUser->password = password_hash(base64_encode(($user_info['id_str'] + 100500)), PASSWORD_DEFAULT);
- $newUser->name = $user_info['name'];
- $gender = 'male';
- $newUser->gender = trim(FilterMaster::filterAll($gender));
- $newUser->age = (int)trim(FilterMaster::filterAll(20));
- $newUser->city = trim(FilterMaster::filterAll($user_info['location']));
- $newUser->email = $user_info['id_str'].'@twitter.com';
- $newUser->money = 0.00;
- $user_picture = str_replace('_normal','',$user_info['profile_image_url']);
- $file_info = pathinfo($user_picture);
- $avatars_media_dir = '/static/uploads/avatars/';
- $avatars_dir = BASE_DIR.$avatars_media_dir;
- $new_fname = FileSystem::getUniqueFilename($file_info['basename'],$avatars_dir);
- file_put_contents($avatars_dir.$new_fname,Http::request($user_picture,true));
- $image = new ImageResize();
- $image->load($avatars_dir.$new_fname);
- $image->resizeToWidth(207);
- $image->save($avatars_dir.$new_fname);
- $newUser->avatar = $new_fname;
- $newUser->socials = json_encode(array('twitter'=>$user_info['screen_name']));
- $newUser->profilesettings = json_encode(array());
- $newUser->account_type = 0;
- $id = R::store($newUser);
- // login
- $_POST['email'] = $user_info['id_str'].'@twitter.com';
- $_POST['password'] = base64_encode(($user_info['id_str'] + 100500));
- $this->load('users/controller');
- $this->connections->controller['users']->login($request);
- }
- } else
- {
- redirect('/');
- }
- }
- }
- public function tw_authorize() {
- $oauth_nonce = md5(uniqid(rand(), true));
- $oauth_timestamp = time();
- $params = array(
- 'oauth_callback=' . urlencode(CALLBACK_URL) . URL_SEPARATOR,
- 'oauth_consumer_key=' . CONSUMER_KEY . URL_SEPARATOR,
- 'oauth_nonce=' . $oauth_nonce . URL_SEPARATOR,
- 'oauth_signature_method=HMAC-SHA1' . URL_SEPARATOR,
- 'oauth_timestamp=' . $oauth_timestamp . URL_SEPARATOR,
- 'oauth_version=1.0'
- );
- $oauth_base_text = implode('', array_map('urlencode', $params));
- $key = CONSUMER_SECRET . URL_SEPARATOR;
- $oauth_base_text = 'GET' . URL_SEPARATOR . urlencode(REQUEST_TOKEN_URL) . URL_SEPARATOR . $oauth_base_text;
- $oauth_signature = base64_encode(hash_hmac('sha1', $oauth_base_text, $key, true));
- //params
- $params = array(
- URL_SEPARATOR . 'oauth_consumer_key=' . CONSUMER_KEY,
- 'oauth_nonce=' . $oauth_nonce,
- 'oauth_signature=' . urlencode($oauth_signature),
- 'oauth_signature_method=HMAC-SHA1',
- 'oauth_timestamp=' . $oauth_timestamp,
- 'oauth_version=1.0'
- );
- // склеиваем параметры для формирования url
- $url = REQUEST_TOKEN_URL . '?oauth_callback=' . urlencode(CALLBACK_URL) . implode('&', $params);
- // Отправляем GET запрос по сформированному url
- $response = Http::request($url,true);
- // Парсим ответ
- parse_str($response, $response);
- // записываем ответ в переменные
- $oauth_token = $response['oauth_token'];
- $oauth_token_secret = $response['oauth_token_secret'];
- //в итоге сама ссылка
- $link = AUTHORIZE_URL . '?oauth_token=' . $oauth_token;
- redirect( $link );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement