Browse code

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

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

bernd authored on 09/08/2007 19:04:25
Showing 7 changed files
... ...
@@ -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
 {
113
-  $formtoken = $_POST['formtoken'];
119
+  if ($formtoken == NULL)
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
 {
... ...
@@ -31,31 +33,56 @@ function strong_password($password)
31 33
 
32 34
 function filter_input_general( $input )
33 35
 {
34
-        return htmlspecialchars(iconv('UTF-8', 'UTF-8', $input), ENT_QUOTES, 'UTF-8');
36
+  return htmlspecialchars(iconv('UTF-8', 'UTF-8', $input), ENT_QUOTES, 'UTF-8');
37
+}
38
+
39
+
40
+function verify_input_general( $input )
41
+{
42
+  if (filter_input_general($input) != $input)
43
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
35 44
 }
36 45
 
37 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
-        return ereg_replace('["\'`]', '', $input );
68
+  return ereg_replace('["\'`]', '', $input );
52 69
 }
53 70
 
71
+
72
+
54 73
 function filter_shell( $input )
55 74
 {
56
-        return ereg_replace('[^-[:alnum:]\_\.\+ßäöüÄÖÜ/%§=]', '', $input );
75
+  return ereg_replace('[^-[:alnum:]\_\.\+ßäöüÄÖÜ/%§=]', '', $input );
76
+}
77
+
78
+function verify_shell( $input )
79
+{
80
+  if (filter_shell($input) != $input)
81
+    system_failure("Ihre Daten enthielten ungültige Zeichen!");
57 82
 }
58 83
 
84
+
85
+
59 86
 function check_path( $input )
60 87
 {
61 88
   DEBUG("checking {$input} for valid path name");
... ...
@@ -79,7 +106,7 @@ function check_path( $input )
79 106
 
80 107
 function check_emailaddr( $input )
81 108
 {
82
-        return (preg_match("/^[a-z]+[a-z0-9]*[\.|\-|_]?[a-z0-9]+@([a-z0-9]*[\.|\-]?[a-z0-9]+){1,4}\.[a-z]{2,4}$/i", $input ) == 1);
109
+  return (preg_match("/^[a-z]+[a-z0-9]*[\.|\-|_]?[a-z0-9]+@([a-z0-9]*[\.|\-]?[a-z0-9]+){1,4}\.[a-z]{2,4}$/i", $input ) == 1);
83 110
 }
84 111
 
85 112
 
... ...
@@ -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,38 +105,39 @@ 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')
108
+  $sure = user_is_sure();
109
+  if ($sure === NULL)
110
+  {
111
+    $_GET['account'] = (int) $_GET['account'];
112
+    $account = get_mailaccount($_GET['account']);
113
+    $enabled = ($account['enabled'] ? 'Ja' : 'Nein');
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;">
117
+      <tr><td>Benutzername:</td>
118
+        <td>'.filter_input_general($account['account']).'</td>
119
+      </tr>
120
+      <tr><td>Mailbox:</td>
121
+        <td>'.filter_input_general($account['mailbox']).'</td>
122
+      </tr>
123
+      <tr><td>Konto aktiv:</td>
124
+        <td>'.$enabled.'</td>
125
+      </tr>
126
+    </table>
127
+');
128
+  }
129
+  elseif ($sure === true)
114 130
   {
115
-    check_form_token('imap_accounts_delete');
116 131
     delete_mailaccount($_GET['account']);
117 132
     if (! $debugmode)
118 133
       header('Location: accounts.php');
119 134
     die();
120 135
   }
121
-  else
136
+  elseif ($sure === false)
122 137
   {
123
-    output('<h3>E-Mail-Account l&ouml;schen</h3>
124
-    <p>Soll der folgende Account wirklich gel&ouml;scht werden?</p>
125
-    ');
126
-    $_GET['account'] = (int) $_GET['account'];
127
-    $account = get_mailaccount($_GET['account']);
128
-    $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;">
131
-    <tr><td>Benutzername:</td>
132
-      <td>'.filter_input_general($account['account']).'</td>
133
-    </tr>
134
-    <tr><td>Mailbox:</td>
135
-      <td>'.filter_input_general($account['mailbox']).'</td>
136
-    </tr>
137
-    <tr><td>Konto aktiv:</td>
138
-      <td>'.$enabled.'</td>
139
-    </tr>
140
-  </table>
141
-  <p><input type="hidden" name="confirm" value="yes" />
142
-    <input type="submit" value="Wirklich l&ouml;schen" />
143
-  </p>
144
-  '));
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').'