summaryrefslogtreecommitdiff
path: root/plugins/OpenID
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/OpenID')
-rw-r--r--plugins/OpenID/OpenIDPlugin.php11
-rw-r--r--plugins/OpenID/User_openid.php5
-rw-r--r--plugins/OpenID/User_openid_trustroot.php5
-rw-r--r--plugins/OpenID/openid.php6
-rw-r--r--plugins/OpenID/openidsettings.php70
5 files changed, 91 insertions, 6 deletions
diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php
index 248afe3fa..6b35ec3e1 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -235,9 +235,14 @@ class OpenIDPlugin extends Plugin
switch ($name)
{
case 'register':
- $instr = '(Have an [OpenID](http://openid.net/)? ' .
- 'Try our [OpenID registration]'.
- '(%%action.openidlogin%%)!)';
+ if (common_logged_in()) {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ '[Add an OpenID to your account](%%action.openidsettings%%)!';
+ } else {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ 'Try our [OpenID registration]'.
+ '(%%action.openidlogin%%)!)';
+ }
break;
case 'login':
$instr = '(Have an [OpenID](http://openid.net/)? ' .
diff --git a/plugins/OpenID/User_openid.php b/plugins/OpenID/User_openid.php
index 5ef05b4c7..1beff9ea3 100644
--- a/plugins/OpenID/User_openid.php
+++ b/plugins/OpenID/User_openid.php
@@ -45,6 +45,11 @@ class User_openid extends Memcached_DataObject
*/
function keys()
{
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
return array('canonical' => 'K', 'display' => 'U', 'user_id' => 'U');
}
diff --git a/plugins/OpenID/User_openid_trustroot.php b/plugins/OpenID/User_openid_trustroot.php
index 0b411b8f7..17c03afb0 100644
--- a/plugins/OpenID/User_openid_trustroot.php
+++ b/plugins/OpenID/User_openid_trustroot.php
@@ -43,6 +43,11 @@ class User_openid_trustroot extends Memcached_DataObject
function keys()
{
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
return array('trustroot' => 'K', 'user_id' => 'K');
}
diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php
index 8f949c9c5..9e02c7a88 100644
--- a/plugins/OpenID/openid.php
+++ b/plugins/OpenID/openid.php
@@ -225,11 +225,11 @@ function oid_update_user(&$user, &$sreg)
$orig_profile = clone($profile);
- if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) {
+ if (!empty($sreg['fullname']) && strlen($sreg['fullname']) <= 255) {
$profile->fullname = $sreg['fullname'];
}
- if ($sreg['country']) {
+ if (!empty($sreg['country'])) {
if ($sreg['postcode']) {
# XXX: use postcode to get city and region
# XXX: also, store postcode somewhere -- it's valuable!
@@ -249,7 +249,7 @@ function oid_update_user(&$user, &$sreg)
$orig_user = clone($user);
- if ($sreg['email'] && Validate::email($sreg['email'], common_config('email', 'check_domain'))) {
+ if (!empty($sreg['email']) && Validate::email($sreg['email'], common_config('email', 'check_domain'))) {
$user->email = $sreg['email'];
}
diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php
index 3fc3d6128..16142cf48 100644
--- a/plugins/OpenID/openidsettings.php
+++ b/plugins/OpenID/openidsettings.php
@@ -176,6 +176,43 @@ class OpenidsettingsAction extends AccountSettingsAction
}
}
}
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_settings_openid_trustroots',
+ 'class' => 'form_settings',
+ 'action' =>
+ common_local_url('openidsettings')));
+ $this->elementStart('fieldset', array('id' => 'settings_openid_trustroots'));
+ $this->element('legend', null, _m('OpenID Trusted Sites'));
+ $this->hidden('token', common_session_token());
+ $this->element('p', 'form_guide',
+ _m('The following sites are allowed to access your ' .
+ 'identity and log you in. You can remove a site from ' .
+ 'this list to deny it access to your OpenID.'));
+ $this->elementStart('ul', 'form_data');
+ $user_openid_trustroot = new User_openid_trustroot();
+ $user_openid_trustroot->user_id=$user->id;
+ if($user_openid_trustroot->find()) {
+ while($user_openid_trustroot->fetch()) {
+ $this->elementStart('li');
+ $this->element('input', array('name' => 'openid_trustroot[]',
+ 'type' => 'checkbox',
+ 'class' => 'checkbox',
+ 'value' => $user_openid_trustroot->trustroot,
+ 'id' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot)));
+ $this->element('label', array('class'=>'checkbox', 'for' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot)),
+ $user_openid_trustroot->trustroot);
+ $this->elementEnd('li');
+ }
+ }
+ $this->elementEnd('ul');
+ $this->element('input', array('type' => 'submit',
+ 'id' => 'settings_openid_trustroots_action-submit',
+ 'name' => 'remove_trustroots',
+ 'class' => 'submit',
+ 'value' => _m('Remove')));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
}
/**
@@ -204,12 +241,45 @@ class OpenidsettingsAction extends AccountSettingsAction
}
} else if ($this->arg('remove')) {
$this->removeOpenid();
+ } else if($this->arg('remove_trustroots')) {
+ $this->removeTrustroots();
} else {
$this->showForm(_m('Something weird happened.'));
}
}
/**
+ * Handles a request to remove OpenID trustroots from the user's account
+ *
+ * Validates input and, if everything is OK, deletes the trustroots.
+ * Reloads the form with a success or error notification.
+ *
+ * @return void
+ */
+
+ function removeTrustroots()
+ {
+ $user = common_current_user();
+ $trustroots = $this->arg('openid_trustroot');
+ if($trustroots) {
+ foreach($trustroots as $trustroot) {
+ $user_openid_trustroot = User_openid_trustroot::pkeyGet(
+ array('user_id'=>$user->id, 'trustroot'=>$trustroot));
+ if($user_openid_trustroot) {
+ $user_openid_trustroot->delete();
+ } else {
+ $this->showForm(_m('No such OpenID trustroot.'));
+ return;
+ }
+ }
+ $this->showForm(_m('Trustroots removed'), true);
+ } else {
+ $this->showForm();
+ }
+ return;
+ }
+
+ /**
* Handles a request to remove an OpenID from the user's account
*
* Validates input and, if everything is OK, deletes the OpenID.