From 0b8b67d74a51586c5a45012e9e0f7bbe54f7e954 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Wed, 17 Oct 2012 02:38:11 +0000 Subject: Elgg OpenID server adapted for Elgg 1.8. --- actions/admin.php | 90 ++++++++++++++++++++++++++++++++++++++++++ actions/autologin.php | 52 +++++++++++++++++++++++++ actions/autologout.php | 48 +++++++++++++++++++++++ actions/trust.php | 103 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 293 insertions(+) create mode 100755 actions/admin.php create mode 100755 actions/autologin.php create mode 100755 actions/autologout.php create mode 100755 actions/trust.php (limited to 'actions') diff --git a/actions/admin.php b/actions/admin.php new file mode 100755 index 000000000..a2dbb7af3 --- /dev/null +++ b/actions/admin.php @@ -0,0 +1,90 @@ + + * @copyright Curverider Ltd 2008-2009 + * @link http://elgg.com/ + * + * @uses the following values in $vars: + * + * 'trust' the trust object with the database information and action type + */ + +require_once('../openid_server_include.php'); + +if (isadminloggedin()) { + $action = trim(get_input('action')); + $trust_id = get_input('trust_id'); + $show_full_form = true; + $body = ''; + if ($action) { + $trust = new StdClass; + $trust->trust_root = get_input('trust_root'); + $trust->site_name = get_input('site_name'); + $trust->auto_login = get_input('auto_login'); + $trust->auto_logout = get_input('auto_logout'); + $trust->width = get_input('width'); + $trust->height = get_input('height'); + + switch($action) { + case 'change': + $trust->ident = $trust_id; + $store->update_default_trust_root($trust_id,$trust); + system_message(elgg_echo('openid_server:trust_root_updated')); + break; + case 'add': + $store->insert_default_trust_root($trust); + system_message(elgg_echo('openid_server:trust_root_added')); + break; + case 'delete': + $store->delete_default_trust_root($trust_id); + system_message(elgg_echo('openid_server:trust_root_deleted')); + break; + } + } else { + if ($trust_id) { + $trust = $store->get_trust_root($trust_id); + $trust->action = 'change'; + $body = generate_trust_form($trust); + $title = elgg_echo('openid_server:edit_trust_root_title'); + $show_full_form = false; + } + } + + if ($show_full_form) { + + // KJ - TODO: Move this into a separate form view + $edit_url = $CFG->wwwroot.'mod/openid_server/admin.php?trust_id='; + $delete_url = $CFG->wwwroot.'mod/openid_server/admin.php?action=delete&trust_id='; + $title = elgg_echo('openid_server:manage_trust_root_title'); + $results = $store->get_all_default_trust_roots(); + if ($results) { + $body .= '

'.elgg_echo('openid_server:trust_root_title').'

'."\n"; + $body.= ''."\n"; + foreach($results as $item) { + $body .= ''."\n"; + } + } + $body .= "
'.$item->site_name.''.$item->trust_root.''.elgg_echo('openid_server:edit_option').''.elgg_echo('openid_server:delete_option').'
\n"; + $body .= '

'.elgg_echo('openid_server:add_trust_root_title').'

