Bernd Wurst commited on 2014-01-15 18:15:09
Zeige 4 geänderte Dateien mit 69 Einfügungen und 23 Löschungen.
... | ... |
@@ -17,6 +17,21 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
17 | 17 |
require_once('newpass.php'); |
18 | 18 |
require_once('session/checkuser.php'); |
19 | 19 |
|
20 |
+function send_user_token($username) |
|
21 |
+{ |
|
22 |
+ $token = get_user_token($username); |
|
23 |
+ $email = emailaddress_for_user($username); |
|
24 |
+ |
|
25 |
+ $tokenurl = config('webinterface_url').'/init'.$token.'?agb=1'; |
|
26 |
+ |
|
27 |
+ $msg = 'Sie haben für Ihren Zugang bei '.config('company_name').' ein neues Passwort angefordert. |
|
28 |
+Bitte besuchen Sie folgende Adresse um Ihr Passwort neu zu setzen: |
|
29 |
+ '.$tokenurl.' |
|
30 |
+ |
|
31 |
+Mit freundlichen Grüßen, |
|
32 |
+Ihre Admins von '.config('company_name'); |
|
33 |
+ send_mail($email, "Passwortanforderung fuer schokokeks.org", $msg); |
|
34 |
+} |
|
20 | 35 |
|
21 | 36 |
function send_customer_token($customerno) |
22 | 37 |
{ |
... | ... |
@@ -24,7 +39,7 @@ function send_customer_token($customerno) |
24 | 39 |
$token = get_customer_token($customerno); |
25 | 40 |
$customer = get_customer_info($customerno); |
26 | 41 |
if ($customer['email'] == '') |
27 |
- system_failure('Für Ihr Kundenkonto ist keine E-Mail-Adresse eingetragen. Diese Funktion steht Ihnen daher nicht zur Verfügung.') |
|
42 |
+ system_failure('Für Ihr Kundenkonto ist keine E-Mail-Adresse eingetragen. Diese Funktion steht Ihnen daher nicht zur Verfügung.'); |
|
28 | 43 |
$anrede = "Sehr geehrte Damen und Herren"; |
29 | 44 |
if ($customer['title'] == 'Herr') |
30 | 45 |
$anrede = "Sehr geehrter Herr {$customer['name']}"; |
... | ... |
@@ -17,6 +17,18 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
17 | 17 |
require_once('inc/db_connect.php'); |
18 | 18 |
require_once('session/checkuser.php'); |
19 | 19 |
|
20 |
+function user_customer_match($cust, $user) |
|
21 |
+{ |
|
22 |
+ $customerno = (int) $cust; |
|
23 |
+ $username = mysql_real_escape_string($user); |
|
24 |
+ $result = db_query("SELECT uid FROM system.useraccounts WHERE kunde={$customerno} AND username='{$username}' AND kundenaccount=1;"); |
|
25 |
+ if (mysql_num_rows($result) > 0) |
|
26 |
+ return true; |
|
27 |
+ return false; |
|
28 |
+} |
|
29 |
+ |
|
30 |
+ |
|
31 |
+ |
|
20 | 32 |
function customer_has_email($customerno, $email) |
21 | 33 |
{ |
22 | 34 |
$customerno = (int) $customerno; |
... | ... |
@@ -88,23 +100,33 @@ function invalidate_systemuser_token($uid) |
88 | 100 |
db_query("DELETE FROM system.usertoken WHERE uid={$uid} LIMIT 1;"); |
89 | 101 |
} |
90 | 102 |
|
91 |
-function create_token($customerno) |
|
103 |
+function create_token($username) |
|
92 | 104 |
{ |
93 |
- $customerno = (int) $customerno; |
|
105 |
+ $username = mysql_real_escape_string($username); |
|
94 | 106 |
expire_tokens(); |
95 |
- $result = db_query("SELECT token_create FROM kundendaten.kunden WHERE id={$customerno} AND token_create IS NOT NULL;"); |
|
96 |
- if (mysql_num_rows($result) > 0) |
|
97 |
- { |
|
98 |
- $res = mysql_fetch_object($result)->token_create; |
|
99 |
- input_error("Sie haben diese Funktion kürzlich erst benutzt, an Ihre E-Mail-Adresse wurde bereits am {$res} eine Nachricht verschickt. Sie können diese Funktion erst nach Ablauf von 24 Stunden erneut benutzen."); |
|
100 |
- return false; |
|
107 |
+ $result = db_query("SELECT uid FROM system.useraccounts WHERE username='{$username}'"); |
|
108 |
+ $uid = (int) mysql_fetch_assoc($result)['uid']; |
|
109 |
+ |
|
110 |
+ $result = db_query("SELECT created FROM system.usertoken WHERE uid={$uid}"); |
|
111 |
+ if (mysql_num_rows($result) > 0) { |
|
112 |
+ system_failure("Für Ihr Benutzerkonto ist bereits eine Passwort-Erinnerung versendet worden. Bitte wenden Sie sich an den Support wenn Sie diese nicht erhalten haben."); |
|
101 | 113 |
} |
102 |
- $token = random_string(10); |
|
103 |
- db_query("UPDATE kundendaten.kunden SET token='{$token}', token_create=now() WHERE id={$customerno} LIMIT 1;"); |
|
114 |
+ |
|
115 |
+ $token = random_string(16); |
|
116 |
+ db_query("INSERT INTO system.usertoken VALUES ({$uid}, NOW(), NOW() + INTERVAL 1 DAY, '{$token}')"); |
|
104 | 117 |
return true; |
105 | 118 |
} |
106 | 119 |
|
107 | 120 |
|
121 |
+function emailaddress_for_user($username) |
|
122 |
+{ |
|
123 |
+ $username = mysql_real_escape_string($username); |
|
124 |
+ $result = db_query("SELECT k.email FROM kundendaten.kunden AS k INNER JOIN system.useraccounts AS u ON (u.kunde=k.id) WHERE u.username='{$username}'"); |
|
125 |
+ $data = mysql_fetch_assoc($result); |
|
126 |
+ return $data['email']; |
|
127 |
+} |
|
128 |
+ |
|
129 |
+ |
|
108 | 130 |
function get_customer_token($customerno) |
109 | 131 |
{ |
110 | 132 |
$customerno = (int) $customerno; |
... | ... |
@@ -116,4 +138,12 @@ function get_customer_token($customerno) |
116 | 138 |
} |
117 | 139 |
|
118 | 140 |
|
141 |
+function get_user_token($username) |
|
142 |
+{ |
|
143 |
+ $username = mysql_real_escape_string($username); |
|
144 |
+ $result = db_query("SELECT token FROM system.usertoken AS t INNER JOIN system.useraccounts AS u USING (uid) WHERE username='{$username}'"); |
|
145 |
+ $tmp = mysql_fetch_assoc($result); |
|
146 |
+ return $tmp['token']; |
|
147 |
+} |
|
148 |
+ |
|
119 | 149 |
?> |
... | ... |
@@ -19,31 +19,32 @@ title("Neues Passwort beantragen"); |
19 | 19 |
//require_once('inc/error.php'); |
20 | 20 |
//system_failure("Diese Funktion ist noch nicht fertiggestellt."); |
21 | 21 |
|
22 |
-if (isset($_POST['customerno'])) |
|
22 |
+if (isset($_POST['customerno']) && isset($_POST['username'])) |
|
23 | 23 |
{ |
24 | 24 |
require_once('newpass.php'); |
25 |
- if (customer_has_email($_POST['customerno'], $_POST['email'])) |
|
25 |
+ if (user_customer_match($_POST['customerno'], $_POST['username'])) |
|
26 | 26 |
{ |
27 |
- if (create_token($_POST['customerno'])) |
|
27 |
+ if (create_token($_POST['username'])) |
|
28 | 28 |
{ |
29 | 29 |
require_once('mail.php'); |
30 | 30 |
require_once('inc/base.php'); |
31 |
- send_customer_token($_POST['customerno']); |
|
32 |
- logger(LOG_INFO, "modules/index/new_password", "pwrecovery", "token sent for customer »{$_POST['customerno']}«"); |
|
31 |
+ send_user_token($_POST['username']); |
|
32 |
+ logger(LOG_INFO, "modules/index/lost_password", "pwrecovery", "token sent for customer »{$_POST['customerno']}/{$_POST['username']}«"); |
|
33 | 33 |
success_msg('Die angegebenen Daten waren korrekt, Sie sollten umgehend eine E-Mail erhalten.'); |
34 | 34 |
} |
35 | 35 |
} |
36 | 36 |
else |
37 | 37 |
{ |
38 |
- input_error("Die eingegebenen Daten waren nicht korrekt. Sollten Sie nicht mehr wissen, welche E-Mail-Adresse Sie angegeben haben, wenden Sie sich bitte an einen Administrator."); |
|
38 |
+ input_error("Die eingegebenen Daten waren nicht korrekt. Sollten Sie die Daten nicht mehr kennen, wenden Sie sich bitte an einen Administrator."); |
|
39 | 39 |
} |
40 | 40 |
} |
41 | 41 |
|
42 |
-output('<p>Sofern Sie bei Ihrer Anmeldung noch kein Passwort für Ihren Kundenaccount festgelegt hatten, können Sie hier ein neues Passwort festlegen. Sie müssen dafür Ihre Kundennummer und die bei der Anmeldung angegebene E-Mail-Adresse eingeben.</p> |
|
43 |
-<p>Nach dem Ausfüllen dieses Formulars erhalten Sie eine E-Mail mit einem Link, den Sie in Ihrem Browser öffnen müssen. Dort können Sie dann ein neues Passwort eingeben.</p> |
|
42 |
+output('<p>Wenn Sie Ihr Kundenpasswort nicht mehr kennen, können Sie hier ein neues Passwort beantragen. Sie müssen dafür Ihre Kundennummer und Ihren Benutzernamen kennen. Kennen Sie diese Daten nicht, wenden Sie sich bitte <a href="mailto:'.config('adminmail').'">an die Administratoren</a>.</p> |
|
43 |
+<p>Nach dem Ausfüllen dieses Formulars erhalten Sie eine E-Mail mn die bei uns hinterlegte E-Mail-Adresse. Diese Mail enthält einem Link, den Sie in Ihrem Browser öffnen müssen. Dort können Sie dann ein neues Passwort eingeben.</p> |
|
44 |
+<p><span style="font-weight: bold;">Hinweis:</span> Sie können auf diesem Weg nur das Passwort des Hauptbenutzers neu anfordern. Sind Sie Mitbenutzer eines anderen Kunden, dann kann dieser Ihr Passwort neu setzen.</p> |
|
44 | 45 |
<form action="" method="post"> |
45 | 46 |
<p><span class="login_label">Kundennummer:</span> <input type="text" name="customerno" size="30" /></p> |
46 |
-<p><span class="login_label">E-Mail-Adresse:</span> <input type="text" name="email" size="30" /></p> |
|
47 |
+<p><span class="login_label">Benutzername:</span> <input type="text" name="username" size="30" /></p> |
|
47 | 48 |
<p><span class="login_label"> </span> <input type="submit" value="Passwort anfordern" /></p> |
48 | 49 |
</form>'); |
49 | 50 |
|
... | ... |
@@ -55,12 +55,12 @@ if ($messages) { |
55 | 55 |
<h3>schokokeks.org Hosting Webinterface</h3> |
56 | 56 |
<p>Auf dieser Seite können Sie diverse Einstellungen Ihres Accounts auf schokokeks.org Hosting festlegen. Sofern Sie noch kein Kunde von schokokeks.org Hosting sind, können Sie diese Seite nicht benutzen. Besuchen Sie in diesem Fall bitte unsere <a href="http://www.schokokeks.org">öffentliche Seite</a>.</p> |
57 | 57 |
<form action="" method="post"> |
58 |
-<p><label for="username" class="login_label">Benutzername oder E-Mail-Adresse<sup>*</sup>:</label> <input type="text" id="username" name="webinterface_username" size="30" /></p> |
|
58 |
+<p><label for="username" class="login_label">Benutzername oder E-Mail-Adresse:</label> <input type="text" id="username" name="webinterface_username" size="30" /></p> |
|
59 | 59 |
<p><label for="password" class="login_label">Passwort:</label> <input type="password" id="password" name="webinterface_password" size="30" /></p> |
60 | 60 |
<p><span class="login_label"> </span> <input type="submit" value="Anmelden" /></p> |
61 | 61 |
</form> |
62 |
-<p><sup>*</sup> Sie können sich hier mit Ihrem System-Benutzernamen, Ihrer E-Mail-Adresse oder Ihrer Kundennummer (jeweils mit zugehörigem Passwort) anmelden. Je nach gewählten Daten erhalten Sie unterschiedliche Zugriffsrechte.</p> |
|
63 |
-<p>Sollten Sie Ihr Passwort nicht mehr kennen, wenden Sie sich bitte unter Angabe Ihres Benutzernamens und/oder Ihrer Kundennummer an den Support. Passwörter für E-Mail-Konten kann der Eigentümer des Benutzeraccounts neu setzen.</p> |
|
62 |
+<p>Sie können sich hier mit Ihrem System-Benutzernamen, Ihrer E-Mail-Adresse oder Ihrer Kundennummer (jeweils mit zugehörigem Passwort) anmelden. Je nach gewählten Daten erhalten Sie unterschiedliche Zugriffsrechte.</p> |
|
63 |
+<p><a href="lost_password">Sollten Sie Ihr Kunden-Passwort nicht mehr kennen, klicken Sie bitte hier.</a> Passwörter für E-Mail-Konten kann der Eigentümer des Benutzeraccounts neu setzen.</p> |
|
64 | 64 |
|
65 | 65 |
<p><em><a href="../../certlogin/?destination=go/<?php echo $go; ?>" >Mit einem Client-Zertifikat anmelden</a></em> (<a href="../../go/index/certinfo" >Wie geht das?</a>)</p> |
66 | 66 |
|
67 | 67 |