<?php
# проверка авторизации
if ($FUNC->sess('auth')) { $sess = explode('z', trim($FUNC->sess('auth'))); // проверка авторизации, парсинг
$hash = $FUNC->filter($sess[0], 'sql'); $num = (isset($sess[1])) ? $FUNC->filter($sess[1], 'sql') : 0; // определение данных
if (!db_exist($DB, 'auths', 'id', array('hash' => $hash, 'num' => $num))) $FUNC->go('/'); else { // проверка в базе данных
$auth = db_output($DB, 'auths', 'user', array('hash' => $hash, 'num' => $num)); // вывод данных пользователя
$user = db_output($DB, 'users', array('active', 'id', 'email', 'sex', 'vk'), array('id' => $auth['user'])); } } // данные пользователя, идентификатор
# запрет доступа, проверка данных
if (!isset($user) || (isset($user) && $user['vk'] != 0)) $FUNC->go('/failed');
# авторизация провалена, возвращена ошибка
if ($user['vk'] != 0 || isset($_GET['error'])) $FUNC->go('/failed');
# авторизация успешна
elseif (isset($_GET['code'])) {
# запрос токена на сервере
$params = array('client_id' => VK['id'], 'client_secret' => VK['key'], 'code' => $_GET['code'], 'redirect_uri' => 'https://' . SERV['host'] .'/vk/save/'); // параметры
$data = json_decode(@file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true); // запрос на сервер
# запрос данных пользователя
if (isset($data['access_token'])) { $fields = 'bdate,deactivated,first_name,id,photo_200,sex'; // список получаемых полей
$params = array('access_token' => $data['access_token'], 'fields' => $fields, 'user_ids' => $data['user_id'], 'v' => VK['vers']); // параметры
$vk = json_decode(@file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true); // запрос на сервер
# получение данных, обработка
if (isset($vk['response'][0]['id'])) { $info = $vk['response'][0]; // информация аккаунта
if (isset($info['deactivated'])) $FUNC->go('/failed'); // проверка блокировки вконтакте
if ($user['active'] != 'yes') { $sex = ($info['sex'] == 0) ? 'none' : (($info['sex'] == 1) ? 'female' : 'male'); } // пол (гендер)
else $sex = $user['sex']; $name = ($USER->filter($info['first_name'], 'name')) ? $info['first_name'] : 'none' ; // настоящее имя
$avatar = (strpos($info['photo_200'], 'camera')) ? 'none' : $USER->avatar($info['photo_200'], true); // аватар
$bdate = (isset($info['bdate']) && $USER->bdate($info['bdate'], true, true)) ? $USER->bdate($info['bdate'], true) : 'none' ; // дата рождения
# определение, обновление e-mail адреса
if (!isset($user['email']) && isset($data['email']) && (!db_exist($DB, 'users', 'email', array('email' => $data['email']))) && // проверка условий установки e-mail
$USER->filter($data['email'], 'email')) db_update($DB, 'users', array('email' => $data['email']), array('id' => $user['id']));
elseif (isset($data['email']) && $user['active'] != 'yes' && (db_exist($DB, 'users', 'email', array('email' => $data['email'])))) // проверка занятость e-mail
$FUNC->go('/failed'); db_update($DB, 'users', array('active' => 'yes', 'avatar' => $avatar, 'birthday' => $bdate, 'name' => $name,
'sex' => $sex, 'status' => 'user', 'vk' => $info['id']), array('id' => $user['id'])); // обновление основных данных
# проверка наличия ошибок, переадресация в игру
$FUNC->go('/garden'); } else $FUNC->go('/failed'); } else $FUNC->go('/failed'); }
# отправляем запрос к ВКонтакте
$http = (isset($_SERVER['HTTPS'])) ? 'https://' : 'http://'; $scope = 'email,offline'; // определение протокола, получаемые параметры
$params = array('client_id' => VK['id'], 'redirect_uri' => $http . SERV['host'] .'/vk/save/', 'response_type' => 'code', 'scope' => $scope, 'v' => VK['vers']); // параметры запроса
$link = urldecode(http_build_query($params)); $FUNC->go('/authorize?'. $link, 'https', 'oauth.vk.com'); // обработка параметров, переадресация
?>