Browse code

one-time-URLs für systemuser

git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1078 87cf0b9e-d624-0410-a070-f6ee81989793

bernd authored on19/05/2008 17:59:56
Showing2 changed files
... ...
@@ -22,10 +22,21 @@ function validate_token($customerno, $token)
22 22
 }
23 23
 
24 24
 
25
+function validate_uid_token($uid, $token)
26
+{
27
+  expire_tokens();
28
+  $uid = (int) $uid;
29
+  $token = mysql_real_escape_string($token);
30
+  $result = db_query("SELECT NULL FROM system.usertoken WHERE uid={$uid} AND token='{$token}';");
31
+  return (mysql_num_rows($result) > 0);
32
+}
33
+
34
+
25 35
 function expire_tokens()
26 36
 {
27 37
   $expire = "1 DAY";
28 38
   db_query("UPDATE kundendaten.kunden SET token=NULL, token_create=NULL WHERE token_create < NOW() - INTERVAL {$expire};");
39
+  db_query("DELETE FROM system.usertoken WHERE expire < NOW();");
29 40
 }
30 41
 
31 42
 function invalidate_customer_token($customerno)
... ...
@@ -34,6 +45,12 @@ function invalidate_customer_token($customerno)
34 45
   db_query("UPDATE kundendaten.kunden SET token=NULL, token_create=NULL WHERE id={$customerno} LIMIT 1;");
35 46
 }
36 47
  
48
+function invalidate_systemuser_token($uid)
49
+{
50
+  $uid = (int) $uid;
51
+  db_query("DELETE FROM system.usertoken WHERE uid={$uid} LIMIT 1;");
52
+}
53
+ 
37 54
 function create_token($customerno)
38 55
 {
39 56
   $customerno = (int) $customerno;
40 57
new file mode 100644
... ...
@@ -0,0 +1,64 @@
1
+<?php
2
+$title = "Passwort setzen";
3
+
4
+$show = 'token';
5
+
6
+if (isset($_REQUEST['uid']) and isset($_REQUEST['token']))
7
+{
8
+  $uid = (int) $_REQUEST['uid'];
9
+  $token = $_REQUEST['token'];
10
+  
11
+  require_once('newpass.php');
12
+  require_once('inc/security.php');
13
+  if (validate_uid_token($uid, $token))
14
+  {
15
+    $show = 'password';
16
+    if (isset($_POST['password']))
17
+    {
18
+      if ($_POST['password'] != $_POST['password2'])
19
+        input_error("Die beiden Passwort-Eingaben stimmen nicht überein.");
20
+      elseif ($_POST['password'] == '')
21
+        input_error("Es kann kein leeres Passwort gesetzt werden");
22
+      elseif (($result = strong_password($_POST['password'])) !== true)
23
+        input_error("Das Passwort ist zu einfach (cracklib sagt: {$result})!");
24
+      else
25
+      {
26
+        require_once('session/checkuser.php');
27
+        require_once('inc/base.php');
28
+        logger("modules/index/initialize_useraccount.php", "initialize", "uid »{$uid}« set a new password");
29
+        set_systemuser_password($uid, $_POST['password']);
30
+        success_msg('Das Passwort wurde gesetzt!');
31
+        invalidate_systemuser_token($uid);
32
+        $_SESSION['role'] = find_role($uid, '', True);;
33
+	setup_session($_SESSION['role'], $uid);
34
+        output('<h3>Passwort gesetzt</h3>
35
+        <p>Ihr neues Passwort wurde gesetzt, Sie können jetzt <a href="index.php">die Web-Oberfläche sofort benutzen</a>.</p>');
36
+        $show = NULL;
37
+      }
38
+    }
39
+  }
40
+  else
41
+  {
42
+    input_error("Der eingegebene Code war nicht korrekt. Bitte benutzen Sie die Kopieren & Einfügen-Operation!");
43
+  }
44
+}
45
+
46
+if ($show == 'password')
47
+{
48
+  output('<h3>Neues Passwort setzen</h3>
49
+  <p>Bitte legen Sie jetzt Ihr neues Passwort fest.</p>'.
50
+  html_form('initialize_useraccount', '', '', '<p style="display: none"><input type="hidden" name="uid" value="'.$uid.'" />
51
+  <input type="hidden" name="token" value="'.$token.'" /></p>
52
+  <p><span class="login_label">Neues Passwort:</span> <input type="password" name="password" size="30" /></p>
53
+  <p><span class="login_label">Bestätigung:</span> <input type="password" name="password2" size="30" /></p>
54
+  <p><span class="login_label">&#160;</span> <input type="submit" value="Passwort setzen" /></p>
55
+  '));
56
+}
57
+elseif ($show == 'token')
58
+{
59
+  output('<h3>Neues Passwort setzen</h3>
60
+  <p>Bitte rufen Sie die Adresse aus Ihrer Begrüßungs-E-Mail auf um ein neues Passwort zu setzen.');
61
+}
62
+
63
+
64
+?>