summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2013-06-09 02:29:27 +0200
committerAndreas Gohr <andi@splitbrain.org>2013-06-09 02:29:27 +0200
commit8a285f7fa7f09ae969e12cf4b7bda0f5123bb0fb (patch)
treeccca7e422e0dc12f5439031ea36f26e017109a18 /inc
parent04e4890db370bdb57201f76581fe3dc0a3adb614 (diff)
downloadrpg-8a285f7fa7f09ae969e12cf4b7bda0f5123bb0fb.tar.gz
rpg-8a285f7fa7f09ae969e12cf4b7bda0f5123bb0fb.tar.bz2
AUTH_PASSWORD_GENERATE event added
This is needed to replace the password generator by a plugin implementation. Related to PR #166 and FS#2147
Diffstat (limited to 'inc')
-rw-r--r--inc/auth.php45
1 files changed, 29 insertions, 16 deletions
diff --git a/inc/auth.php b/inc/auth.php
index 1f8489f03..82a6b46cd 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -678,27 +678,40 @@ function auth_nameencode($name, $skip_group = false) {
/**
* Create a pronouncable password
*
+ * The $foruser variable might be used by plugins to run additional password
+ * policy checks, but is not used by the default implementation
+ *
* @author Andreas Gohr <andi@splitbrain.org>
* @link http://www.phpbuilder.com/annotate/message.php3?id=1014451
+ * @triggers AUTH_PASSWORD_GENERATE
*
+ * @param string $foruser username for which the password is generated
* @return string pronouncable password
*/
-function auth_pwgen() {
- $pw = '';
- $c = 'bcdfghjklmnprstvwz'; //consonants except hard to speak ones
- $v = 'aeiou'; //vowels
- $a = $c.$v; //both
-
- //use two syllables...
- for($i = 0; $i < 2; $i++) {
- $pw .= $c[rand(0, strlen($c) - 1)];
- $pw .= $v[rand(0, strlen($v) - 1)];
- $pw .= $a[rand(0, strlen($a) - 1)];
+function auth_pwgen($foruser='') {
+ $data = array(
+ 'password' = '',
+ 'foruser' = $foruser
+ );
+
+ $evt = new Doku_Event('AUTH_PASSWORD_GENERATE', $data);
+ if($evt->advise_before(true)) {
+ $c = 'bcdfghjklmnprstvwz'; //consonants except hard to speak ones
+ $v = 'aeiou'; //vowels
+ $a = $c.$v; //both
+
+ //use two syllables...
+ for($i = 0; $i < 2; $i++) {
+ $data['password'] .= $c[rand(0, strlen($c) - 1)];
+ $data['password'] .= $v[rand(0, strlen($v) - 1)];
+ $data['password'] .= $a[rand(0, strlen($a) - 1)];
+ }
+ //... and add a nice number
+ $data['password'] .= rand(10, 99);
}
- //... and add a nice number
- $pw .= rand(10, 99);
+ $evt->advise_after();
- return $pw;
+ return $data['password'];
}
/**
@@ -765,7 +778,7 @@ function register() {
}
if($conf['autopasswd']) {
- $pass = auth_pwgen(); // automatically generate password
+ $pass = auth_pwgen($login); // automatically generate password
} elseif(empty($pass) || empty($passchk)) {
msg($lang['regmissing'], -1); // complain about missing passwords
return false;
@@ -958,7 +971,7 @@ function act_resendpwd() {
} else { // autogenerate the password and send by mail
- $pass = auth_pwgen();
+ $pass = auth_pwgen($user);
if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
msg('error modifying user data', -1);
return false;