oauth-google.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief обрабочик oauth авторизации через google
6  */
7 
8 isset($user) or require $_SERVER['DOCUMENT_ROOT'] . '/page/404.php';
9 
10 if (isset($_POST['action'])) {
11  $params = array(
12  'client_id' => Wrong\Start\Env::$e->GOOGLE_OAUTH_CLIENT_ID,
13  'redirect_uri' => 'https://' . Wrong\Start\Env::$e->HTTP_HOST . '/api/action/' . $basename,
14  'response_type' => 'code',
15  'scope' => 'https://www.googleapis.com/auth/userinfo.email',
16  'state' => '123'
17  );
18 
19  $url = 'https://accounts.google.com/o/oauth2/auth?' . urldecode(http_build_query($params));
20  exit("
21  if (!window.open('$url','oauth','left='+Math.ceil((window.screen.width - 800)/2)+', top='+Math.ceil((window.screen.height-600)/2)+', width=800, height=600')) {
22  location.href='$url';
23  }
24  ");
25 }
26 
27 if (!empty($_GET['code'])) {
28  $params = array(
29  'client_id' => Wrong\Start\Env::$e->GOOGLE_OAUTH_CLIENT_ID,
30  'client_secret' => Wrong\Start\Env::$e->GOOGLE_OAUTH_CLIENT_SECRET,
31  'redirect_uri' => 'https://' . Wrong\Start\Env::$e->HTTP_HOST . '/api/action/' . $basename,
32  'grant_type' => 'authorization_code',
33  'code' => $_GET['code']
34  );
35 
36  $ch = curl_init('https://accounts.google.com/o/oauth2/token');
37  curl_setopt($ch, CURLOPT_POST, 1);
38  curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
39  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
40  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
41  curl_setopt($ch, CURLOPT_HEADER, false);
42  $data = curl_exec($ch);
43  curl_close($ch);
44 
45  $data = json_decode($data, true);
46  if (!empty($data['access_token'])) {
47  $params = array(
48  'access_token' => $data['access_token'],
49  'id_token' => $data['id_token'],
50  'token_type' => 'Bearer',
51  'expires_in' => 3599
52  );
53 
54  $info = file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo?' . urldecode(http_build_query($params)));
55  $info = json_decode($info, true);
56 
57  if (!empty($info['email'])) {
58  if ($user = Wrong\Auth\User::match($info['email'])) {
60  $user = new Wrong\Auth\User($user->id);
61  $user->set_confirm(1);
62  } else {
63  if ($id = Wrong\Auth\User::session(Wrong\Models\Users::create($info['email'], substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'), 0, 10), Wrong\Start\Env::$e->GROUPS_USERS, Wrong\Start\Env::$e->OWNER_GROUP_USERS))) {
64  $user = new Wrong\Auth\User($id);
65  $user->set_confirm(1);
66  Wrong\Task\Stackjs::add('$(function(){successToast("Приятной работы в системе!");});', 2, 'sign-up');
67  }
68  }
69  if ($user->access()->page('/system')) {
70  exit('<!DOCTYPE html><html lang="en"><head><title>...</title></head><body><script>if(window.opener){window.opener.location.href="/system";window.close();}else{location.href="/system";}</script></body></html>');
71  } else {
72  exit('<!DOCTYPE html><html lang="en"><head><title>...</title></head><body><script>if(window.opener){window.opener.location.reload();window.close();}else{location.href="/";}</script></body></html>');
73  }
74  }
75  }
76 }
$_POST['groups']
Definition: add-action.php:16
if(! $response->_meta) $data
Definition: anycomment.php:18
User отвечает за работу с данными пользователя
Definition: User.php:21
static session($init_id=0)
Definition: User.php:222
static add($code, $timeout=0, $key='')
Definition: Stackjs.php:25
$user
Definition: from-user.php:38
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']
Definition: from-user.php:36
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198