forked from hanzov69/bagsnite-php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoauth.php
143 lines (131 loc) · 4.5 KB
/
oauth.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
//start session
session_start();
include 'config.php';
include $includesDir . 'database.php';
//include google api files
include_once 'vendor/autoload.php';
// Enable error reporting
if ($debugEnable == "true"){
error_reporting(E_ALL);
ini_set('display_errors', 1);
}
// New Google client
$gClient = new Google_Client();
$gClient->setApplicationName('Earl Greyders');
$gClient->setAuthConfigFile('client_secret.json');
$gClient->addScope(Google_Service_Oauth2::USERINFO_PROFILE);
$gClient->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
// New Google Service
$google_oauthV2 = new Google_Service_Oauth2($gClient);
// LOGOUT?
if (isset($_REQUEST['logout']))
{
unset($_SESSION["auto"]);
unset($_SESSION['token']);
$gClient->revokeToken();
header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL)); //redirect user back to page
}
// GOOGLE CALLBACK?
if (isset($_GET['code']))
{
$gClient->authenticate($_GET['code']);
$_SESSION['token'] = $gClient->getAccessToken();
header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL));
return;
}
// PAGE RELOAD?
if (isset($_SESSION['token']))
{
$gClient->setAccessToken($_SESSION['token']);
}
// Autologin?
if(isset($_GET["auto"]))
{
$_SESSION['auto'] = $_GET["auto"];
}
// LOGGED IN?
if ($gClient->getAccessToken()) // Sign in
{
//For logged in user, get details from google using access token
try {
$user = $google_oauthV2->userinfo->get();
$user_id = $user['id'];
$first_name = filter_var($user['givenName'], FILTER_SANITIZE_SPECIAL_CHARS);
$last_name = filter_var($user['familyName'], FILTER_SANITIZE_SPECIAL_CHARS);
$email = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
$gender = filter_var($user['gender'], FILTER_SANITIZE_SPECIAL_CHARS);
$profile_url = filter_var($user['link'], FILTER_VALIDATE_URL);
$profile_image_url = filter_var($user['picture'], FILTER_VALIDATE_URL);
$personMarkup = "$email<div><img src='$profile_image_url?sz=50'></div>";
$_SESSION['token'] = $gClient->getAccessToken();
$_SESSION['google_userid'] = $user_id;
// Show user
$boolarray = Array(false => 'false', true => 'true');
// time to check if they exist
$query = "SELECT * FROM users WHERE google_userid = '$user_id'";
if ($result = $conn->query($query)){
$row_cnt = $result->num_rows;
if ($row_cnt < 1){
// we don't know them
// here is where we insert to database as level 0, not approved
$query = "INSERT INTO `users` (google_userid, email, firstname, lastname, seen, level)".
"VALUES ('$user_id', '$email', '$first_name', '$last_name', now(), '0')";
if ($conn->query($query) === TRUE) {
if ($debugEnable == "true"){
echo "Created User successfully\n";
}
} else {
if ($debugEnable == "true"){
echo "Insert failed!\n";
echo "Error: " . $query . "\n" . $conn->error . "\n";
}
}
echo '<br /><a class="logout" href="?logout=1">Logout</a>';
}
else if ($row_cnt > 1){
// they exist multiple times? Shouldn't happen
printf ("multiple hits, wut?\n");
}
else{
//we've seen them before
$obj = $result->fetch_object();
echo '<br /><a href="'.$profile_url.'" target="_blank"><img src="'.$profile_image_url.'?sz=100" /></a>';
echo '<br /><a class="accounts" href="accounts.php">Accounts</a>';
echo '<br /><a class="logout" href="?logout=1">Logout</a>';
if ($debugEnable == "true"){
echo "<br /><br />User exists...\n";
}
}
$result->close();
}
//list all user details
if ($debugEnable == "true"){
echo '<p>Was automatic login? '.$boolarray[isset($_SESSION["auto"])].'</p>';
echo '<pre>';
print_r($user);
echo '</pre>';
}
} catch (Exception $e) {
// The user revoke the permission for this App! Therefore reset session token
unset($_SESSION["auto"]);
unset($_SESSION['token']);
header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL));
}
}
else // Sign up
{
//For Guest user, get google login url
$authUrl = $gClient->createAuthUrl();
// Fast access or manual login button? call this with ?auto
if(isset($_GET["auto"]))
{
header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));
}
else
{
echo '<p>Login?</p>';
echo '<a class="login" href="'.$authUrl.'"><img src="images/google-login-button.png" /></a>';
}
}
?>