Umfangreiche Code-Aufräumarbeiten Neuer "Are you sure"-Dialog
bernd

bernd commited on 2007-08-09 19:04:25
Zeige 7 geänderte Dateien mit 94 Einfügungen und 47 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@604 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -39,6 +39,23 @@ p.warning {
39 39
 }
40 40
 
41 41
 
42
+div.confirmation {
43
+}
44
+
45
+div.confirmation div.question {
46
+        padding: 10px;
47
+        color: #000000;
48
+        border: 1px solid #FF0000;
49
+        background-color: #FFFFFF;
50
+        font-weight: bold;
51
+        margin-bottom: 1em;
52
+}
53
+
54
+div.confirmation p.buttons input {
55
+        width: 10em;
56
+}
57
+
58
+
42 59
 span.login_label {
43 60
         display: block;
44 61
         float: left;
... ...
@@ -67,10 +67,17 @@ function are_you_sure($query_string, $question)
67 67
     $query_string = 'debug&'.$query_string;
68 68
   $token = random_string(20);
69 69
   $_SESSION['are_you_sure_token'] = $token;
70
-  output("<form action=\"?{$query_string}\" method=\"post\">\n");
71
-  output("<p class=\"confirmation\">{$question}<br />\n");
72
-  output("<input type=\"hidden\" name=\"random_token\" value=\"{$token}\" />\n");
73
-  output("<input type=\"submit\" name=\"really\" value=\"Ja\" />\n<input type=\"submit\" name=\"not_really\" value=\"Nein\" /></p>\n");
70
+  output("<h3>Sicherheitsabfrage</h3>
71
+    <form action=\"?{$query_string}\" method=\"post\">
72
+    <div class=\"confirmation\">
73
+      <div class=\"question\">{$question}</div>
74
+      <p class=\"buttons\">
75
+        <input type=\"hidden\" name=\"random_token\" value=\"{$token}\" />
76
+        <input type=\"submit\" name=\"really\" value=\"Ja\" />
77
+        &nbsp; &nbsp;
78
+        <input type=\"submit\" name=\"not_really\" value=\"Nein\" />
79
+      </p>
80
+    </div>");
74 81
   output("</form>\n");
75 82
 }
76 83
 
... ...
@@ -103,19 +110,19 @@ function generate_form_token($form_id)
103 110
   }
104 111
   if (! isset($_SESSION['session_token']))
105 112
     $_SESSION['session_token'] = random_string(10);
106
-  $formtoken = hash('sha256', $sessid.$form_id.$_SESSION['session_token']);
107
-  return '<p style="display: none;"><input type="hidden" name="formtoken" value="'.$formtoken.'" /></p>'."\n";
113
+  return hash('sha256', $sessid.$form_id.$_SESSION['session_token']);
108 114
 }
109 115
 
110 116
 
