Subversion Repositories cheapmusic

Rev

Rev 25 | Rev 31 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25 - 1
<?php
2
/*
3
 * Facebook OAuth
4
 */
5
// Include the autoloader provided in the SDK
6
require_once __DIR__ . '/social_oauth_lib/facebook-php-sdk/autoload.php';
7
 
8
// Include required libraries
9
use Facebook\Facebook;
10
use Facebook\Exceptions\FacebookResponseException;
11
use Facebook\Exceptions\FacebookSDKException;
12
 
13
$fb = new Facebook(array(
14
	'app_id' => FB_APP_ID,
15
	'app_secret' => FB_APP_SECRET,
16
	'default_graph_version' => 'v2.10',
17
    'persistent_data_handler' => 'session'
18
));
19
 
20
// Get redirect login helper
21
$helper = $fb->getRedirectLoginHelper();
22
 
23
if(isset($_GET['state'])){
24
    $_SESSION['FBRLH_state'] = $_GET['state'];
25
}
26
 
27
if((isset($_REQUEST['state']) && isset($_REQUEST['code'])) || isset($_SESSION['facebook_access_token'])){
28
    // Try to get access token
29
    try {
30
        if(isset($_SESSION['facebook_access_token'])){
31
            $fbAccessToken = $_SESSION['facebook_access_token'];
32
        }else{
33
            $fbAccessToken = $helper->getAccessToken(SOCIAL_REDIRECT_URL);
34
        }
35
    } catch(FacebookResponseException $e) {
36
        echo 'Graph returned an error: ' . $e->getMessage();
37
        exit;
38
    } catch(FacebookSDKException $e) {
39
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
40
        exit;
41
    }
42
}
43
 
44
if(isset($fbAccessToken)){
45
	if(isset($_SESSION['facebook_access_token'])){
46
		$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
47
	}else{
48
		// Put short-lived access token in session
49
		$_SESSION['facebook_access_token'] = (string) $fbAccessToken;
50
 
51
	  	// OAuth 2.0 client handler helps to manage access tokens
52
		$oAuth2Client = $fb->getOAuth2Client();
53
 
54
		// Exchanges a short-lived access token for a long-lived one
55
		$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
56
		$_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
57
 
58
		// Set default access token to be used in script
59
		$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
60
	}
61
 
62
	// Redirect the user back to the same page if url has "code" parameter in query string
63
	if(isset($_GET['code'])){
64
		header('Location: ./');
65
		exit;
66
	}
67
 
68
	// Getting user facebook profile info
69
	try {
26 - 70
		$profileRequest = $fb->get('/me?fields=name,first_name,last_name,email,link,picture');
25 - 71
		$fbUserProfile = $profileRequest->getGraphNode()->asArray();
72
	} catch(FacebookResponseException $e) {
73
		echo 'Graph returned an error: ' . $e->getMessage();
74
		session_destroy();
75
		// Redirect user back to app login page
76
		header("Location: ./");
77
		exit;
78
	} catch(FacebookSDKException $e) {
79
		echo 'Facebook SDK returned an error: ' . $e->getMessage();
80
		exit;
81
	}
82
 
83
	// Initialize User class
84
	$user = new User();
85
 
86
    // Getting user profile info
87
	$fbUserData = array();
88
	$fbUserData['oauth_uid']  = !empty($fbUserProfile['id'])?$fbUserProfile['id']:'';
89
	$fbUserData['first_name'] = !empty($fbUserProfile['first_name'])?$fbUserProfile['first_name']:'';
90
	$fbUserData['last_name']  = !empty($fbUserProfile['last_name'])?$fbUserProfile['last_name']:'';
91
	$fbUserData['email'] 	  = !empty($fbUserProfile['email'])?$fbUserProfile['email']:'';
92
	$fbUserData['picture'] 	  = !empty($fbUserProfile['picture']['url'])?$fbUserProfile['picture']['url']:'';
93
	$fbUserData['link'] 	  = !empty($fbUserProfile['link'])?$fbUserProfile['link']:'';
94
 
95
	// Insert or update user data to the database
96
    $fbUserData['oauth_provider'] = 'facebook';
97
	$userData = $user->checkUser($fbUserData);
98
 
99
	// Get logout url
100
	$logoutURL = $helper->getLogoutUrl($fbAccessToken, BASE_URL.'userAccount.php?logoutSubmit=1');
101
 
102
    // Store login status into the session
103
    $sessData['userLoggedIn'] = TRUE;
104
    $sessData['userID'] = $userData['id'];
105
	$sessData['loginType'] = 'social';
106
    $_SESSION['sessData'] = $sessData;
107
 
108
    // Redirect to my account
109
    header("Location: account.php");
110
	exit();
111
}else{
112
	// Get login url
113
	$fbLoginURL = $helper->getLoginUrl(SOCIAL_REDIRECT_URL, array('email'));
114
	$fbLoginURL = filter_var($fbLoginURL, FILTER_SANITIZE_URL);
115
}
116
 
