begin($openid_url); if (!$auth_request) { return FALSE; } $auth_request->addExtensionArg('sreg', 'required', 'fullname'); $auth_request->addExtensionArg('sreg', 'required', 'email'); $redirect_url = $auth_request->redirectURL($trust_root, $process_url); header('Status: 302 Found'); header("Location: ".$redirect_url); exit; } static function reauth_openid() { global $serendipity; if (isset($_SESSION['serendipityOpenID']) && $_SESSION['serendipityOpenID']) { $serendipity['serendipityRealname'] = $_SESSION['serendipityRealname']; $serendipity['serendipityUser'] = $_SESSION['serendipityUser']; $serendipity['serendipityPassword'] = $_SESSION['serendipityPassword']; $serendipity['serendipityEmail'] = $_SESSION['serendipityEmail']; $serendipity['authorid'] = $_SESSION['serendipityAuthorid']; $serendipity['serendipityUserlevel'] = $_SESSION['serendipityUserlevel']; $serendipity['serendipityAuthedUser'] = $_SESSION['serendipityAuthedUser']; $serendipity['serendipityRightPublish'] = $_SESSION['serendipityRightPublish']; serendipity_load_configuration($serendipity['authorid']); return true; } return false; } static function authenticate_openid($getData, $store_path, $returnData = false) { global $serendipity; $trust_root = $serendipity['baseURL'] . 'serendipity_admin.php'; $path_extra = dirname(__FILE__).DIRECTORY_SEPARATOR.'PHP-openid'; $path = ini_get('include_path'); $path = $path_extra . PATH_SEPARATOR . $path; ini_set('include_path', $path); require_once("Auth/OpenID/Consumer.php"); require_once("Auth/OpenID/FileStore.php"); require_once("Auth/OpenID/SReg.php"); require_once("Auth/OpenID/PAPE.php"); $store = new Auth_OpenID_FileStore($store_path); $consumer = new Auth_OpenID_Consumer($store); $response = $consumer->complete($trust_root); //, $getData); if ($response->status == Auth_OpenID_CANCEL) { $success = 'Verification cancelled.'; } else if ($response->status == Auth_OpenID_FAILURE) { $success = "OpenID authentication failed: " . $response->message; } else if ($response->status == Auth_OpenID_SUCCESS) { // This means the authentication succeeded; extract the // identity URL and Simple Registration data (if it was // returned). $openid = $response->getDisplayIdentifier(); $esc_identity = escape($openid); $success = sprintf('You have successfully verified ' . '%s as your identity.', $esc_identity, $esc_identity); if ($response->endpoint->canonicalID) { $escaped_canonicalID = escape($response->endpoint->canonicalID); $success .= ' (XRI CanonicalID: '.$escaped_canonicalID.') '; } $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response); $sreg = $sreg_resp->contents(); if (@$sreg['email']) { escape($sreg['email']); $success .= " You also returned '".escape($sreg['email']). "' as your email."; } if (@$sreg['nickname']) { $success .= " Your nickname is '".escape($sreg['nickname']). "'."; } if (@$sreg['fullname']) { $success .= " Your fullname is '".escape($sreg['fullname']). "'."; } } if (! empty($openid)) { if ($returnData) { return array('realname'=>$realname, 'email'=>$email, 'openID'=>$openid); } $password = md5($openid); $query = "SELECT DISTINCT a.email, a.authorid, a.userlevel, a.right_publish, a.realname FROM {$serendipity['dbPrefix']}authors AS a, {$serendipity['dbPrefix']}openid_authors AS oa WHERE oa.openid_url = '".serendipity_db_escape_string($openid)."' and oa.authorid = a.authorid"; $row = serendipity_db_query($query, true, 'assoc'); if (is_array($row)) { serendipity_setCookie('old_session', session_id()); serendipity_setAuthorToken(); $_SESSION['serendipityUser'] = $serendipity['serendipityUser'] = $row['realname']; $_SESSION['serendipityPassword'] = $serendipity['serendipityPassword'] = $password; $_SESSION['serendipityEmail'] = $serendipity['serendipityEmail'] = $email; $_SESSION['serendipityAuthorid'] = $serendipity['authorid'] = $row['authorid']; $_SESSION['serendipityUserlevel'] = $serendipity['serendipityUserlevel'] = $row['userlevel']; $_SESSION['serendipityAuthedUser'] = $serendipity['serendipityAuthedUser'] = true; $_SESSION['serendipityRightPublish']= $serendipity['serendipityRightPublish'] = $row['right_publish']; $_SESSION['serendipityRealname'] = $serendipity['serendipityRealname'] = $row['realname']; $_SESSION['serendipityOpenID'] = true; serendipity_load_configuration($serendipity['authorid']); return true; } else { $_SESSION['serendipityAuthedUser'] = false; @session_destroy(); } } return false; } static function getOpenID($userID, $checkExist=false) { global $serendipity; $q = "SELECT openid_url, authorid FROM {$serendipity['dbPrefix']}openid_authors WHERE authorid = " . (int)$userID; $author = serendipity_db_query($q, true); if (is_array($author)) { if ($checkExist) { return $author['authorid']; } elseif (! empty($author['openid_url'])) { return $author['openid_url']; } } return ''; } static function updateOpenID($openid_url, $authorID) { global $serendipity; if (!is_array(serendipity_db_query("SELECT username FROM {$serendipity['dbPrefix']}openid_authors LIMIT 1", true, 'both', false, false, false, true))) { serendipity_db_schema_import("CREATE TABLE {$serendipity['dbPrefix']}openid_authors ( openid_url varchar(255) default null, hash varchar(32) default null, authorid int(11) default '0' );"); } $hash = md5($openid_url); if (serendipity_common_openid::getOpenID($authorID, true)) { $retVal = serendipity_db_update('openid_authors', array('authorid'=>$authorID), array('openid_url'=> $openid_url, 'hash'=> $hash)); } else { $retVal = serendipity_db_insert('openid_authors', array('openid_url'=> $openid_url, 'hash'=> $hash, 'authorid'=>$authorID)); } return ($retVal===true)?true:false; } static function load_account_selectbox() { global $serendipity; $query = "SELECT DISTINCT a.realname, a.username, oa.openid_url FROM {$serendipity['dbPrefix']}authors AS a, {$serendipity['dbPrefix']}openid_authors AS oa WHERE oa.authorid = a.authorid"; $rows = serendipity_db_query($query); // Singnal no existing OpenID URL. if (!is_array($rows) || count($rows)==0) return false; $result = ' '; return $result; } static function loginform($url, $hidden = array(), $useAutorSelector = true) { global $serendipity; $imgopenid = $serendipity['baseURL'] . 'index.php?/plugin/openid.png'; // Check, if we have any user with OpenID configured $select = serendipity_common_openid::load_account_selectbox(); if ($select===false) { // No we don't. Say so $result = '
'; $result .= 'OpenID'; $result .= '

' . PLUGIN_OPENID_LOGIN_NOOPENID . '

'; return $result; } $imggoogle = $serendipity['baseURL'] . 'index.php?/plugin/oid_google.png'; $imgyahoo = $serendipity['baseURL'] . 'index.php?/plugin/oid_yahoo.png'; $imgaol = $serendipity['baseURL'] . 'index.php?/plugin/oid_aol.png'; $form = ''; // We need two forms in order to allow ENTER in the input line $form .= '
'; $form .=''; foreach($hidden AS $key => $val) { $form .= ''; } $form .= 'OpenID '; if ($useAutorSelector) { $form .= $select; $form .= ''; } if (!$useAutorSelector) { $form .= ''; $form .= ''; $form .= '
'; $form .= '
'; $form .=''; foreach($hidden AS $key => $val) { $form .= ''; } $form .= ' '; $form .= ' '; $form .= ' '; } $form .= '
'; return $form; } }