/** * Forwards the user to gnusocial to authenticate * * This includes the login URL as the callback */ function gnusocial_api_forward() { // sanity check if (!gnusocial_api_allow_sign_on_with_gnusocial()) { forward(); } $callback = elgg_normalize_url("gnusocial_api/login"); $request_link = gnusocial_api_get_authorize_url($callback); // capture metadata about login to persist through redirects $login_metadata = array('persistent' => (bool) get_input("persistent")); // capture referrer if in site, but not the gnusocial_api $session = elgg_get_session(); $server = _elgg_services()->request->server; $ref = $server->get('HTTP_REFERER', ''); if ($session->has('last_forward_from')) { $login_metadata['forward'] = $session->get('last_forward_from'); } elseif (0 === strpos($ref, elgg_get_site_url()) && 0 !== strpos($ref, elgg_get_site_url() . 'gnusocial_api/')) { $login_metadata['forward'] = $ref; } $session->set('gnusocial_api_login_metadata', $login_metadata); forward($request_link, 'gnusocial_api'); }
/** * User settings for GNUSocial API */ $user = elgg_get_logged_in_user_entity(); $user_guid = $user->getGUID(); $gnusocial_name = elgg_get_plugin_user_setting('gnusocial_name', $user_guid, 'gnusocial_api'); $access_key = elgg_get_plugin_user_setting('access_key', $user_guid, 'gnusocial_api'); $access_secret = elgg_get_plugin_user_setting('access_secret', $user_guid, 'gnusocial_api'); $site_key = elgg_get_plugin_setting('consumer_key', 'gnusocial_api'); $site_secret = elgg_get_plugin_setting('consumer_secret', 'gnusocial_api'); if (!($site_key && $site_secret)) { echo '<div>' . elgg_echo('gnusocial_api:usersettings:site_not_configured') . '</div>'; return true; } $site_name = elgg_get_site_entity()->name; echo '<div>' . elgg_echo('gnusocial_api:usersettings:description', array($site_name)) . '</div>'; if (!$access_key || !$access_secret) { // send user off to validate account $request_link = gnusocial_api_get_authorize_url(null, false); echo '<div>' . elgg_echo('gnusocial_api:usersettings:request', array($request_link, $site_name)) . '</div>'; } else { // if this user logged in through gnusocial and never set up an email address, don't // let them disassociate their account. if ($user->email) { $url = elgg_get_site_url() . "gnusocial_api/revoke"; echo '<div>' . elgg_echo('gnusocial_api:usersettings:authorized', array($site_name, $gnusocial_name)) . '</div>'; echo '<div>' . sprintf(elgg_echo('gnusocial_api:usersettings:revoke'), $url) . '</div>'; } else { echo elgg_echo('gnusocial_api:usersettings:cannot_revoke', array(elgg_normalize_url('gnusocial_api/interstitial'))); } }