/**
  *	Authenticate a user based on Facebook access token. If the email address from facebook is already in the database, 
  *	the facebook user id will be added. 
  *	If not, a new user will be created with a random password and user info from facebook.
  */
 public function authenticateFacebook()
 {
     $input = Input::all();
     $validator = Validator::make($input, User::getAuthFBRules());
     if ($validator->passes()) {
         $facebook = new FacebookWrapper();
         $facebook->loginAsUser($input['access_token']);
         $profile = $facebook->getMe();
         if (is_array($profile) && isset($profile['error'])) {
             return json_encode($profile);
         }
         Log::info(json_encode($profile->asArray()));
         $user = User::where('facebook_id', '=', $profile->getId())->first();
         if (!$user instanceof User) {
             $user = User::where('email', '=', $profile->getProperty('email'))->first();
         }
         if (!$user instanceof User) {
             // Create an account if none is found
             $user = new User();
             $user->firstname = $profile->getFirstName();
             $user->lastname = $profile->getLastName();
             $user->email = $profile->getProperty('email');
             $user->password = Hash::make(uniqid());
         }
         $user->facebook_id = $profile->getId();
         $user->save();
         $device_id = Input::has('device_id') ? $input['device_id'] : '';
         $device_type = Input::has('device_type') ? $input['device_type'] : '';
         $device_token = Input::has('device_token') ? $input['device_token'] : '';
         $token = $user->login($device_id, $device_type, $device_token);
         Log::info('<!> Device Token Received : ' . $device_token . ' - Device ID Received : ' . $device_id . ' for user id: ' . $token->user_id);
         Log::info('<!> FACEBOOK Logged : ' . $token->user_id . ' on ' . $token->device_os . '[' . $token->device_id . '] with token ' . $token->token);
         $token = $token->toArray();
         $token['user'] = $user->toArray();
         Log::info(json_encode($token));
         return ApiResponse::json($token);
     } else {
         return ApiResponse::validation($validator);
     }
 }