117
 
118
/*
119
 * Google OAuth
120
 */
121
// Include Google client library
122
require_once 'social_oauth_lib/google-php-client/Google_Client.php';
123
require_once 'social_oauth_lib/google-php-client/contrib/Google_Oauth2Service.php';
124
 
125
// Call Google API
126
$gClient = new Google_Client();
127
$gClient->setApplicationName('Login to FindCheapMusic.com');
128
$gClient->setClientId(GP_CLIENT_ID);
129
$gClient->setClientSecret(GP_CLIENT_SECRET);
130
$gClient->setRedirectUri(SOCIAL_REDIRECT_URL);
131
 
132
$google_oauthV2 = new Google_Oauth2Service($gClient);
133
 
134
if(isset($_GET['code'])){
135
	$gClient->authenticate($_GET['code']);
136
	$_SESSION['google_access_token'] = $gClient->getAccessToken();
137
	header('Location: ' . filter_var(BASE_URL, FILTER_SANITIZE_URL));
138
	exit;
139
}
140
 
141
if(isset($_SESSION['google_access_token'])){
142
	$gClient->setAccessToken($_SESSION['google_access_token']);
143
}
144
 
145
if($gClient->getAccessToken() && !isset($_GET['logoutSubmit'])){
146
	// Get user profile data from google
147
	$gpUserProfile = $google_oauthV2->userinfo->get();
148
 
149
	// Initialize User class
150
	$user = new User();
151
 
152
	// Getting user profile info
153
	$gpUserData = array();
154
	$gpUserData['oauth_uid']  = !empty($gpUserProfile['id'])?$gpUserProfile['id']:'';
155
	$gpUserData['first_name'] = !empty($gpUserProfile['given_name'])?$gpUserProfile['given_name']:'';
156
	$gpUserData['last_name']  = !empty($gpUserProfile['family_name'])?$gpUserProfile['family_name']:'';
157
	$gpUserData['email'] 	  = !empty($gpUserProfile['email'])?$gpUserProfile['email']:'';
158
	$gpUserData['picture'] 	  = !empty($gpUserProfile['picture'])?$gpUserProfile['picture']:'';
159
	$gpUserData['link'] 	  = !empty($gpUserProfile['link'])?$gpUserProfile['link']:'';
160
 
161
	// Insert or update user data to the database
162
    $gpUserData['oauth_provider'] = 'google';
163
    $userData = $user->checkUser($gpUserData);
164
 
165
	// Store login status into the session
166
    $sessData['userLoggedIn'] = TRUE;
167
    $sessData['userID'] = $userData['id'];
168
	$sessData['loginType'] = 'social';
169
    $_SESSION['sessData'] = $sessData;
170
 
171
    // Redirect to my account
172
    header("Location: account.php");
173
	exit();
174
}else{
175
	$gpLoginURL = $gClient->createAuthUrl();
176
	$gpLoginURL = filter_var($gpLoginURL, FILTER_SANITIZE_URL);
177
}
178
 
179
/*
180
 * Twitter OAuth
181
 */
182
// Include Twitter client library
183
require_once 'social_oauth_lib/twitter-php-oauth/twitteroauth.php';
184
 