111
-function check_form_token($form_id)
117
+function check_form_token($form_id, $formtoken = NULL)
112 118
 {
119
+  if ($formtoken == NULL)
113 120
     $formtoken = $_POST['formtoken'];
114 121
   $sessid = session_id();
115 122
   if ($sessid == "") 
116 123
   {
117 124
     DEBUG("Uh? Session not running? Wtf?");
118
-    system_failure("Internal error!");
125
+    system_failure("Internal error! (Session not running)");
119 126
   }
120 127
 
121 128
   $correct_formtoken = hash('sha256', $sessid.$form_id.$_SESSION['session_token']);
... ...
@@ -147,7 +154,7 @@ function html_form($form_id, $scriptname, $querystring, $content)
147 154
   $querystring = str_replace('&', '&amp;', $querystring);
148 155
   $ret = '';
149 156
   $ret .= '<form action="'.$scriptname.'?'.$debugstr.$querystring.'" method="post">'."\n";
150
-  $ret .= generate_form_token($form_id);
157
+  $ret .= '<p style="display: none;"><input type="hidden" name="formtoken" value="'.generate_form_token($form_id).'" /></p>'."\n";
151 158
   $ret .= $content;
152 159
   $ret .= '</form>';
153 160
   return $ret;  
... ...
@@ -1,5 +1,7 @@
1 1
 <?php
2 2
 
3
+require_once('inc/error.php');
4
+
3 5
 
4 6
 function strong_password($password)
5 7
 {
... ...
@@ -35,17 +37,32 @@ function filter_input_general( $input )
35 37
 }
36 38
 
37 39
 
40
+function verify_input_general( $input )
41
+{
42
+  if (filter_input_general($input) != $input)
43
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
44
+}
45
+
46
+
47
+
38 48
 function filter_input_username( $input )
39 49
 {
40
-        return ereg_replace("[^[:alnum:]\_\.\+\-]", "", $input );
50
+  if (ereg_replace("[^[:alnum:]\_\.\+\-]", "", $input ) != $input)
51
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
41 52
 }
42 53
 
54
+
55
+
43 56
 function filter_input_hostname( $input )
44 57
 {
45
-        $input = strtolower($input);
46
-        return ereg_replace("[^[:alnum:]äöü\.\-]", "", $input );
58
+  $input = str_replace(array('Ä', 'Ö', 'Ü'), array('ä', 'ö', 'ü'), strtolower($input));
59
+  if (ereg_replace("[^[:alnum:]äöü\.\-]", "", $input ) != $input)
60
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
61
+  return $input;
47 62
 }
48 63
 
64
+
65
+
49 66
 function filter_quotes( $input )
50 67
 {
51 68
   return ereg_replace('["\'`]', '', $input );
... ...
@@ -56,6 +75,14 @@ function filter_shell( $input )
56 75
   return ereg_replace('[^-[:alnum:]\_\.\+ßäöüÄÖÜ/%§=]', '', $input );
57 76
 }
58 77
 
78
+function verify_shell( $input )
79
+{
80
+  if (filter_shell($input) != $input)
81
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
82
+}
83
+
84
+
85
+
59 86
 function check_path( $input )
60 87
 {
61 88
   DEBUG("checking {$input} for valid path name");
... ...
@@ -18,11 +18,11 @@ $title = "Domainüberblick";
18 18
 output('<h3>Domains</h3>
19 19
 <p>In Ihrem Account werden die folgenden Domains verwaltet:</p>
20 20
 <table>
21
-<tr><th>Domainname</th><th>Reg-Datum</th><th>Kündigungsdatum</th></tr>
21
+<tr><th>Domainname</th><th>Reg-Datum</th><th>Kündigungsdatum</th><th>&nbsp;</th></tr>
22 22
 ');
23 23
 foreach ($user_domains as $domain)
24 24
 {
25
-  output("  <tr><td><a href=\"http://www.{$domain->fqdn}\">{$domain->fqdn}</a></td><td>{$domain->reg_date}</td><td>{$domain->cancel_date}</td></tr>\n");
25
+  output("  <tr><td>{$domain->fqdn}</td><td>{$domain->reg_date}</td><td>{$domain->cancel_date}</td><td><a href=\"http://www.{$domain->fqdn}\">WWW-Seite aufrufen</a></td></tr>\n");
26 26
 }
27 27
 output('</table>');
28 28
 output("<br />");
... ...
@@ -9,10 +9,6 @@ require_role(ROLE_SYSTEMUSER);
9 9
 
10 10
 $user = $_SESSION['userinfo'];
11 11
 
12
-$param = '';
13
-if ($debugmode)
14
-        $param="debug";
15
-
16 12
 $title = "E-Mail-Accounts";
17 13
 
18 14
 
... ...
@@ -33,7 +29,6 @@ if (isset($_GET['action']) && $_GET['action'] == 'save')
33 29
     if ($error != "")
34 30
     {
35 31
       input_error($error);
36
-      $section = "mail";
37 32
       $title = "E-Mail-Accounts";
38 33
       output("");
39 34
     }
... ...
@@ -110,24 +105,15 @@ elseif (isset($_GET['action']) && $_GET['action'] == 'create')
110 105
 }
111 106
 elseif (isset($_GET['action']) && $_GET['action'] == 'delete' && $_GET['account'] != '')
112 107
 {
113
-  if ($_POST['confirm'] == 'yes')
114
-  {
115
-    check_form_token('imap_accounts_delete');
116
-    delete_mailaccount($_GET['account']);
117
-    if (! $debugmode)
118
-      header('Location: accounts.php');
119
-    die();
120
-  }
121
-  else
108
+  $sure = user_is_sure();
109
+  if ($sure === NULL)
122 110
   {
123
-    output('<h3>E-Mail-Account l&ouml;schen</h3>
124
-    <p>Soll der folgende Account wirklich gel&ouml;scht werden?</p>
125
-    ');
126 111
     $_GET['account'] = (int) $_GET['account'];
127 112
     $account = get_mailaccount($_GET['account']);
128 113
     $enabled = ($account['enabled'] ? 'Ja' : 'Nein');
129
-    output(html_form('imap_accounts_delete', "accounts.php", "action=delete&account=".$_GET['account'], 
130
-    '<table style="margin-bottom: 1em;">
114
+    are_you_sure("action=delete&amp;account={$_GET['account']}", '
115
+    <p>Soll der folgende Account wirklich gel&ouml;scht werden?</p>
116
+    <table style="margin-bottom: 1em;">
131 117
       <tr><td>Benutzername:</td>
132 118
         <td>'.filter_input_general($account['account']).'</td>
133 119
       </tr>
... ...
@@ -138,10 +124,20 @@ elseif (isset($_GET['action']) && $_GET['action'] == 'delete' && $_GET['account'
138 124
         <td>'.$enabled.'</td>
139 125
       </tr>
140 126
     </table>
141
-  <p><input type="hidden" name="confirm" value="yes" />
142
-    <input type="submit" value="Wirklich l&ouml;schen" />
143
-  </p>
144
-  '));
127
+');
128
+  }
129
+  elseif ($sure === true)
130
+  {
131
+    delete_mailaccount($_GET['account']);
132
+    if (! $debugmode)
133
+      header('Location: accounts.php');
134
+    die();
135
+  }
136
+  elseif ($sure === false)
137
+  {
138
+    if (! $debugmode)
139
+      header("Location: accounts.php");
140
+    die();
145 141
   }
146 142
 }
147 143
 elseif (isset($_GET['edit']))
... ...
@@ -153,24 +149,23 @@ elseif (isset($_GET['edit']))
153 149
   $account = get_mailaccount($_GET['edit']);
154 150
   list($username, $domain) = explode('@', $account['account'], 2);
155 151
   $enabled = ($account['enabled'] ? ' checked="checked"' : '');
156
-  output('<form action="accounts.php?action=save&amp;id='.$_GET['edit'].'&amp;'.$param.'" method="post">
157
-  '.generate_form_token('imap_accounts_edit').'
152
+  $form = '
158 153
   <table style="margin-bottom: 1em;">
159 154
   <tr><th>Einstellung:</th><th>alter Wert:</th><th>neuer Wert:</th><th>&nbsp;</th></tr>
160 155
   <tr><td>Benutzername:</td><td><input type="text" id="old_account" name="old_account" value="'.$account['account'].'" readonly="readonly" style="background-color: #C0C0C0;" /></td>
161 156
           <td><input type="text" id="user" name="user" value="'.$username.'" />@<select name="domain" id="domain" size="1">
162 157
     <option value="schokokeks.org">schokokeks.org</option>
163
-    ');
158
+    ';
164 159
     $domains = get_domain_list($user['customerno'], $user['uid']);
165 160
     if (count($domains) > 0)
166
-      output('<option>----------------------------</option>');
161
+      $form .= '<option>----------------------------</option>';
167 162
     foreach ($domains as $dom)
168 163
       if ($domain == $dom->fqdn)
169
-        output('<option value="'.$dom->fqdn.'" selected="selected">'.$dom->fqdn.'</option>');
164
+        $form .= '<option value="'.$dom->fqdn.'" selected="selected">'.$dom->fqdn.'</option>';
170 165
       else
171
-        output('<option value="'.$dom->fqdn.'">'.$dom->fqdn.'</option>');
166
+        $form .= '<option value="'.$dom->fqdn.'">'.$dom->fqdn.'</option>';
172 167
 
173
-    output('</select></td>
168
+    $form .= '</select></td>
174 169
           <td><input type="button" onclick="document.getElementById(\'user\').value = \''.$username.'\' ; document.getElementById(\'domain\').value = \''.$domain.'\'" value="Zeile zur&uuml;cksetzen" /></td></tr>
175 170
   <tr><td>Mailbox:</td><td><input type="text" id="old_mailbox" name="old_mailbox" value="'.$account['mailbox'].'" readonly="readonly" style="background-color: #C0C0C0;" /></td>
176 171
           <td><input type="text" id="mailbox" name="mailbox" value="'.$account['mailbox'].'" /></td>
... ...
@@ -186,8 +181,8 @@ elseif (isset($_GET['edit']))
186 181
   <p><input type="submit" value="&Auml;nderungen speichern" /><br />
187 182
   Hinweis: Das Passwort wird nur ge&auml;ndert, wenn Sie auf dieser Seite eines eingeben. Geben Sie keines an, wird das bisherige beibehalten!</p>
188 183
   </form>
189
-  ');
190
-
184
+  ';
185
+  output(html_form('imap_accounts_edit', 'accounts.php', 'action=save&id='.$_GET['edit'], $form));
191 186
 }
192 187
 else
193 188
 {
... ...
@@ -48,6 +48,9 @@ elseif ($_GET['action'] == 'chpass')
48 48
 }
49 49
 elseif ($_GET['action'] == 'delete')
50 50
 {
51
+  $title = "Jabber-Account löschen";
52
+  $section = 'jabber_accounts';
53
+  
51 54
   $account = get_jabberaccount_details($_GET['account']);
52 55
   $account_string = filter_input_general( $account['local'].'@'.$account['domain'] );
53 56
   $sure = user_is_sure();
... ...
@@ -113,7 +113,7 @@ if ($output_something)
113 113
   output('<h3>MySQL-Datenbanken</h3>
114 114
   <p>Hier können Sie Ihre MySQL-Datenbanken verwalten. Die Einstellungen werden mit einer leichten Verzögerung (maximal 1 Minute) in das System übertragen. Bitte beachten Sie, dass neue Zugänge also nicht umgehend funktionieren.</p>
115 115
   <p><strong>Hinweis:</strong> In dieser Matrix sehen Sie links die Datenbanken und oben die Benutzer, die Sie eingerichtet haben.
116
-  In die leeren Eingabefelder können Sie den Namen eines neuen Benutzers bzw. einer neuen Datenbank eintragen. Sofern Sie noch keine Datenbank(en) oder Benutzer eingerichtet haben, erscheinen nur die Eingabefelder. Vergessen Sie nicht, nach der Erstellung eines neuen Benutzerkontos dem betreffenden Benutzer ein Passwort zu setzen (s. unten auf dieser Seite). Der Name von Datenbanken und Benutzern muss mit dem Namen des System-Benutzeraccounts übereinstimmen oder mit diesem und einem Nachfolgenden Unterstrich beginnen. Z.B. kann der System-Benutzer <em>bernd</em> die MySQL-Accounts <em>bernd</em> und <em>bernd_2</em> erzeugen.</p>');
116
+  In die leeren Eingabefelder können Sie den Namen eines neuen Benutzers bzw. einer neuen Datenbank eintragen. Sofern Sie noch keine Datenbank(en) oder Benutzer eingerichtet haben, erscheinen nur die Eingabefelder. Vergessen Sie nicht, nach der Erstellung eines neuen Benutzerkontos dem betreffenden Benutzer ein Passwort zu setzen (s. unten auf dieser Seite). Der Name von Datenbanken und Datenbank-Benutzern muss mit dem Namen des System-Benutzeraccounts übereinstimmen oder mit diesem und einem nachfolgenden Unterstrich beginnen. Z.B. kann der System-Benutzer <em>bernd</em> die MySQL-Accounts <em>bernd</em> und <em>bernd_2</em> erzeugen. Aufgrund einer Beschränkung des MySQL-Servers dürfen Benutzernamen allerdings zur Zeit nur 16 Zeichen lang sein.</p>');
117 117
 
118 118
   output('<form action="'.($debugmode ? '?debug': '').'" method="post">
119 119
   '.generate_form_token('mysql_databases_access').'
120 120