Exemple #1
0
 /**
  * define:endpoint step 3.1 and 3.2
  */
 public static function processAuthDone()
 {
     Hybrid_Endpoint::authInit();
     $provider_id = trim(strip_tags(Hybrid_Endpoint::$request["hauth_done"]));
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         Hybrid_Logger::error("Endpoint: Invalide parameter on hauth_done!");
         $hauth->adapter->setUserUnconnected();
         header("HTTP/1.0 404 Not Found");
         die("Invalide parameter! Please return to the login page and try again.");
     }
     try {
         Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
         Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e);
         $hauth->adapter->setUserUnconnected();
     }
     Hybrid_Logger::info("Endpoint: job done. retrun to callback url.");
     $hauth->returnToCallbackUrl();
     die;
 }
Exemple #2
0
 /**
  * define:endpoint step 3.1 and 3.2
  */
 public static function processAuthDone()
 {
     Hybrid_Endpoint::authInit();
     // Fix a strange behavior when some provider call back ha endpoint
     // with /index.php?hauth.done={provider}?{args}...
     if (strrpos($_SERVER["QUERY_STRING"], '?')) {
         $_SERVER["QUERY_STRING"] = str_replace("?", "&", $_SERVER["QUERY_STRING"]);
         parse_str($_SERVER["QUERY_STRING"], Hybrid_Endpoint::$request);
     }
     $provider_id = trim(strip_tags(Hybrid_Endpoint::$request["hauth_done"]));
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         Hybrid_Logger::error("Endpoint: Invalide parameter on hauth_done!");
         $hauth->adapter->setUserUnconnected();
         header("HTTP/1.0 404 Not Found");
         die("Invalide parameter! Please return to the login page and try again.");
     }
     try {
         Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
         Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e);
         $hauth->adapter->setUserUnconnected();
     }
     Hybrid_Logger::info("Endpoint: job done. retrun to callback url.");
     $hauth->returnToCallbackUrl();
     die;
 }
Exemple #3
0
        // with /index.php?hauth.done={provider}?{args}...
        if (strrpos($_SERVER["QUERY_STRING"], '?')) {
            $_SERVER["QUERY_STRING"] = str_replace("?", "&", $_SERVER["QUERY_STRING"]);
            parse_str($_SERVER["QUERY_STRING"], $_REQUEST);
        }
        $provider_id = trim(strip_tags($_REQUEST["hauth_done"]));
        $hauth = Hybrid_Auth::setup($provider_id);
        if (!$hauth) {
            Hybrid_Logger::error("Endpoint: Invalide parameter on hauth_done!");
            $hauth->adapter->setUserUnconnected();
            header("HTTP/1.0 404 Not Found");
            die("Invalide parameter! Please return to the login page and try again.");
        }
        try {
            Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
            $hauth->adapter->loginFinish();
        } catch (Exception $e) {
            Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
            Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e);
            $hauth->adapter->setUserUnconnected();
        }
        Hybrid_Logger::info("Endpoint: job done. retrun to callback url.");
        $hauth->returnToCallbackUrl();
        die;
    }
} else {
    # Else,
    # We advertise our XRDS document, something supposed to be done from the Realm URL page
    echo str_replace("{X_XRDS_LOCATION}", Hybrid_Auth::getCurrentUrl(false) . "?get=openid_xrds&v=" . Hybrid_Auth::$version, file_get_contents(dirname(__FILE__) . "/Hybrid/resources/openid_realm.html"));
    die;
}
Exemple #4
0
 /**
  * Define: endpoint step 3.1 and 3.2
  * @return void
  * @throws Hybrid_Exception
  */
 protected function processAuthDone()
 {
     $this->authInit();
     $provider_id = trim(strip_tags($this->request["hauth_done"]));
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         Hybrid_Logger::error("Endpoint: Invalid parameter on hauth_done!");
         $hauth->adapter->setUserUnconnected();
         throw new Hybrid_Exception("Invalid parameter! Please return to the login page and try again.");
     }
     try {
         Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
         Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e->getPrevious());
         $hauth->adapter->setUserUnconnected();
     }
     Hybrid_Logger::info("Endpoint: job done. return to callback url.");
     $hauth->returnToCallbackUrl();
     die;
 }
 /**
  * define:endpoint step 3.1 and 3.2
  */
 protected function processAuthDone()
 {
     $provider_id = trim($this->getProperty('hauth_done'));
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         Hybrid_Logger::error("Endpoint: Invalid parameter on hauth_done!");
         $hauth->adapter->setUserUnconnected();
         header("HTTP/1.0 404 Not Found");
         return "Invalid parameter! Please return to the login page and try again.";
     }
     try {
         Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
         Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e);
         $hauth->adapter->setUserUnconnected();
     }
     Hybrid_Logger::info("Endpoint: job done. retrun to callback url.");
     // Save profile data in session
     $profile = $hauth->adapter->getUserProfile();
     // Try to get user by social profile
     /*$q = $this->modx->newQuery('modUser');
       $q->innerJoin('modUserProfile', 'Profile');
       $q->innerJoin('modHybridAuthUserProfile', 'SocialProfile');
       $q->innerJoin('modHybridAuthProvider', 'Provider', "Provider.id=SocialProfile.provider");
       $q->where(array(
           "SocialProfile.identifier"  => $profile->identifier,
           "Provider.name"     => $provider,
           "modUser.active"    => 1,
           "Profile.blocked"   => 0,
       ));
       $q->limit(1);
       
       if($user = $this->modx->getObject('modUser', $q)){
           $user->addSessionContext($this->modx->context->key);
           $redirectTo = $this->modx->getOption('site_url');
           $this->modx->sendRedirect($redirectTo);
           return;
       }*/
     // else
     $_SESSION['social_profile'] = array('provider' => $provider_id, 'profile' => $this->modx->error->toArray($profile));
     //$q->prepare();
     //$this->modx->log(1, $q->toSQL());
     // else
     $hauth->returnToCallbackUrl();
     return '';
 }
 /**
  * define:endpoint step 3.1 and 3.2
  */
 public static function processAuthDone()
 {
     Hybrid_Endpoint::authInit();
     $provider_id = trim(strip_tags(Hybrid_Endpoint::$request["hauth_done"]));
     # check if page accessed directly
     if (!Hybrid_Auth::storage()->get("hauth_session.{$provider_id}.hauth_endpoint")) {
         throw new Hybrid_Exception("You cannot access this page directly.");
     }
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         $hauth->adapter->setUserUnconnected();
         throw new Hybrid_Exception("Invalid parameter! Please return to the login page and try again.");
     }
     try {
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Error::setError($e->getMessage(), $e->getCode());
         $hauth->adapter->setUserUnconnected();
     }
     $hauth->returnToCallbackUrl();
     die;
 }
 /**
  * define:endpoint step 3.1 and 3.2
  */
 protected function processAuthDone()
 {
     $provider_id = trim($this->getProperty('hauth_done'));
     $hauth = Hybrid_Auth::setup($provider_id);
     if (!$hauth) {
         Hybrid_Logger::error("Endpoint: Invalid parameter on hauth_done!");
         $hauth->adapter->setUserUnconnected();
         header("HTTP/1.0 404 Not Found");
         return "Invalid parameter! Please return to the login page and try again.";
     }
     try {
         Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() ");
         $hauth->adapter->loginFinish();
     } catch (Exception $e) {
         Hybrid_Logger::error("Exception:" . $e->getMessage(), $e);
         Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e);
         $hauth->adapter->setUserUnconnected();
     }
     Hybrid_Logger::info("Endpoint: job done. retrun to callback url.");
     // Save profile data in session
     $profile = $hauth->adapter->getUserProfile();
     // else
     $_SESSION['social_profile'] = array('provider' => $provider_id, 'profile' => $this->modx->error->toArray($profile));
     //$q->prepare();
     //$this->modx->log(1, $q->toSQL());
     // else
     $hauth->returnToCallbackUrl();
     return '';
 }
