Пример #1
0
    $roles = [['name' => 'Гость'], ['name' => 'Пользователь'], ['name' => 'Администратор']];
    foreach ($groups as $key => $group) {
        $groupObject = new \Users\Group($group);
        $groupObject->save();
        $roleObject = new Users\Role($roles[$key]);
        $roleObject->group_id = $groupObject->id;
        $roleObject->save();
    }
    if (!empty($params['user'])) {
        $user = new Users\User(array('user_login' => $params['user']['user_login'], 'user_mail' => $params['user']['user_mail'], 'user_pass' => password_hash($params['user']['user_pass'], PASSWORD_DEFAULT), 'user_group_id' => $groupObject->id, 'user_role_id' => $roleObject->id));
        $user->save();
        $userInfo = new Users\User\Info(['user_id' => $user->id, 'first_name' => 'Администратор']);
        $userInfo->save();
    } else {
        $user = new Users\User(array('user_login' => 'admin', 'user_mail' => 'admin@' . idn_to_utf8(INJI_DOMAIN_NAME), 'user_pass' => password_hash('admin', PASSWORD_DEFAULT), 'user_group_id' => $groupObject->id, 'user_role_id' => $roleObject->id));
        $user->save();
        $userInfo = new Users\User\Info(['user_id' => $user->id, 'first_name' => 'Администратор']);
        $userInfo->save();
    }
    $socials = [['name' => 'Вконтакте', 'code' => 'vk', 'object_name' => 'Vk'], ['name' => 'Google+', 'code' => 'google', 'object_name' => 'Google'], ['name' => 'Facebook', 'code' => 'facebook', 'object_name' => 'Facebook']];
    $socialsConfig = [[['name' => 'appId'], ['name' => 'secret']], [['name' => 'client_id'], ['name' => 'secret']], [['name' => 'appId'], ['name' => 'secret']]];
    foreach ($socials as $key => $social) {
        $socialObject = new Users\Social($social);
        $socialObject->save();
        foreach ($socialsConfig[$key] as $config) {
            $configObject = new \Users\Social\Config($config);
            $configObject->social_id = $socialObject->id;
            $configObject->save();
        }
    }
};
Пример #2
0
 public function registration($data, $autorization = false)
 {
     extract($data);
     if (empty($user_mail)) {
         Msg::add('Вы не ввели E-mail', 'danger');
         return false;
     }
     $user_mail = trim($user_mail);
     if (!filter_var($user_mail, FILTER_VALIDATE_EMAIL)) {
         Msg::add('Вы ввели не корректный E-mail', 'danger');
         return false;
     }
     $user = $this->get($user_mail, 'mail');
     if ($user) {
         Msg::add('Введенный вами почтовый ящик зарегистрирован в нашей системе, войдите или введите другой почтовый ящик', 'danger');
         return false;
     }
     if (empty($user_login)) {
         $user_login = $user_mail;
     }
     $user_login = trim($user_login);
     $user = $this->get($user_login, 'login');
     if ($user) {
         Msg::add('Введенный вами логин зарегистрирован в нашей системе, войдите или введите другой логин', 'danger');
         return false;
     }
     if (empty($user_name)) {
         $user_name = '';
     }
     if (empty($user_city)) {
         $user_city = '';
     }
     if (empty($user_birthday)) {
         $user_birthday = '';
     }
     if (empty($user_phone)) {
         $user_phone = '';
     }
     $invite_code = !empty($data['invite_code']) ? $data['invite_code'] : (!empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : '')));
     if (!empty($invite_code)) {
         $invite = Users\User\Invite::get($invite_code, 'code');
         if (!$invite) {
             Msg::add('Такой код приглашения не найден', 'danger');
             return false;
         }
         if ($invite->limit && !($invite->limit - $invite->count)) {
             Msg::add('Лимит приглашений для данного кода исчерпан', 'danger');
             return false;
         }
         $parent_id = $invite->user_id;
         $inviter = $parent_id;
         $invite->count++;
         $invite->save();
     }
     if (empty($parent_id) && !empty($this->config['defaultPartner'])) {
         $parent_id = $this->config['defaultPartner'];
     }
     $pass = Tools::randomString(10);
     $user = new Users\User(['pass' => $this->hashpass($pass), 'mail' => $user_mail, 'login' => htmlspecialchars($user_login), 'role_id' => 2, 'group_id' => 2, 'parent_id' => !empty($parent_id) ? $parent_id : 0]);
     if (!empty($this->config['needActivation'])) {
         $user->activation = Tools::randomString();
     }
     $user->save();
     if (!$user->id) {
         Msg::add('Не удалось зарегистрировать', 'danger');
         return false;
     }
     $info = new \Users\User\Info(['user_id' => $user->id, 'first_name' => htmlspecialchars($user_name), 'city' => htmlspecialchars($user_city), 'bday' => htmlspecialchars($user_birthday), 'phone' => htmlspecialchars($user_phone)]);
     $info->save();
     if (isset($inviter)) {
         $this->AddUserActivity($inviter, 2, "У вас зарегистрировался новый партнер, {$info->first_name} {$info->last_name} (id: {$user->id}, email: {$user->mail})");
     }
     if ($autorization) {
         $this->autorization($user_mail, $pass, 'mail');
     }
     if (!empty($this->config['needActivation'])) {
         $from = 'noreply@' . INJI_DOMAIN_NAME;
         $to = $user_mail;
         $subject = 'Регистрация на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME);
         $text = 'Вы были зарегистрированы на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME) . '<br />для входа используйте ваш почтовый ящик в качестве логина и пароль: ' . $pass;
         $text .= '<br />';
         $text .= '<br />';
         $text .= 'Для активации вашего аккаунта перейдите по ссылке <a href = "http://' . INJI_DOMAIN_NAME . '/users/activation/' . $user->id . '/' . $user->activation . '">http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/users/activation/' . $user->id . '/' . $user->activation . '</a>';
         Tools::sendMail($from, $to, $subject, $text);
         Msg::add('Вы были зарегистрированы. На указанный почтовый ящик был выслан ваш пароль и ссылка для активации', 'success');
     } else {
         $from = 'noreply@' . INJI_DOMAIN_NAME;
         $to = $user_mail;
         $subject = 'Регистрация на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME);
         $text = 'Вы были зарегистрированы на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME) . '<br />для входа используйте ваш почтовый ящик в качестве логина и пароль: ' . $pass;
         Tools::sendMail($from, $to, $subject, $text);
         Msg::add('Вы были зарегистрированы. На указанный почтовый ящик был выслан ваш пароль', 'success');
     }
     return $user->id;
 }