185
// If OAuth token not matched
186
if(isset($_REQUEST['oauth_token']) && $_SESSION['twitter_access_token'] !== $_REQUEST['oauth_token']){
187
	// Remove token from session
188
	unset($_SESSION['twitter_access_token']);
189
	unset($_SESSION['twitter_token_secret']);
190
}
191
 
192
// If user already verified
193
if(isset($_SESSION['status']) && $_SESSION['status'] == 'verified' && !empty($_SESSION['request_vars'])){
194
	// Retrive variables from session
195
	$username 		  = $_SESSION['request_vars']['screen_name'];
196
	$twitterId		  = $_SESSION['request_vars']['user_id'];
197
	$oauthToken 	  = $_SESSION['request_vars']['oauth_token'];
198
	$oauthTokenSecret = $_SESSION['request_vars']['oauth_token_secret'];
199
	$profilePicture	  = $_SESSION['userData']['picture'];
200
 
201
}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['twitter_access_token'] == $_REQUEST['oauth_token']){
202
	// Call Twitter API
203
	$twClient = new TwitterOAuth(TW_CONSUMER_KEY, TW_CONSUMER_SECRET, $_SESSION['twitter_access_token'] , $_SESSION['twitter_token_secret']);
204
 
205
	// Get OAuth token
206
	$tw_access_token = $twClient->getAccessToken($_REQUEST['oauth_verifier']);
207
 
208
	// If returns success
209
	if($twClient->http_code == '200'){
210
		// Storing access token data into session
211
		$_SESSION['status'] = 'verified';
212
		$_SESSION['request_vars'] = $tw_access_token;
213
 
214
		// Get user profile data from twitter
215
		$userInfo = $twClient->get('account/verify_credentials', ['include_email' => 'true']);
216
 
217
		// Initialize User class
218
		$user = new User();
219
 
220
		// Getting user profile info
221
        $name = explode(" ", $userInfo->name);
222
        $twUserData = array();
223
        $twUserData['oauth_uid']  = !empty($userInfo->id)?$userInfo->id:'';
224
        $twUserData['first_name'] = !empty($name[0])?$name[0]:'';
225
        $twUserData['last_name']  = !empty($name[1])?$name[1]:'';
226
        $twUserData['email'] 	  = !empty($userInfo->email)?$userInfo->email:'';
227
        $twUserData['picture'] 	  = !empty($userInfo->profile_image_url)?$userInfo->profile_image_url:'';
228
        $twUserData['link'] 	  = !empty($userInfo->screen_name)?'https://twitter.com/'.$userInfo->screen_name:'';
229
        $twUserData['username']   = !empty($userInfo->screen_name)?$userInfo->screen_name:'';
230
 
231
        // Insert or update user data to the database
232
        $twUserData['oauth_provider'] = 'twitter';
233
		$userData = $user->checkUser($twUserData);
234
 
235
		// Store login status into the session
236
        $sessData['userLoggedIn'] = TRUE;
237
        $sessData['userID'] = $userData['id'];
238
		$sessData['loginType'] = 'social';
239
        $_SESSION['sessData'] = $sessData;
240
 
241
		// Remove oauth token and secret from session
242
		unset($_SESSION['twitter_access_token']);
243
		unset($_SESSION['twitter_token_secret']);
244
 
245
		// Redirect to my account
246
        header("Location: account.php");
247
        exit();
248
	}
249
}else{
250
	// Fresh authentication
251
	$twClient = new TwitterOAuth(TW_CONSUMER_KEY, TW_CONSUMER_SECRET);
252
	$request_token = $twClient->getRequestToken(SOCIAL_REDIRECT_URL);
253
 
254
	// Get twitter oauth url
255
	$_SESSION['twitter_access_token'] = $request_token['oauth_token'];
256
	$_SESSION['twitter_token_secret'] = $request_token['oauth_token_secret'];
257
 
258
	// If authentication returns success
259
	if($twClient->http_code == '200'){
260
		$twLoginURL = $twClient->getAuthorizeURL($request_token['oauth_token']);
261
		$twLoginURL = filter_var($twLoginURL, FILTER_SANITIZE_URL);
262
	}
263
}
264
?>