Exemple #8
0
 /**
  * Аутентификация HybridAuth
  * @param string $provider
  * @return bool
  */
 protected function hybridauth_authenticate($provider)
 {
     global $hybridauth;
     try {
         $params = array();
         if ($provider == 'OpenID') {
             $openid_identifier = get('openid_identifier', '', 'g');
             if ($openid_identifier) {
                 $params['openid_identifier'] = $openid_identifier;
             }
         }
         $adapter = $hybridauth->authenticate($provider, $params);
         $user_profile = $adapter->getUserProfile();
         if (!$user_profile) {
             Hybrid_Error::setError("Error getUserProfile, provider=" . $provider . ". Line=" . __LINE__);
             $this->setError("error_get_profile");
             return false;
         }
         if ($this->_user) {
             // Есть текущий залогиненный пользователь, надо привязать к нему
             // Если не привязано уже к другому пользователю
             $link_user_id = (int) sql_getValue("SELECT user_id FROM {$this->_table_socials} WHERE provider='{$provider}' AND identifier='{$user_profile->identifier}'");
             if ($link_user_id && $link_user_id != $this->_user->getId()) {
                 $adapter->logout();
                 Hybrid_Error::setError("Provider={$provider}, identifier={$user_profile->identifier}: already linked to another user={$link_user_id}" . ". Line=" . __LINE__);
                 $this->setError("link_provider_error");
                 return false;
             }
             $name = '';
             if ($user_profile->firstName) {
                 $name = $user_profile->firstName;
                 if ($user_profile->lastName) {
                     $name .= ' ' . $user_profile->lastName;
                 }
             } else {
                 if ($user_profile->displayName) {
                     $name = $user_profile->displayName;
                 }
             }
             if (!$name) {
                 $name = $user_profile->identifier;
             }
             if ($name) {
                 $win1251 = iconv('utf-8', 'windows-1251', $name);
                 if ($win1251) {
                     $name = $win1251;
                 }
             }
             $this->_user->createSocialLink(array('provider' => $provider, 'identifier' => $user_profile->identifier, 'profileURL' => $user_profile->profileURL, 'photoURL' => $user_profile->photoURL, 'name' => $name));
         } else {
             // Никто не залогинен
             $user_id = sql_getValue("SELECT user_id FROM {$this->_table_socials} WHERE provider='{$provider}' AND identifier='{$user_profile->identifier}'");
             if (!$user_id) {
                 $user_id = $this->createUserByProvider($provider, $user_profile);
                 if ($user_id === false) {
                     Hybrid_Error::setError("Error create user in table {$this->_table}" . ". Line=" . __LINE__);
                     return false;
                 }
             }
             // авторизовать на сайте
             $this->login($user_id);
         }
         return true;
     } catch (Exception $e) {
         Hybrid_Error::setError($e->getMessage() . ". Line=" . __LINE__);
         $this->setError($e->getMessage());
         return false;
     }
 }