Пример #3
0
 public static function auth()
 {
     $config = static::getConfig();
     if (empty($_GET['code']) && empty($_GET['error'])) {
         $query = ['client_id' => $config['appId'], 'scope' => 'email', 'response_type' => 'code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/facebook'];
         \Tools::redirect("https://www.facebook.com/dialog/oauth?" . http_build_query($query));
     }
     if (empty($_GET['code']) && !empty($_GET['error'])) {
         \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']);
     }
     $query = ['client_id' => $config['appId'], 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/facebook', 'client_secret' => $config['secret'], 'code' => urldecode($_GET['code'])];
     $result = @file_get_contents("https://graph.facebook.com/oauth/access_token?" . http_build_query($query));
     if ($result === false) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     parse_str($result, $output);
     if (empty($output['access_token'])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userQuery = ['access_token' => $output['access_token'], 'fields' => 'first_name,middle_name,last_name,email,gender,location,picture'];
     $userResult = @file_get_contents("https://graph.facebook.com/me?" . http_build_query($userQuery));
     if (!$userResult) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userDetail = json_decode($userResult, true);
     if (empty($userDetail['id'])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $social = static::getObject();
     $userSocial = \Users\User\Social::get([['uid', $userDetail['id']], ['social_id', $social->id]]);
     if ($userSocial && $userSocial->user) {
         \App::$cur->users->newSession($userSocial->user);
         if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) {
             \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]);
         }
     } else {
         if ($userSocial && !$userSocial->user) {
             $userSocial->delete();
         }
         if (!\Users\User::$cur->id) {
             $user = false;
             if (!empty($userDetail['email'])) {
                 $user = \Users\User::get($userDetail['email'], 'mail');
             }
             if (!$user) {
                 $user = new \Users\User();
                 $user->group_id = 2;
                 $user->role_id = 2;
                 if (!empty($userDetail['email'])) {
                     $user->login = $user->mail = $userDetail['email'];
                 }
                 $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : ''));
                 if (!empty($invite_code)) {
                     $invite = \Users\User\Invite::get($invite_code, 'code');
                     $inveiteError = false;
                     if (!$invite) {
                         Msg::add('Такой код пришлашения не найден', 'danger');
                         $inveiteError = true;
                     }
                     if ($invite->limit && !($invite->limit - $invite->count)) {
                         Msg::add('Лимит приглашений для данного кода исчерпан', 'danger');
                         $inveiteError = true;
                     }
                     if (!$inveiteError) {
                         $user->parent_id = $invite->user_id;
                         $invite->count++;
                         $invite->save();
                     }
                 }
                 if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) {
                     $user->parent_id = \App::$cur->Users->config['defaultPartner'];
                 }
                 $user->save();
                 $userInfo = new \Users\User\Info();
                 $userInfo->user_id = $user->id;
                 $userInfo->save();
             }
         } else {
             $user = \Users\User::$cur;
         }
         if (!$user->info->photo_file_id && !empty($userDetail['picture']['data']['url'])) {
             $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['picture']['data']['url']);
         }
         if (!$user->info->first_name && !empty($userDetail['first_name'])) {
             $user->info->first_name = $userDetail['first_name'];
         }
         if (!$user->info->last_name && !empty($userDetail['last_name'])) {
             $user->info->last_name = $userDetail['last_name'];
         }
         if (!$user->info->middle_name && !empty($userDetail['middle_name'])) {
             $user->info->middle_name = $userDetail['middle_name'];
         }
         if (!$user->info->city && !empty($userDetail['location'])) {
             $user->info->city = $userDetail['location'];
         }
         if (!$user->info->sex && !empty($userDetail['gender'])) {
             $user->info->sex = $userDetail['gender'] == 'male' ? 1 : ($userDetail['gender'] == 'female' ? 2 : 0);
         }
         $user->info->save();
         $userSocial = new \Users\User\Social();
         $userSocial->uid = $userDetail['id'];
         $userSocial->social_id = $social->id;
         $userSocial->user_id = $user->id;
         $userSocial->save();
         \App::$cur->users->newSession($user);
         if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) {
             \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type], 'Вы успешно зарегистрировались через Facebook', 'success');
         } else {
             \Tools::redirect('/users/cabinet/profile', 'Вы успешно зарегистрировались через Facebook', 'success');
         }
     }
 }