'; + $trust = new StdClass; + $trust->trust_root = ''; + $trust->site_name = ''; + $trust->auto_login = ''; + $trust->auto_logout = ''; + $trust->width = 0; + $trust->height = 0; + $trust->action = 'add'; + $body .= generate_trust_form($trust); + } +} + +page_draw($title,$body); + +?> diff --git a/actions/autologin.php b/actions/autologin.php new file mode 100755 index 000000000..4a200fcfb --- /dev/null +++ b/actions/autologin.php @@ -0,0 +1,52 @@ + + * @copyright Curverider Ltd 2008-2009 + * @link http://elgg.org/ + */ + +require_once(dirname(dirname(__FILE__)).'/openid_server_include.php'); + +require_once ('lib/common.php'); +require_once ('lib/session.php'); + +$iframe_template = << +'); +END; + +$openid_url = getLoggedinUser(); +$store = getOpenIDServerStore(); +$sites = $store->getAutoLoginSites(); +$request = getRequestInfo(); +if ($request) { + $return_url = $request->return_to; + setRequestInfo(null); +} else { + $return_url = $CONFIG->wwwroot; +} +// TODO: get this to work with posts +$iframes = ''; +foreach ($sites as $site) { + $iframes .= sprintf($iframe_template,$site->width,$site->height,sprintf($site->auto_login,$openid_url)); +} +$body = elgg_view("openid_server/forms/autologin", + array( + 'iframes' => $iframes, + 'return_to' => $return_url, + + )); +$CONFIG->events['login'] = array(); +login(); +header("Content-type:text/html"); +print $body; +?> diff --git a/actions/autologout.php b/actions/autologout.php new file mode 100755 index 000000000..36a7191c2 --- /dev/null +++ b/actions/autologout.php @@ -0,0 +1,48 @@ + + * @copyright Curverider Ltd 2008-2009 + * @link http://elgg.org/ + */ + +require_once(dirname(dirname(__FILE__)).'/openid_server_include.php'); + +require_once ('lib/common.php'); +require_once ('lib/session.php'); + +$iframe_template = << +'); +END; + +$store = getOpenIDServerStore(); + +$openid_url = getLoggedinUser(); +$sites = $store->getAutoLogoutSites(); + +// TODO: get this to work with posts +$iframes = ''; +foreach ($sites as $site) { + $iframes .= sprintf($iframe_template,$site->width,$site->height,sprintf($site->auto_logout,$openid_url)); +} +$body = elgg_view("openid_server/forms/autologout", + array( + 'iframes' => $iframes, + + )); + +$CONFIG->events['logout'] = array(); + +logout(); +header("Content-type:text/html"); +print $body; +?> diff --git a/actions/trust.php b/actions/trust.php new file mode 100755 index 000000000..10b83127d --- /dev/null +++ b/actions/trust.php @@ -0,0 +1,103 @@ + + * @copyright Curverider Ltd 2008-2009 + * @link http://elgg.org/ + */ + +error_log("in trust.php"); + +require_once(dirname(dirname(__FILE__)).'/openid_server_include.php'); + +require_once ('lib/common.php'); +require_once ('lib/session.php'); + +$info = getRequestInfo(); +$trusted = get_input('trust'); +$remember = get_input('remember'); +$trust_root = get_input('trust_root'); +error_log("in trust.php, getting store".$info->trust_root); +$store = getOpenIDServerStore(); +if ($remember) { + $store->setTrustedSite($info); + //$store->setTrustedSite($info->trust_root); +} + +if (!$info) { + // There is no authentication information, so bail + error_log("in trust.php, no info"); + system_message(elgg_echo("openid_server:cancelled")); + forward(); +} else { + + if ($idpSelect = $info->idSelect()) { + if ($idpSelect) { + $req_url = idURL($idpSelect); + //XXX fixing dirty https stuff + //$req_url = str_replace('http', 'https', $req_url); + } else { + $trusted = false; + } + } else { + $req_url = normaliseUsername($info->identity); + //XXX fixing dirty https stuff + //$req_url = str_replace('http', 'https', $req_url); + } + + error_log("in trust.php, getLoggedInUser"); + + $user = getLoggedInUser(); + error_log("in trust.php, setRequestInfo"); + setRequestInfo($info); + $user = str_replace('https', 'http', $user); + $req_url_path = substr($req_url, strpos($req_url, ":")); + $user_path = substr($user, strpos($user, ":")); + if ($req_url_path != $user_path) { + register_error(sprintf(elgg_echo("openid_server:loggedin_as_wrong_user"),$req_url, $user)); + forward(); + } else { + + $trust_root = $info->trust_root; + //XXX fixing dirty https stuff + error_log("in trust.php, trust_root = $trust_root"); + + $trusted = isset($trusted) ? $trusted : isTrusted($req_url,$trust_root); + if ($trusted) { + setRequestInfo(); + $server =& getServer(); + $response =& $info->answer(true, null, $req_url); + + error_log("in trust.php, addSregFields"); + + //XXX this call gives fatal error: call to a member function isOpenID1() + //on a non-object (OpenID/Extension.php + addSregFields($response, $info, $req_url); +// error_log("in trust.php, response = " . print_r($response)); + error_log("in trust.php, encodeResponse"); + //XXX falla encoding de esta respuesta + $webresponse =& $server->encodeResponse($response); + + error_log('in trust.php, webresponse ='.print_r($webresponse,true)); + + $new_headers = array(); + + foreach ($webresponse->headers as $k => $v) { + $new_headers[] = $k.": ".$v; + } + + writeResponse( array($new_headers, $webresponse->body)); + } elseif ($fail_cancels) { + setRequestInfo(); + forward($info->getCancelURL()); + } else { + writeResponse(trust_render($info)); + } + } +} + +?> -- cgit v1.2.3