예제 #1
0
 public static function create_gp_access_token($code = '')
 {
     if (!$code) {
         return false;
     }
     if (empty(self::$gp_client)) {
         self::init_gp();
     }
     self::$gp_client->authenticate($code);
     $access_token = self::$gp_client->getAccessToken();
     // Get current user with access token
     $plus = new \Google_Service_Plus(self::$gp_client);
     $me = $plus->people->get("me");
     try {
         DB::beginTransaction();
         // Create new user with email if not exist in db
         if (!empty($me['emails']) && !empty($me['emails'][0])) {
             $email = $me['emails'][0]->getValue();
             $user = User::where('email', '=', $email)->first();
             if (!$user) {
                 $password = str_random(8);
                 $user = new User();
                 $user->email = $email;
                 $user->name = $me['displayName'];
                 $user->password = $password;
                 $user->password_confirmation = $password;
                 $user->is_activated = true;
                 $user->username = $email;
             }
             $user->gp_uid = $me['id'];
             $user->save();
             UserAccessToken::sendEmailAfterRegister($user->name, $user->email);
             // Save user avatar
             if (!empty($me['image']) && !empty($me['image']['url'])) {
                 $image_url = $me['image']['url'];
                 $image_url = str_replace('?sz=50', '?sz=250', $image_url);
                 self::getUserAvatar($user->id, $image_url);
             }
             // Save to UserAccessToken table
             $record = self::whereRaw('user_id = ? AND type = ?', array($user->id, 'googleplus'))->first();
             if (!$record) {
                 $record = new self();
                 $record->user_id = $user->id;
             }
             $record->access_token = $access_token;
             $record->type = 'googleplus';
             $record->save();
             Auth::login($user);
         }
     } catch (Exception $ex) {
         DB::rollback();
     }
     DB::commit();
     return $access_token;
 }
예제 #2
0
 public function getCallbackFB()
 {
     $data = get();
     if (!empty($data['code'])) {
         $app_id = UserAccessToken::$app_id;
         $app_secret = UserAccessToken::$app_secret;
         $redirect_uri = OCT_ROOT . '/api/v1/callback_fb';
         try {
             $url = self::$graph . "oauth/access_token?code={$data['code']}&client_id={$app_id}&client_secret={$app_secret}&redirect_uri={$redirect_uri}";
             $data = @file_get_contents($url);
             parse_str($data);
             if ($access_token) {
                 $access_token = trim($access_token);
                 // Grant access_token
                 $url = self::$graph . "oauth/access_token?client_id={$app_id}&client_secret={$app_secret}&grant_type=fb_exchange_token&fb_exchange_token={$access_token}";
                 $data = @file_get_contents($url);
                 parse_str($data);
                 if (Auth::check()) {
                     $user = Auth::getUser();
                     $user_id = $user->id;
                     $user->save();
                     $obj = UserAccessToken::check_fb_access_token($access_token);
                     if ($obj->user_id) {
                         $user->fb_uid = $obj->user_id;
                         $fb_uid = $obj->user_id;
                         $user->save();
                         self::saveUserAccessToken($user_id, $access_token, 'facebook');
                     }
                 } else {
                     // Get current facebook user email
                     $obj = UserAccessToken::check_fb_access_token($access_token);
                     if ($obj) {
                         $fb_uid = $obj->user_id;
                         $fb_user = UserAccessToken::get_fb_user_infor($fb_uid, $access_token);
                         if (!empty($fb_user->email)) {
                             DB::beginTransaction();
                             try {
                                 // Check user exists in DB
                                 $user = User::where('email', '=', $fb_user->email)->first();
                                 if (!$user) {
                                     $password = str_random(8);
                                     $user = new User();
                                     $user->password = $password;
                                     $user->password_confirmation = $password;
                                     $user->is_activated = true;
                                     $user->email = $fb_user->email;
                                     $user->name = $fb_user->name;
                                     $user->username = $fb_user->email;
                                 }
                                 $user->fb_uid = $fb_user->id;
                                 $user->save();
                                 UserAccessToken::sendEmailAfterRegister($user->name, $user->email);
                                 self::saveUserAccessToken($user->id, $access_token, 'facebook');
                                 Auth::login($user);
                             } catch (Exception $e) {
                                 DB::rollback();
                                 throw $e;
                             }
                             DB::commit();
                         }
                     }
                 }
                 // Save user avatar
                 if ($fb_uid) {
                     $image_url = "http://graph.facebook.com/v2.2/{$fb_uid}/picture?type=large";
                     UserAccessToken::getUserAvatar($user->id, $image_url);
                 }
                 return Redirect::to(HelperClassified::redirect_return_url());
             }
         } catch (Exception $ex) {
             throw $ex;
             return Response::json(array('status' => 'error', 'message' => $ex->getMessage()), 500);
         }
     }
     return Response::json(array('status' => 'success'), 200);
 }