Пример #4
0
 public static function auth()
 {
     $config = static::getConfig();
     if (empty($_GET['code']) && empty($_GET['error'])) {
         $query = ['client_id' => $config['appId'], 'scope' => 'email', 'response_type' => 'code', 'display' => 'page', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/vk'];
         \Tools::redirect("https://oauth.vk.com/authorize?" . http_build_query($query));
     }
     if (empty($_GET['code']) && !empty($_GET['error'])) {
         \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']);
     }
     $query = ['client_id' => $config['appId'], 'client_secret' => $config['secret'], 'code' => $_GET['code'], 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/vk'];
     $result = @file_get_contents("https://oauth.vk.com/access_token?" . http_build_query($query));
     if ($result === false) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $result = json_decode($result, true);
     if (empty($result['user_id'])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userQuery = ['user_id' => $result['user_id'], 'fields' => 'sex, bdate, photo_max_orig, home_town', 'access_token' => $result['access_token']];
     $userResult = @file_get_contents("https://api.vk.com/method/users.get?" . http_build_query($userQuery));
     if (!$userResult) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userDetail = json_decode($userResult, true);
     if (empty($userDetail['response'][0])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $social = static::getObject();
     $userSocial = \Users\User\Social::get([['uid', $result['user_id']], ['social_id', $social->id]]);
     if ($userSocial && $userSocial->user) {
         \App::$cur->users->newSession($userSocial->user);
         if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) {
             \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]);
         }
     } else {
         if ($userSocial && !$userSocial->user) {
             $userSocial->delete();
         }
         if (!\Users\User::$cur->id) {
             $user = false;
             if (!empty($result['email'])) {
                 $user = \Users\User::get($result['email'], 'mail');
             }
             if (!$user) {
                 $user = new \Users\User();
                 $user->group_id = 2;
                 $user->role_id = 2;
                 if (!empty($result['email'])) {
                     $user->login = $user->mail = $result['email'];
                 }
                 $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : ''));
                 if (!empty($invite_code)) {
                     $invite = \Users\User\Invite::get($invite_code, 'code');
                     $inveiteError = false;
                     if (!$invite) {
                         Msg::add('Такой код пришлашения не найден', 'danger');
                         $inveiteError = true;
                     }
                     if ($invite->limit && !($invite->limit - $invite->count)) {
                         Msg::add('Лимит приглашений для данного кода исчерпан', 'danger');
                         $inveiteError = true;
                     }
                     if (!$inveiteError) {
                         $user->parent_id = $invite->user_id;
                         $invite->count++;
                         $invite->save();
                     }
                 }
                 if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) {
                     $user->parent_id = \App::$cur->Users->config['defaultPartner'];
                 }
                 $user->save();
                 $userInfo = new \Users\User\Info();
                 $userInfo->user_id = $user->id;
                 $userInfo->save();
             }
         } else {
             $user = \Users\User::$cur;
         }
         if (!$user->info->photo_file_id && !empty($userDetail['response'][0]['photo_max_orig'])) {
             $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['response'][0]['photo_max_orig']);
         }
         if (!$user->info->first_name && !empty($userDetail['response'][0]['first_name'])) {
             $user->info->first_name = $userDetail['response'][0]['first_name'];
         }
         if (!$user->info->last_name && !empty($userDetail['response'][0]['last_name'])) {
             $user->info->last_name = $userDetail['response'][0]['last_name'];
         }
         if (!$user->info->city && !empty($userDetail['response'][0]['home_town'])) {
             $user->info->city = $userDetail['response'][0]['home_town'];
         }
         if (!$user->info->sex && !empty($userDetail['response'][0]['sex'])) {
             $user->info->sex = $userDetail['response'][0]['sex'] == 2 ? 1 : ($userDetail['response'][0]['sex'] == 1 ? 2 : 0);
         }
         if ($user->info->bday == '0000-00-00' && !empty($userDetail['response'][0]['bdate'])) {
             $user->info->bday = substr_count($userDetail['response'][0]['bdate'], '.') == 2 ? \DateTime::createFromFormat('d.m.Y', $userDetail['response'][0]['bdate'])->format('Y-m-d') : (substr_count($userDetail['response'][0]['bdate'], '.') == 1 ? \DateTime::createFromFormat('d.m', $userDetail['response'][0]['bdate'])->format('Y-m-1') : '0000-00-00');
         }
         $user->info->save();
         $userSocial = new \Users\User\Social();
         $userSocial->uid = $result['user_id'];
         $userSocial->social_id = $social->id;
         $userSocial->user_id = $user->id;
         $userSocial->save();
         \App::$cur->users->newSession($user);
         \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type], 'Вы успешно зарегистрировались через ВКонтакте', 'success');
     }
 }
