Ejemplo n.º 1
0
 /**
  * openid_auth
  * Authenticate user with OpenID
  *
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 private static function openid_auth($username, $password)
 {
     $results = array();
     // Username contains the openid url. We don't care about password here.
     $website = $username;
     if (strpos($website, 'http://') === 0 || strpos($website, 'https://') === 0) {
         $consumer = Openid::get_consumer();
         if ($consumer) {
             $auth_request = $consumer->begin($website);
             if ($auth_request) {
                 $sreg_request = Auth_OpenID_SRegRequest::build(array('nickname'), array('fullname', 'email'));
                 if ($sreg_request) {
                     $auth_request->addExtension($sreg_request);
                 }
                 $pape_request = new Auth_OpenID_PAPE_Request(Openid::get_policies());
                 if ($pape_request) {
                     $auth_request->addExtension($pape_request);
                 }
                 // Redirect the user to the OpenID server for authentication.
                 // Store the token for this authentication so we can verify the response.
                 // For OpenID 1, send a redirect.  For OpenID 2, use a Javascript
                 // form to send a POST request to the server.
                 if ($auth_request->shouldSendRedirect()) {
                     $redirect_url = $auth_request->redirectURL(AmpConfig::get('web_path'), Openid::get_return_url());
                     if (Auth_OpenID::isFailure($redirect_url)) {
                         $results['success'] = false;
                         $results['error'] = 'Could not redirect to server: ' . $redirect_url->message;
                     } else {
                         // Send redirect.
                         debug_event('auth', 'OpenID 1: redirecting to ' . $redirect_url, '5');
                         header("Location: " . $redirect_url);
                     }
                 } else {
                     // Generate form markup and render it.
                     $form_id = 'openid_message';
                     $form_html = $auth_request->htmlMarkup(AmpConfig::get('web_path'), Openid::get_return_url(), false, array('id' => $form_id));
                     if (Auth_OpenID::isFailure($form_html)) {
                         $results['success'] = false;
                         $results['error'] = 'Could not render authentication form.';
                     } else {
                         debug_event('auth', 'OpenID 2: javascript redirection code to OpenID form.', '5');
                         // First step is a success, UI interaction required.
                         $results['success'] = false;
                         $results['ui_required'] = $form_html;
                     }
                 }
             } else {
                 debug_event('auth', $website . ' is not a valid OpenID.', '3');
                 $results['success'] = false;
                 $results['error'] = 'Not a valid OpenID.';
             }
         } else {
             debug_event('auth', 'Cannot initialize OpenID resources.', '3');
             $results['success'] = false;
             $results['error'] = 'Cannot initialize OpenID resources.';
         }
     } else {
         debug_event('auth', 'Skipped OpenID authentication: missing scheme in ' . $website . '.', '3');
         $results['success'] = false;
         $results['error'] = 'Missing scheme in OpenID.';
     }
     return $results;
 }