Browse code

Verwaltung von FTP-Accounts. Grafisch fragwürdig, funktional sollte es passen.

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

bernd authored on08/12/2009 16:22:42
Showing5 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,42 @@
1
+<?php
2
+
3
+require_once('inc/base.php');
4
+require_once('inc/icons.php');
5
+
6
+include("ftpusers.php");
7
+
8
+$ftpusers = list_ftpusers();
9
+$regular_ftp = have_regular_ftp();
10
+
11
+
12
+output('<h3>FTP-Zugänge</h3>
13
+<p>Mit Ihrem SSH- bzw. SFTP-Zugriff können Sie sämtliche Ihrer Dateien bearbeiten und alle Funktionen nutzen, die wir Ihnen bereitstellen. Wenn sie möchten, können Sie sich mit diesen Zugangsdaten auch über das FTP-Protokoll verbinden.</p>
14
+');
15
+
16
+if ($regular_ftp)
17
+{
18
+  output('<p>'.icon_enabled().' Momentan ist der Zugriff über FTP aktiviert. Wenn Sie diesen nicht benötigen sollten Sie ihn aus Sicherheitsgründen ausschalten.<br /><a href="edit?regular_ftp=no">FTP-Zugriff sperren</a></p>');
19
+}
20
+else
21
+{
22
+  output('<p>'.icon_error().' Der Zugriff über FTP ist momentan gesperrt. Aktivieren Sie diesen nur wenn Sie ihn auch nutzen möchten.<br /><a href="edit?regular_ftp=yes">FTP-Zugriff freischalten</a></p>');
23
+}
24
+
25
+output('
26
+<h3>Zusätzliche FTP-Benutzer</h3>
27
+<p>Als Zusatzleistung bieten wir Ihnen die Möglichkeit, weitere FTP-Benutzerzugänge anzulegen. Diese Zugänge sind auf das angegebene Verzeichnis beschränkt und es kann nur mit dem FTP-Protokoll verwendet werden. Ein Login mittels SSH ist für diese Benutzerkonten nicht möglich.</p>');
28
+
29
+
30
+output('
31
+<table><tr><th>Benutzername</th><th>Verzeichnis</th><th>aktiv</th><th>&#160;</th></tr>
32
+');
33
+
34
+foreach ($ftpusers AS $f)
35
+{
36
+  $active = ($f['active'] == 1 ? icon_enabled('Ja') : '-');
37
+  output("<tr><td>".internal_link("edit?id={$f['id']}", $f['username'])."</td><td>{$f['homedir']}</td><td style=\"text-align: center;\">{$active}</td><td>".internal_link("save?delete={$f['id']}", icon_delete("{$f['username']} löschen"))."</td></tr>");
38
+}
39
+output('</table>');
40
+
41
+addnew('edit', 'Neuen FTP-Benutzer anlegen');
42
+
0 43
new file mode 100644
... ...
@@ -0,0 +1,78 @@
1
+<?php
2
+
3
+include('ftpusers.php');
4
+
5
+require_once('inc/base.php');
6
+
7
+$title="FTP-Benutzer einrichten";
8
+$section='ftpusers_accounts';
9
+
10
+if (isset($_GET['regular_ftp']))
11
+{
12
+  if ($_GET['regular_ftp'] == 'yes')
13
+    enable_regular_ftp();
14
+  else
15
+    disable_regular_ftp();
16
+  redirect('accounts'); 
17
+}
18
+
19
+
20
+$ftpuser = empty_ftpuser();
21
+
22
+if (isset($_GET['id']))
23
+  $ftpuser = load_ftpuser($_GET['id']);
24
+
25
+if ($ftpuser['username'])
26
+  output('<h3>Ändern des FTP-Benutzers</h3>');
27
+else
28
+  output('<h3>Neuer FTP-Zugang</h3>');
29
+
30
+$username = substr($ftpuser['username'], strlen($_SESSION['userinfo']['username'])+1);
31
+
32
+$user_home = $_SESSION['userinfo']['homedir'];
33
+$homedir = substr($ftpuser['homedir'], strlen($user_home)+1);
34
+DEBUG($user_home.' / '.$homedir.' / '.$ftpuser['homedir']);
35
+
36
+$checked = ($ftpuser['active'] == 1 ? 'checked="checked" ' : '');
37
+
38
+$servers = server_names();
39
+$available_servers = array_merge(array(my_server_id()), additional_servers());
40
+
41
+$whichserver = '<strong>'.$servers[my_server_id()].'</strong>';
42
+if (count($available_servers) > 1)
43
+{
44
+  $serverselect = array();
45
+  foreach ($available_servers AS $s)
46
+    $serverselect[$s] = $servers[$s];
47
+  $whichserver = html_select('server', $serverselect, $ftpuser['server']);
48
+}
49
+  
50
+
51
+
52
+output(html_form('ftpusers_edit', 'save', 'id='.$ftpuser['id'], '
53
+  <table style="margin-bottom: 1em;">
54
+  <tr>
55
+    <td>Benutzername:</td>
56
+    <td><strong>'.$_SESSION['userinfo']['username'].'-</strong><input type="text" name="ftpusername" id="ftpusername" value="'.$username.'" /></td>
57
+  </tr>
58
+  <tr>
59
+    <td>Verzeichnis:</td>
60
+    <td><strong>'.$user_home.'/</strong><input type="text" id="homedir" name="homedir" value="'.$homedir.'" /></td>
61
+  </tr>
62
+  <tr>
63
+    <td>Passwort:</td>
64
+    <td><input type="password" id="password" name="password" value="" /></td>
65
+  </tr>
66
+  <tr>
67
+    <td>Zugang aktivieren:</td>
68
+    <td><input type="checkbox" id="active" name="active" value="1" '.$checked.'/> auf Server '.$whichserver.'</td>
69
+  </tr>
70
+  </table>
71
+  <p><input type="submit" name="save" value="Speichern" /></p>
72
+  '));
73
+
74
+
75
+
76
+
77
+
78
+
0 79
new file mode 100644
... ...
@@ -0,0 +1,131 @@
1
+<?php
2
+
3
+require_once('inc/base.php');
4
+
5
+function list_ftpusers()
6
+{
7
+  $uid = (int) $_SESSION['userinfo']['uid'];
8
+  $result = db_query("SELECT id, username, homedir, active FROM system.ftpusers WHERE uid=$uid");
9
+  $ftpusers = array();
10
+  while ($u = mysql_fetch_assoc($result)) {
11
+    $ftpusers[] = $u;
12
+  }
13
+  return $ftpusers;
14
+}
15
+
16
+function empty_ftpuser()
17
+{
18
+  $myserver = my_server_id();
19
+  return array("id" => "0", "username" => "", "password" => "", "homedir" => "", "active" => "1", "server" => $myserver);
20
+}
21
+
22
+function load_ftpuser($id)
23
+{
24
+  if ($id == 0)
25
+    return empty_ftpuser();
26
+  $uid = (int) $_SESSION['userinfo']['uid'];
27
+  $id = (int) $id;
28
+  $result = db_query("SELECT id, username, password, homedir, active, server FROM system.ftpusers WHERE uid={$uid} AND id='{$id}' LIMIT 1");
29
+  if (mysql_num_rows($result) != 1)
30
+    system_failure("Fehler beim auslesen des Accounts");
31
+  $account = mysql_fetch_assoc($result);
32
+  DEBUG($account);
33
+  return $account;
34
+}
35
+
36
+
37
+function save_ftpuser($data)
38
+{
39
+  $uid = (int) $_SESSION['userinfo']['uid'];
40
+  $id = (int) $data['id'];
41
+  verify_input_username($data['username']);
42
+  if ($data['username'] == '')
43
+    system_failure('Bitte geben Sie eine Erweiterung für den Benutzernamen an!');
44
+  $username = $_SESSION['userinfo']['username'].'-'.$data['username'];
45
+  $homedir = filter_input_general($data['homedir']);
46
+  if (substr($homedir, 0, 1) == '/')
47
+    $homedir = substr($homedir, 1);
48
+  $homedir = $_SESSION['userinfo']['homedir'].'/'.$homedir;
49
+  if (! in_homedir($homedir))
50
+    system_failure('Pfad scheint nicht in Ihrem Home zu sein oder enthielt ungültige Zeichen.');
51
+  $active = ($data['active'] == 1 ? '1' : '0');
52
+
53
+  $server = NULL;
54
+  if ($data['server'] == my_server_id())
55
+  {
56
+    $server = NULL;
57
+  }
58
+  elseif (in_array($data['server'], additional_servers()))
59
+  {
60
+    $server = (int) $data['server'];
61
+  }
62
+  $server = maybe_null($server);
63
+
64
+  $password_query = '';
65
+  $password_hash = '';
66
+  if ($data['password'] != '')
67
+  {
68
+    $salt = random_string(8);
69
+    $password_hash = crypt($data['password'], "\$1\${$salt}\$");
70
+    $password_query = "password='{$password_hash}', ";
71
+  }
72
+  elseif (! $id)
73
+  {
74
+    system_failure('Wenn Sie einen neuen Zugang anlegen, müssen Sie ein Passwort setzen');
75
+  }
76
+    
77
+  
78
+  if ($id)
79
+    db_query("UPDATE system.ftpusers SET username='{$username}', {$password_query} homedir='{$homedir}', active='{$active}', server={$server} WHERE id={$id} AND uid={$uid} LIMIT 1");
80
+  else
81
+    db_query("INSERT INTO system.ftpusers (username, password, homedir, uid, active, server) VALUES ('{$username}', '{$password_hash}', '{$homedir}', '{$uid}', '{$active}', {$server})");
82
+}
83
+
84
+
85
+function delete_ftpuser($id)
86
+{
87
+  $uid = (int) $_SESSION['userinfo']['uid'];
88
+  $id = (int) $id;
89
+  db_query("DELETE FROM system.ftpusers WHERE id='{$id}' AND uid={$uid} LIMIT 1");
90
+}
91
+
92
+
93
+function get_gid($groupname)
94
+{
95
+  $groupname = mysql_real_escape_string($groupname);
96
+  $result = db_query("SELECT gid FROM system.gruppen WHERE name='{$groupname}' LIMIT 1");
97
+  if (mysql_num_rows($result) != 1)
98
+    system_failure('cannot determine gid of ftpusers group');
99
+  $a = mysql_fetch_assoc($result);
100
+  $gid = (int) $a['gid'];
101
+  if ($gid == 0)
102
+    system_failure('error on determining gid of ftpusers group');
103
+  return $gid;
104
+}
105
+
106
+
107
+function have_regular_ftp()
108
+{
109
+  $gid = get_gid('ftpusers');
110
+  $uid = (int) $_SESSION['userinfo']['uid'];
111
+  $result = db_query("SELECT * FROM system.gruppenzugehoerigkeit WHERE gid='$gid' AND uid='$uid'");
112
+  return (mysql_num_rows($result) > 0);
113
+}
114
+
115
+
116
+function enable_regular_ftp()
117
+{
118
+  $gid = get_gid('ftpusers');
119
+  $uid = (int) $_SESSION['userinfo']['uid'];
120
+  db_query("REPLACE INTO system.gruppenzugehoerigkeit (gid, uid) VALUES ('$gid', '$uid')");
121
+}
122
+
123
+function disable_regular_ftp()
124
+{
125
+  $gid = get_gid('ftpusers');
126
+  $uid = (int) $_SESSION['userinfo']['uid'];
127
+  db_query("DELETE FROM system.gruppenzugehoerigkeit WHERE gid='$gid' AND uid='$uid'");
128
+}
129
+
130
+
131
+
0 132
new file mode 100644
... ...
@@ -0,0 +1,10 @@
1
+<?php
2
+
3
+$role = $_SESSION['role'];
4
+
5
+if ($role & ROLE_SYSTEMUSER)
6
+{
7
+  $menu["ftpusers_accounts"] = array("label" => "FTP-Benutzer", "file" => "accounts", "weight" => 35);
8
+}
9
+
10
+?>
0 11
new file mode 100644
... ...
@@ -0,0 +1,48 @@
1
+<?php
2
+include('ftpusers.php');
3
+
4
+require_role(ROLE_SYSTEMUSER);
5
+
6
+if (isset($_GET['delete']))
7
+{
8
+  $ftpuser = load_ftpuser($_GET['delete']);
9
+
10
+  $sure = user_is_sure();
11
+  if ($sure === NULL)
12
+  {
13
+    are_you_sure("delete={$ftpuser['id']}", "Möchten Sie den FTP-Zugang »{$ftpuser['username']}« wirklich löschen?");
14
+    return;
15
+  }
16
+  elseif ($sure === true)
17
+  {
18
+    delete_ftpuser($ftpuser['id']);
19
+  }
20
+  redirect('accounts');
21
+}
22
+
23
+$ftpuser = empty_ftpuser();
24
+
25
+if (isset($_GET['id']))
26
+{
27
+  check_form_token('ftpusers_edit');
28
+  $ftpuser = load_ftpuser($_GET['id']);
29
+}
30
+
31
+ 
32
+$ftpuser['username'] = $_REQUEST['ftpusername'];
33
+$ftpuser['password'] = $_REQUEST['password'];
34
+$ftpuser['homedir'] = $_REQUEST['homedir'];
35
+if (isset($_REQUEST['active']))
36
+  $ftpuser['active'] = $_REQUEST['active'];
37
+else
38
+  $ftpuser['active'] = 0;
39
+
40
+if (isset($_REQUEST['server']))
41
+  $ftpuser['server'] = $_REQUEST['server'];
42
+
43
+  
44
+save_ftpuser($ftpuser);
45
+  
46
+redirect('accounts');
47
+
48
+