Пример #5
0
 public static function auth()
 {
     $config = static::getConfig();
     if (empty($_GET['code']) && empty($_GET['error'])) {
         $query = ['client_id' => $config['client_id'], 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'response_type' => 'code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/google'];
         \Tools::redirect("https://accounts.google.com/o/oauth2/auth?" . http_build_query($query));
     }
     if (empty($_GET['code']) && !empty($_GET['error'])) {
         \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']);
     }
     $query = ['client_id' => $config['client_id'], 'client_secret' => $config['secret'], 'code' => $_GET['code'], 'grant_type' => 'authorization_code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/google'];
     $result = false;
     if ($curl = curl_init()) {
         curl_setopt($curl, CURLOPT_URL, 'https://accounts.google.com/o/oauth2/token');
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($curl, CURLOPT_POST, true);
         curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($query));
         $result = curl_exec($curl);
         curl_close($curl);
     }
     if ($result === false) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $result = json_decode($result, true);
     if (empty($result['access_token'])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userQuery = ['access_token' => $result['access_token']];
     $userResult = @file_get_contents("https://www.googleapis.com/oauth2/v1/userinfo?" . http_build_query($userQuery));
     if (!$userResult) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $userDetail = json_decode($userResult, true);
     if (empty($userDetail['id'])) {
         \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger');
     }
     $social = static::getObject();
     $userSocial = \Users\User\Social::get([['uid', $userDetail['id']], ['social_id', $social->id]]);
     if ($userSocial && $userSocial->user) {
         \App::$cur->users->newSession($userSocial->user);
         if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) {
             \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]);
         }
     } else {
         if ($userSocial && !$userSocial->user) {
             $userSocial->delete();
         }
         if (!\Users\User::$cur->id) {
             $user = false;
             if (!empty($userDetail['email']) && !empty($userDetail['verified_email'])) {
                 $user = \Users\User::get($userDetail['email'], 'mail');
             }
             if (!$user) {
                 $user = new \Users\User();
                 $user->group_id = 2;
                 $user->role_id = 2;
                 if (!empty($userDetail['email']) && !empty($userDetail['verified_email'])) {
                     $user->login = $user->mail = $userDetail['email'];
                 }
                 $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : ''));
                 if (!empty($invite_code)) {
                     $invite = \Users\User\Invite::get($invite_code, 'code');
                     $inveiteError = false;
                     if (!$invite) {
                         Msg::add('Такой код пришлашения не найден', 'danger');
                         $inveiteError = true;
                     }
                     if ($invite->limit && !($invite->limit - $invite->count)) {
                         Msg::add('Лимит приглашений для данного кода исчерпан', 'danger');
                         $inveiteError = true;
                     }
                     if (!$inveiteError) {
                         $user->parent_id = $invite->user_id;
                         $invite->count++;
                         $invite->save();
                     }
                 }
                 if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) {
                     $user->parent_id = \App::$cur->Users->config['defaultPartner'];
                 }
                 $user->save();
                 $userInfo = new \Users\User\Info();
                 $userInfo->user_id = $user->id;
                 $userInfo->save();
             }
         } else {
             $user = \Users\User::$cur;
         }
         if (!$user->info->photo_file_id && !empty($userDetail['picture'])) {
             $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['picture']);
         }
         if (!$user->info->first_name && !empty($userDetail['given_name'])) {
             $user->info->first_name = $userDetail['given_name'];
         }
         if (!$user->info->last_name && !empty($userDetail['family_name'])) {
             $user->info->last_name = $userDetail['family_name'];
         }
         if (!$user->info->sex && !empty($userDetail['gender'])) {
             $user->info->sex = $userDetail['gender'] == 'male' ? 1 : ($userDetail['gender'] == 'female' ? 2 : 0);
         }
         $user->info->save();
         $userSocial = new \Users\User\Social();
         $userSocial->uid = $userDetail['id'];
         $userSocial->social_id = $social->id;
         $userSocial->user_id = $user->id;
         $userSocial->save();
         \App::$cur->users->newSession($user);
         \Tools::redirect('/users/cabinet/profile', 'Вы успешно зарегистрировались через Google+', 'success');
     }
 }