Subversion Repositories cheapmusic

Rev

Rev 31 | Rev 43 | 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'])){
31 - 64
        MySessionHandler::commit(session_id());
25 - 65
		header('Location: ./');
66
		exit;
67
	}
68
 
69
	// Getting user facebook profile info
70
	try {
26 - 71
		$profileRequest = $fb->get('/me?fields=name,first_name,last_name,email,link,picture');
25 - 72
		$fbUserProfile = $profileRequest->getGraphNode()->asArray();
73
	} catch(FacebookResponseException $e) {
74
		echo 'Graph returned an error: ' . $e->getMessage();
75
		session_destroy();
76
		// Redirect user back to app login page
31 - 77
        MySessionHandler::commit(session_id());
25 - 78
		header("Location: ./");
79
		exit;
80
	} catch(FacebookSDKException $e) {
81
		echo 'Facebook SDK returned an error: ' . $e->getMessage();
82
		exit;
83
	}
84
 
85
	// Initialize User class
86
	$user = new User();
87
 
88
    // Getting user profile info
89
	$fbUserData = array();
90
	$fbUserData['oauth_uid']  = !empty($fbUserProfile['id'])?$fbUserProfile['id']:'';
91
	$fbUserData['first_name'] = !empty($fbUserProfile['first_name'])?$fbUserProfile['first_name']:'';
92
	$fbUserData['last_name']  = !empty($fbUserProfile['last_name'])?$fbUserProfile['last_name']:'';
93
	$fbUserData['email'] 	  = !empty($fbUserProfile['email'])?$fbUserProfile['email']:'';
94
	$fbUserData['picture'] 	  = !empty($fbUserProfile['picture']['url'])?$fbUserProfile['picture']['url']:'';
95
	$fbUserData['link'] 	  = !empty($fbUserProfile['link'])?$fbUserProfile['link']:'';
96
 
97
	// Insert or update user data to the database
98
    $fbUserData['oauth_provider'] = 'facebook';
99
	$userData = $user->checkUser($fbUserData);
100
 
101
	// Get logout url
102
	$logoutURL = $helper->getLogoutUrl($fbAccessToken, BASE_URL.'userAccount.php?logoutSubmit=1');
103
 
104
    // Store login status into the session
35 - 105
    $sessData['userLoggedIn'] = true;
25 - 106
    $sessData['userID'] = $userData['id'];
107
	$sessData['loginType'] = 'social';
108
    $_SESSION['sessData'] = $sessData;
109
 
110
    // Redirect to my account
31 - 111
    MySessionHandler::commit(session_id());
25 - 112
    header("Location: account.php");
113
	exit();
114
}else{
115
	// Get login url
116
	$fbLoginURL = $helper->getLoginUrl(SOCIAL_REDIRECT_URL, array('email'));
117
	$fbLoginURL = filter_var($fbLoginURL, FILTER_SANITIZE_URL);
118
}
119
 
120
 
121
/*
122
 * Google OAuth
123
 */
124
// Include Google client library
125
require_once 'social_oauth_lib/google-php-client/Google_Client.php';
126
require_once 'social_oauth_lib/google-php-client/contrib/Google_Oauth2Service.php';
127
 
128
// Call Google API
129
$gClient = new Google_Client();
130
$gClient->setApplicationName('Login to FindCheapMusic.com');
131
$gClient->setClientId(GP_CLIENT_ID);
132
$gClient->setClientSecret(GP_CLIENT_SECRET);
133
$gClient->setRedirectUri(SOCIAL_REDIRECT_URL);
134
 
135
$google_oauthV2 = new Google_Oauth2Service($gClient);
136
 
137
if(isset($_GET['code'])){
138
	$gClient->authenticate($_GET['code']);
139
	$_SESSION['google_access_token'] = $gClient->getAccessToken();
31 - 140
    MySessionHandler::commit(session_id());
25 - 141
	header('Location: ' . filter_var(BASE_URL, FILTER_SANITIZE_URL));
142
	exit;
143
}
144
 
145
if(isset($_SESSION['google_access_token'])){
146
	$gClient->setAccessToken($_SESSION['google_access_token']);
147
}
148
 
149
if($gClient->getAccessToken() && !isset($_GET['logoutSubmit'])){
150
	// Get user profile data from google
151
	$gpUserProfile = $google_oauthV2->userinfo->get();
152
 
153
	// Initialize User class
154
	$user = new User();
155
 
156
	// Getting user profile info
157
	$gpUserData = array();
158
	$gpUserData['oauth_uid']  = !empty($gpUserProfile['id'])?$gpUserProfile['id']:'';
159
	$gpUserData['first_name'] = !empty($gpUserProfile['given_name'])?$gpUserProfile['given_name']:'';
160
	$gpUserData['last_name']  = !empty($gpUserProfile['family_name'])?$gpUserProfile['family_name']:'';
161
	$gpUserData['email'] 	  = !empty($gpUserProfile['email'])?$gpUserProfile['email']:'';
162
	$gpUserData['picture'] 	  = !empty($gpUserProfile['picture'])?$gpUserProfile['picture']:'';
163
	$gpUserData['link'] 	  = !empty($gpUserProfile['link'])?$gpUserProfile['link']:'';
164
 
165
	// Insert or update user data to the database
166
    $gpUserData['oauth_provider'] = 'google';
167
    $userData = $user->checkUser($gpUserData);
168
 
169
	// Store login status into the session
35 - 170
    $sessData['userLoggedIn'] = true;
25 - 171
    $sessData['userID'] = $userData['id'];
172
	$sessData['loginType'] = 'social';
173
    $_SESSION['sessData'] = $sessData;
174
 
175
    // Redirect to my account
31 - 176
    MySessionHandler::commit(session_id());
25 - 177
    header("Location: account.php");
178
	exit();
179
}else{
180
	$gpLoginURL = $gClient->createAuthUrl();
181
	$gpLoginURL = filter_var($gpLoginURL, FILTER_SANITIZE_URL);
182
}
183
 
