X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOpenID%2Fopenid.php;h=49dd53c8781e0b50080737827103fe02f72ab7e7;hb=24ecb42f0e8c87ff30c2518db1ed8f3dd0ece20c;hp=68b5c29e2461386b42f14e4940f47ca714abfadb;hpb=7ec5e7cd7668c2d34f8cb8e7c22faecc13bc0a13;p=quix0rs-gnu-social.git
diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php
index 68b5c29e24..49dd53c878 100644
--- a/plugins/OpenID/openid.php
+++ b/plugins/OpenID/openid.php
@@ -17,9 +17,9 @@
* along with this program. If not, see .
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once(INSTALLDIR.'/plugins/OpenID/User_openid.php');
+if (!defined('STATUSNET')) {
+ exit(1);
+}
require_once('Auth/OpenID.php');
require_once('Auth/OpenID/Consumer.php');
@@ -27,7 +27,7 @@ require_once('Auth/OpenID/Server.php');
require_once('Auth/OpenID/SReg.php');
require_once('Auth/OpenID/MySQLStore.php');
-# About one year cookie expiry
+// About one year cookie expiry
define('OPENID_COOKIE_EXPIRY', round(365.25 * 24 * 60 * 60));
define('OPENID_COOKIE_KEY', 'lastusedopenid');
@@ -36,7 +36,7 @@ function oid_store()
{
static $store = null;
if (!$store) {
- # Can't be called statically
+ // Can't be called statically
$user = new User();
$conn = $user->getDatabaseConnection();
$store = new Auth_OpenID_MySQLStore($conn);
@@ -85,7 +85,6 @@ function oid_get_last()
function oid_link_user($id, $canonical, $display)
{
-
$oid = new User_openid();
$oid->user_id = $id;
$oid->canonical = $canonical;
@@ -145,12 +144,14 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
// Handle failure status return values.
if (!$auth_request) {
+ common_log(LOG_ERR, __METHOD__ . ": mystery fail contacting $openid_url");
// TRANS: OpenID plugin message. Given when an OpenID is not valid.
return _m('Not a valid OpenID.');
} else if (Auth_OpenID::isFailure($auth_request)) {
+ common_log(LOG_ERR, __METHOD__ . ": OpenID fail to $openid_url: $auth_request->message");
// TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
// TRANS: %s is the failure message.
- return sprintf(_m('OpenID failure: %s'), $auth_request->message);
+ return sprintf(_m('OpenID failure: %s.'), $auth_request->message);
}
$sreg_request = Auth_OpenID_SRegRequest::build(// Required
@@ -168,10 +169,31 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
$auth_request->addExtension($sreg_request);
}
+ $requiredTeam = common_config('openid', 'required_team');
+ if ($requiredTeam) {
+ // LaunchPad OpenID extension
+ $team_request = new Auth_OpenID_TeamsRequest(array($requiredTeam));
+ if ($team_request) {
+ $auth_request->addExtension($team_request);
+ }
+ }
+
$trust_root = common_root_url(true);
$process_url = common_local_url($returnto);
- if ($auth_request->shouldSendRedirect()) {
+ // Net::OpenID::Server as used on LiveJournal appears to incorrectly
+ // reject POST requests for data submissions that OpenID 1.1 specs
+ // as GET, although 2.0 allows them:
+ // https://rt.cpan.org/Public/Bug/Display.html?id=42202
+ //
+ // Our OpenID libraries would have switched in the redirect automatically
+ // if it were detecting 1.1 compatibility mode, however the server is
+ // advertising itself as 2.0-compatible, so we got switched to the POST.
+ //
+ // Since the GET should always work anyway, we'll just take out the
+ // autosubmitter for now.
+ //
+ //if ($auth_request->shouldSendRedirect()) {
$redirect_url = $auth_request->redirectURL($trust_root,
$process_url,
$immediate);
@@ -179,18 +201,19 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
} else if (Auth_OpenID::isFailure($redirect_url)) {
// TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
// TRANS: %s is the failure message.
- return sprintf(_m('Could not redirect to server: %s'), $redirect_url->message);
+ return sprintf(_m('Could not redirect to server: %s.'), $redirect_url->message);
} else {
common_redirect($redirect_url, 303);
}
+ /*
} else {
// Generate form markup and render it.
$form_id = 'openid_message';
$form_html = $auth_request->formMarkup($trust_root, $process_url,
$immediate, array('id' => $form_id));
- # XXX: This is cheap, but things choke if we don't escape ampersands
- # in the HTML attributes
+ // XXX: This is cheap, but things choke if we don't escape ampersands
+ // in the HTML attributes
$form_html = preg_replace('/&/', '&', $form_html);
@@ -208,9 +231,10 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
$action->handle(array('action' => 'autosubmit'));
}
}
+ */
}
-# Half-assed attempt at a module-private function
+// Half-assed attempt at a module-private function
function _oid_print_instructions()
{
@@ -221,11 +245,14 @@ function _oid_print_instructions()
'OpenID provider.'));
}
-# update a user from sreg parameters
-
-function oid_update_user(&$user, &$sreg)
+/**
+ * Update a user from sreg parameters
+ * @param User $user
+ * @param array $sreg fields from OpenID sreg response
+ * @access private
+ */
+function oid_update_user($user, $sreg)
{
-
$profile = $user->getProfile();
$orig_profile = clone($profile);
@@ -236,16 +263,16 @@ function oid_update_user(&$user, &$sreg)
if (!empty($sreg['country'])) {
if ($sreg['postcode']) {
- # XXX: use postcode to get city and region
- # XXX: also, store postcode somewhere -- it's valuable!
+ // XXX: use postcode to get city and region
+ // XXX: also, store postcode somewhere -- it's valuable!
$profile->location = $sreg['postcode'] . ', ' . $sreg['country'];
} else {
$profile->location = $sreg['country'];
}
}
- # XXX save language if it's passed
- # XXX save timezone if it's passed
+ // XXX save language if it's passed
+ // XXX save timezone if it's passed
if (!$profile->update($orig_profile)) {
// TRANS: OpenID plugin server error.
@@ -291,13 +318,40 @@ function oid_assert_allowed($url)
}
}
// TRANS: OpenID plugin client exception (403).
- throw new ClientException(_m("Unauthorized URL used for OpenID login."), 403);
+ throw new ClientException(_m('Unauthorized URL used for OpenID login.'), 403);
}
}
return;
}
+/**
+ * Check the teams available in the given OpenID response
+ * Using Launchpad's OpenID teams extension
+ *
+ * @return boolean whether this user is acceptable
+ */
+function oid_check_teams($response)
+{
+ $requiredTeam = common_config('openid', 'required_team');
+ if ($requiredTeam) {
+ $team_resp = new Auth_OpenID_TeamsResponse($response);
+ if ($team_resp) {
+ $teams = $team_resp->getTeams();
+ } else {
+ $teams = array();
+ }
+
+ $match = in_array($requiredTeam, $teams);
+ $is = $match ? 'is' : 'is not';
+ common_log(LOG_DEBUG, "Remote user $is in required team $requiredTeam: [" . implode(', ', $teams) . "]");
+
+ return $match;
+ }
+
+ return true;
+}
+
class AutosubmitAction extends Action
{
var $form_html = null;
@@ -318,7 +372,7 @@ class AutosubmitAction extends Action
function showContent()
{
$this->raw('
');
- // @fixme this would be better using standard CSS class, but the present theme's a bit scary.
+ // @todo FIXME: This would be better using standard CSS class, but the present theme's a bit scary.
$this->element('img', array('src' => Theme::path('images/icons/icon_processing.gif', 'base'),
// for some reason the base CSS sets
s as block display?!
'style' => 'display: inline'));