From db9faf025cf129d15a086a803e8056e977975d76 Mon Sep 17 00:00:00 2001 From: Patrick Brown Date: Wed, 6 May 2015 01:30:59 -0400 Subject: Report more meaningful errors when an auth backend fails. closes #1093 --- inc/auth.php | 25 ++++++++++--------- inc/lang/en/lang.php | 2 ++ lib/plugins/authplain/auth.php | 33 +++++++++++++++---------- lib/plugins/authplain/lang/af/lang.php | 6 +++++ lib/plugins/authplain/lang/ar/lang.php | 6 +++++ lib/plugins/authplain/lang/az/lang.php | 6 +++++ lib/plugins/authplain/lang/bg/lang.php | 6 +++++ lib/plugins/authplain/lang/bn/lang.php | 6 +++++ lib/plugins/authplain/lang/ca-valencia/lang.php | 6 +++++ lib/plugins/authplain/lang/ca/lang.php | 6 +++++ lib/plugins/authplain/lang/cs/lang.php | 6 +++++ lib/plugins/authplain/lang/da/lang.php | 6 +++++ lib/plugins/authplain/lang/de-informal/lang.php | 6 +++++ lib/plugins/authplain/lang/de/lang.php | 6 +++++ lib/plugins/authplain/lang/el/lang.php | 6 +++++ lib/plugins/authplain/lang/en/lang.php | 8 ++++++ lib/plugins/authplain/lang/eo/lang.php | 6 +++++ lib/plugins/authplain/lang/es/lang.php | 6 +++++ lib/plugins/authplain/lang/et/lang.php | 6 +++++ lib/plugins/authplain/lang/eu/lang.php | 6 +++++ lib/plugins/authplain/lang/fa/lang.php | 6 +++++ lib/plugins/authplain/lang/fi/lang.php | 6 +++++ lib/plugins/authplain/lang/fo/lang.php | 6 +++++ lib/plugins/authplain/lang/fr/lang.php | 6 +++++ lib/plugins/authplain/lang/gl/lang.php | 6 +++++ lib/plugins/authplain/lang/he/lang.php | 6 +++++ lib/plugins/authplain/lang/hr/lang.php | 6 +++++ lib/plugins/authplain/lang/hu/lang.php | 6 +++++ lib/plugins/authplain/lang/ia/lang.php | 6 +++++ lib/plugins/authplain/lang/id-ni/lang.php | 6 +++++ lib/plugins/authplain/lang/id/lang.php | 6 +++++ lib/plugins/authplain/lang/is/lang.php | 6 +++++ lib/plugins/authplain/lang/it/lang.php | 6 +++++ lib/plugins/authplain/lang/ja/lang.php | 6 +++++ lib/plugins/authplain/lang/ka/lang.php | 6 +++++ lib/plugins/authplain/lang/kk/lang.php | 6 +++++ lib/plugins/authplain/lang/km/lang.php | 6 +++++ lib/plugins/authplain/lang/ko/lang.php | 6 +++++ lib/plugins/authplain/lang/ku/lang.php | 6 +++++ lib/plugins/authplain/lang/la/lang.php | 6 +++++ lib/plugins/authplain/lang/lb/lang.php | 6 +++++ lib/plugins/authplain/lang/lt/lang.php | 6 +++++ lib/plugins/authplain/lang/lv/lang.php | 6 +++++ lib/plugins/authplain/lang/mg/lang.php | 6 +++++ lib/plugins/authplain/lang/mk/lang.php | 6 +++++ lib/plugins/authplain/lang/mr/lang.php | 6 +++++ lib/plugins/authplain/lang/ms/lang.php | 6 +++++ lib/plugins/authplain/lang/ne/lang.php | 6 +++++ lib/plugins/authplain/lang/nl/lang.php | 6 +++++ lib/plugins/authplain/lang/no/lang.php | 6 +++++ lib/plugins/authplain/lang/pl/lang.php | 6 +++++ lib/plugins/authplain/lang/pt-br/lang.php | 6 +++++ lib/plugins/authplain/lang/pt/lang.php | 6 +++++ lib/plugins/authplain/lang/ro/lang.php | 6 +++++ lib/plugins/authplain/lang/ru/lang.php | 6 +++++ lib/plugins/authplain/lang/sk/lang.php | 6 +++++ lib/plugins/authplain/lang/sl/lang.php | 6 +++++ lib/plugins/authplain/lang/sq/lang.php | 6 +++++ lib/plugins/authplain/lang/sr/lang.php | 6 +++++ lib/plugins/authplain/lang/sv/lang.php | 6 +++++ lib/plugins/authplain/lang/th/lang.php | 6 +++++ lib/plugins/authplain/lang/tr/lang.php | 6 +++++ lib/plugins/authplain/lang/uk/lang.php | 6 +++++ lib/plugins/authplain/lang/vi/lang.php | 6 +++++ lib/plugins/authplain/lang/zh-tw/lang.php | 6 +++++ lib/plugins/authplain/lang/zh/lang.php | 6 +++++ 66 files changed, 415 insertions(+), 25 deletions(-) create mode 100644 lib/plugins/authplain/lang/af/lang.php create mode 100644 lib/plugins/authplain/lang/ar/lang.php create mode 100644 lib/plugins/authplain/lang/az/lang.php create mode 100644 lib/plugins/authplain/lang/bg/lang.php create mode 100644 lib/plugins/authplain/lang/bn/lang.php create mode 100644 lib/plugins/authplain/lang/ca-valencia/lang.php create mode 100644 lib/plugins/authplain/lang/ca/lang.php create mode 100644 lib/plugins/authplain/lang/cs/lang.php create mode 100644 lib/plugins/authplain/lang/da/lang.php create mode 100644 lib/plugins/authplain/lang/de-informal/lang.php create mode 100644 lib/plugins/authplain/lang/de/lang.php create mode 100644 lib/plugins/authplain/lang/el/lang.php create mode 100644 lib/plugins/authplain/lang/en/lang.php create mode 100644 lib/plugins/authplain/lang/eo/lang.php create mode 100644 lib/plugins/authplain/lang/es/lang.php create mode 100644 lib/plugins/authplain/lang/et/lang.php create mode 100644 lib/plugins/authplain/lang/eu/lang.php create mode 100644 lib/plugins/authplain/lang/fa/lang.php create mode 100644 lib/plugins/authplain/lang/fi/lang.php create mode 100644 lib/plugins/authplain/lang/fo/lang.php create mode 100644 lib/plugins/authplain/lang/fr/lang.php create mode 100644 lib/plugins/authplain/lang/gl/lang.php create mode 100644 lib/plugins/authplain/lang/he/lang.php create mode 100644 lib/plugins/authplain/lang/hr/lang.php create mode 100644 lib/plugins/authplain/lang/hu/lang.php create mode 100644 lib/plugins/authplain/lang/ia/lang.php create mode 100644 lib/plugins/authplain/lang/id-ni/lang.php create mode 100644 lib/plugins/authplain/lang/id/lang.php create mode 100644 lib/plugins/authplain/lang/is/lang.php create mode 100644 lib/plugins/authplain/lang/it/lang.php create mode 100644 lib/plugins/authplain/lang/ja/lang.php create mode 100644 lib/plugins/authplain/lang/ka/lang.php create mode 100644 lib/plugins/authplain/lang/kk/lang.php create mode 100644 lib/plugins/authplain/lang/km/lang.php create mode 100644 lib/plugins/authplain/lang/ko/lang.php create mode 100644 lib/plugins/authplain/lang/ku/lang.php create mode 100644 lib/plugins/authplain/lang/la/lang.php create mode 100644 lib/plugins/authplain/lang/lb/lang.php create mode 100644 lib/plugins/authplain/lang/lt/lang.php create mode 100644 lib/plugins/authplain/lang/lv/lang.php create mode 100644 lib/plugins/authplain/lang/mg/lang.php create mode 100644 lib/plugins/authplain/lang/mk/lang.php create mode 100644 lib/plugins/authplain/lang/mr/lang.php create mode 100644 lib/plugins/authplain/lang/ms/lang.php create mode 100644 lib/plugins/authplain/lang/ne/lang.php create mode 100644 lib/plugins/authplain/lang/nl/lang.php create mode 100644 lib/plugins/authplain/lang/no/lang.php create mode 100644 lib/plugins/authplain/lang/pl/lang.php create mode 100644 lib/plugins/authplain/lang/pt-br/lang.php create mode 100644 lib/plugins/authplain/lang/pt/lang.php create mode 100644 lib/plugins/authplain/lang/ro/lang.php create mode 100644 lib/plugins/authplain/lang/ru/lang.php create mode 100644 lib/plugins/authplain/lang/sk/lang.php create mode 100644 lib/plugins/authplain/lang/sl/lang.php create mode 100644 lib/plugins/authplain/lang/sq/lang.php create mode 100644 lib/plugins/authplain/lang/sr/lang.php create mode 100644 lib/plugins/authplain/lang/sv/lang.php create mode 100644 lib/plugins/authplain/lang/th/lang.php create mode 100644 lib/plugins/authplain/lang/tr/lang.php create mode 100644 lib/plugins/authplain/lang/uk/lang.php create mode 100644 lib/plugins/authplain/lang/vi/lang.php create mode 100644 lib/plugins/authplain/lang/zh-tw/lang.php create mode 100644 lib/plugins/authplain/lang/zh/lang.php diff --git a/inc/auth.php b/inc/auth.php index 17923ba2a..dd0fc35b3 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -1006,7 +1006,7 @@ function register() { //okay try to create the user if(!$auth->triggerUserMod('create', array($login, $pass, $fullname, $email))) { - msg($lang['reguexists'], -1); + msg($lang['regfail'], -1); return false; } @@ -1098,17 +1098,18 @@ function updateprofile() { } } - if($result = $auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), &$changes))) { - // update cookie and session with the changed data - if($changes['pass']) { - list( /*user*/, $sticky, /*pass*/) = auth_getCookie(); - $pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true)); - auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky); - } - return true; + if(!($result = $auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), &$changes)))) { + msg($lang['proffail'], -1); + return false; } - return false; + // update cookie and session with the changed data + if($changes['pass']) { + list( /*user*/, $sticky, /*pass*/) = auth_getCookie(); + $pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true)); + auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky); + } + return true; } /** @@ -1221,7 +1222,7 @@ function act_resendpwd() { // change it if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) { - msg('error modifying user data', -1); + msg($lang['proffail'], -1); return false; } @@ -1229,7 +1230,7 @@ function act_resendpwd() { $pass = auth_pwgen($user); if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) { - msg('error modifying user data', -1); + msg($lang['proffail'], -1); return false; } diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index 3f11a1ee4..2bbf61000 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -75,6 +75,7 @@ $lang['regmissing'] = 'Sorry, you must fill in all fields.'; $lang['reguexists'] = 'Sorry, a user with this login already exists.'; $lang['regsuccess'] = 'The user has been created and the password was sent by email.'; $lang['regsuccess2'] = 'The user has been created.'; +$lang['regfail'] = 'The user could not be created.'; $lang['regmailfail'] = 'Looks like there was an error on sending the password mail. Please contact the admin!'; $lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin'; $lang['regbadpass'] = 'The two given passwords are not identical, please try again.'; @@ -90,6 +91,7 @@ $lang['profdeleteuser'] = 'Delete Account'; $lang['profdeleted'] = 'Your user account has been deleted from this wiki'; $lang['profconfdelete'] = 'I wish to remove my account from this wiki.
This action can not be undone.'; $lang['profconfdeletemissing'] = 'Confirmation check box not ticked'; +$lang['proffail'] = 'User profile was not updated.'; $lang['pwdforget'] = 'Forgotten your password? Get a new one'; $lang['resendna'] = 'This wiki does not support password resending.'; diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php index b31c02fc8..bd46c61a7 100644 --- a/lib/plugins/authplain/auth.php +++ b/lib/plugins/authplain/auth.php @@ -134,7 +134,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { global $config_cascade; // user mustn't already exist - if($this->getUserData($user) !== false) return false; + if($this->getUserData($user) !== false) { + msg($this->getLang('userexists'), -1); + return false; + } $pass = auth_cryptPassword($pwd); @@ -144,16 +147,13 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { // prepare user line $userline = $this->_createUserLine($user, $pass, $name, $mail, $grps); - if(io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) { - $this->users[$user] = compact('pass', 'name', 'mail', 'grps'); - return $pwd; + if(!io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) { + msg($this->getLang('writefail'), -1); + return null; } - msg( - 'The '.$config_cascade['plainauth.users']['default']. - ' file is not writable. Please inform the Wiki-Admin', -1 - ); - return null; + $this->users[$user] = compact('pass', 'name', 'mail', 'grps'); + return $pwd; } /** @@ -169,7 +169,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { global $config_cascade; // sanity checks, user must already exist and there must be something to change - if(($userinfo = $this->getUserData($user)) === false) return false; + if(($userinfo = $this->getUserData($user)) === false) { + msg($this->getLang('usernotexists'), -1); + return false; + } if(!is_array($changes) || !count($changes)) return true; // update userinfo with new data, remembering to encrypt any password @@ -186,13 +189,14 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { $userline = $this->_createUserLine($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $userinfo['grps']); if(!$this->deleteUsers(array($user))) { - msg('Unable to modify user data. Please inform the Wiki-Admin', -1); + msg($this->getLang('writefail'), -1); return false; } if(!io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) { msg('There was an error modifying your user data. You should register again.', -1); // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page + // Should replace the delete/save hybrid modify with an atomic io_replaceInFile $ACT = 'register'; return false; } @@ -223,7 +227,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { if(empty($deleted)) return 0; $pattern = '/^('.join('|', $deleted).'):/'; - io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true); + if (!io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true)) { + msg($this->getLang('writefail'), -1); + return 0; + } // reload the user list and count the difference $count = count($this->users); @@ -407,4 +414,4 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { $this->_pattern[$item] = '/'.str_replace('/', '\/', $pattern).'/i'; // allow regex characters } } -} \ No newline at end of file +} diff --git a/lib/plugins/authplain/lang/af/lang.php b/lib/plugins/authplain/lang/af/lang.php new file mode 100644 index 000000000..29742cfd2 --- /dev/null +++ b/lib/plugins/authplain/lang/af/lang.php @@ -0,0 +1,6 @@ +