184
/*
185
 * Twitter OAuth
186
 */
187
// Include Twitter client library
188
require_once 'social_oauth_lib/twitter-php-oauth/twitteroauth.php';
189
 
190
// If OAuth token not matched
191
if(isset($_REQUEST['oauth_token']) && $_SESSION['twitter_access_token'] !== $_REQUEST['oauth_token']){
192
	// Remove token from session
193
	unset($_SESSION['twitter_access_token']);
194
	unset($_SESSION['twitter_token_secret']);
195
}
196
 
197
// If user already verified
198
if(isset($_SESSION['status']) && $_SESSION['status'] == 'verified' && !empty($_SESSION['request_vars'])){
199
	// Retrive variables from session
200
	$username 		  = $_SESSION['request_vars']['screen_name'];
201
	$twitterId		  = $_SESSION['request_vars']['user_id'];
202
	$oauthToken 	  = $_SESSION['request_vars']['oauth_token'];
203
	$oauthTokenSecret = $_SESSION['request_vars']['oauth_token_secret'];
204
	$profilePicture	  = $_SESSION['userData']['picture'];
205
 
206
}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['twitter_access_token'] == $_REQUEST['oauth_token']){
207
	// Call Twitter API
208
	$twClient = new TwitterOAuth(TW_CONSUMER_KEY, TW_CONSUMER_SECRET, $_SESSION['twitter_access_token'] , $_SESSION['twitter_token_secret']);
209
 
210
	// Get OAuth token
211
	$tw_access_token = $twClient->getAccessToken($_REQUEST['oauth_verifier']);
212
 
213
	// If returns success
214
	if($twClient->http_code == '200'){
215
		// Storing access token data into session
216
		$_SESSION['status'] = 'verified';
217
		$_SESSION['request_vars'] = $tw_access_token;
218
 
219
		// Get user profile data from twitter
220
		$userInfo = $twClient->get('account/verify_credentials', ['include_email' => 'true']);
221
 
222
		// Initialize User class
223
		$user = new User();
224
 
225
		// Getting user profile info
226
        $name = explode(" ", $userInfo->name);
227
        $twUserData = array();
228
        $twUserData['oauth_uid']  = !empty($userInfo->id)?$userInfo->id:'';
229
        $twUserData['first_name'] = !empty($name[0])?$name[0]:'';
230
        $twUserData['last_name']  = !empty($name[1])?$name[1]:'';
231
        $twUserData['email'] 	  = !empty($userInfo->email)?$userInfo->email:'';
232
        $twUserData['picture'] 	  = !empty($userInfo->profile_image_url)?$userInfo->profile_image_url:'';
233
        $twUserData['link'] 	  = !empty($userInfo->screen_name)?'https://twitter.com/'.$userInfo->screen_name:'';
234
        $twUserData['username']   = !empty($userInfo->screen_name)?$userInfo->screen_name:'';
235
 
236
        // Insert or update user data to the database
237
        $twUserData['oauth_provider'] = 'twitter';
238
		$userData = $user->checkUser($twUserData);
239
 
240
		// Store login status into the session
35 - 241
        $sessData['userLoggedIn'] = true;
25 - 242
        $sessData['userID'] = $userData['id'];
243
		$sessData['loginType'] = 'social';
244
        $_SESSION['sessData'] = $sessData;
245
 
246
		// Remove oauth token and secret from session
247
		unset($_SESSION['twitter_access_token']);
248
		unset($_SESSION['twitter_token_secret']);
249
 
250
		// Redirect to my account
31 - 251
        MySessionHandler::commit(session_id());
25 - 252
        header("Location: account.php");
253
        exit();
254
	}
255
}else{
256
	// Fresh authentication
257
	$twClient = new TwitterOAuth(TW_CONSUMER_KEY, TW_CONSUMER_SECRET);
258
	$request_token = $twClient->getRequestToken(SOCIAL_REDIRECT_URL);
259
 
260
	// Get twitter oauth url
261
	$_SESSION['twitter_access_token'] = $request_token['oauth_token'];
262
	$_SESSION['twitter_token_secret'] = $request_token['oauth_token_secret'];
263
 
264
	// If authentication returns success
265
	if($twClient->http_code == '200'){
266
		$twLoginURL = $twClient->getAuthorizeURL($request_token['oauth_token']);
267
		$twLoginURL = filter_var($twLoginURL, FILTER_SANITIZE_URL);
268
	}
269
}
270
?>