summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-03-09 18:08:15 +0100
committerSimon Rettberg2015-03-09 18:08:15 +0100
commitdcb1d7a5b6c057f34f8cc4aa69275cc4ddb109d3 (patch)
tree5d9230b6ba937a272d4e966c9348238667da22f9
parentFourth Commit (diff)
downloadbwlp-webadmin-dcb1d7a5b6c057f34f8cc4aa69275cc4ddb109d3.tar.gz
bwlp-webadmin-dcb1d7a5b6c057f34f8cc4aa69275cc4ddb109d3.tar.xz
bwlp-webadmin-dcb1d7a5b6c057f34f8cc4aa69275cc4ddb109d3.zip
+AGB, +DeleteUser feature
-rw-r--r--inc/database.inc.php15
-rw-r--r--inc/session.inc.php2
-rw-r--r--inc/user.inc.php52
-rw-r--r--index.php6
-rw-r--r--modules/agb.inc.php11
-rw-r--r--modules/deleteuser.inc.php37
-rw-r--r--modules/logout.inc.php6
-rw-r--r--modules/register.inc.php7
-rw-r--r--style/default.css6
-rw-r--r--templates/agb/_page.html35
-rw-r--r--templates/deleteuser/_page.html23
-rw-r--r--templates/footer.html7
-rw-r--r--templates/login/_page.html3
-rw-r--r--templates/logout/_page.html2
-rw-r--r--templates/main-menu.html10
-rw-r--r--templates/main/_page.html2
-rw-r--r--templates/main/deploy.html6
-rw-r--r--templates/main/logged-in.html5
-rw-r--r--templates/sharemode/remove.html1
19 files changed, 184 insertions, 52 deletions
diff --git a/inc/database.inc.php b/inc/database.inc.php
index efc330f..f76c9e7 100644
--- a/inc/database.inc.php
+++ b/inc/database.inc.php
@@ -14,21 +14,8 @@ class Database
private static $dbh = false;
private static $statements = array();
- /**
- * Get database schema version - used for checking for updates
- * @return int Version of db schema
- */
- public static function getExpectedSchemaVersion()
- {
- return 9;
- }
- public static function needSchemaUpdate()
- {
- return Property::getCurrentSchemaVersion() < self::getExpectedSchemaVersion();
- }
-
- /**
+ /**
* Connect to the DB if not already connected.
*/
private static function init()
diff --git a/inc/session.inc.php b/inc/session.inc.php
index 6718006..891a465 100644
--- a/inc/session.inc.php
+++ b/inc/session.inc.php
@@ -86,7 +86,7 @@ class Session
{
if (self::$sid === false) return;
Database::exec('DELETE FROM websession WHERE sid = :sid', array('sid' => self::$sid));
- @setcookie('sid', '', time() - 8640000, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true);
+ @setcookie('sid', '', time() - CONFIG_SESSION_TIMEOUT, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true);
self::$sid = false;
self::$data = false;
}
diff --git a/inc/user.inc.php b/inc/user.inc.php
index ef29003..e2b7e43 100644
--- a/inc/user.inc.php
+++ b/inc/user.inc.php
@@ -43,7 +43,7 @@ class User
{
if (!isset(self::$user['userid']))
return false;
- return (int)self::$user['userid'];
+ return (int) self::$user['userid'];
}
public static function getMail()
@@ -106,9 +106,8 @@ class User
return false;
if (is_null(self::$organization)) {
self::$organization = Database::queryFirst('SELECT organizationid, name FROM satellite_suffix '
- . ' INNER JOIN satellite USING (organizationid) '
- . ' WHERE suffix = :org LIMIT 1',
- array('org' => self::$user['organization']));
+ . ' INNER JOIN satellite USING (organizationid) '
+ . ' WHERE suffix = :org LIMIT 1', array('org' => self::$user['organization']));
}
return self::$organization;
}
@@ -133,9 +132,12 @@ class User
Session::save();
}
self::$isShib = true;
- if (!isset($_SERVER['sn'])) $_SERVER['sn'] = '';
- if (!isset($_SERVER['givenName'])) $_SERVER['givenName'] = '';
- if (!isset($_SERVER['mail'])) $_SERVER['mail'] = '';
+ if (!isset($_SERVER['sn']))
+ $_SERVER['sn'] = '';
+ if (!isset($_SERVER['givenName']))
+ $_SERVER['givenName'] = '';
+ if (!isset($_SERVER['mail']))
+ $_SERVER['mail'] = '';
$shibId = md5($_SERVER['persistent-id']);
self::$user = array(
'userid' => 0,
@@ -159,6 +161,7 @@ class User
// No match in database, user is not signed up
return true;
}
+ self::$user['userid'] = $user['userid'];
if (Session::getUid() === false) {
Session::setUid($user['userid']);
Session::save();
@@ -182,18 +185,18 @@ class User
Database::exec("INSERT INTO user (shibid, login, organizationid, firstname, lastname, email) "
. " VALUES (:shibid, :shibid, :org, '', '', '') "
. " ON DUPLICATE KEY UPDATE firstname = '', lastname = '', email = ''", array(
- 'shibid' => self::$user['shibid'],
- 'org' => self::getOrganizationId()
+ 'shibid' => self::$user['shibid'],
+ 'org' => self::getOrganizationId()
));
} else {
Database::exec("INSERT INTO user (shibid, login, organizationid, firstname, lastname, email) "
. " VALUES (:shibid, :shibid, :org, :firstname, :lastname, :email) "
. " ON DUPLICATE KEY UPDATE firstname = VALUES(firstname), lastname = VALUES(lastname), email = VALUES(email)", array(
- 'shibid' => self::$user['shibid'],
- 'firstname' => self::$user['firstname'],
- 'lastname' => self::$user['lastname'],
- 'email' => self::$user['email'],
- 'org' => self::getOrganizationId()
+ 'shibid' => self::$user['shibid'],
+ 'firstname' => self::$user['firstname'],
+ 'lastname' => self::$user['lastname'],
+ 'email' => self::$user['email'],
+ 'org' => self::getOrganizationId()
));
}
}
@@ -204,23 +207,23 @@ class User
return false;
$pw = Crypto::hash6($pass);
$ret = Database::exec('UPDATE user SET password = :pass WHERE userid = :user LIMIT 1', array(
- 'pass' => $pw,
- 'user' => self::getId()
+ 'pass' => $pw,
+ 'user' => self::getId()
));
return $ret == 1;
}
-
public static function updateMail($mail)
{
if (!self::isLoggedIn() || self::$isShib || !self::$isInDb)
return false;
$ret = Database::exec('UPDATE user SET email = :mail WHERE userid = :user LIMIT 1', array(
- 'mail' => $mail,
- 'user' => self::getId()
+ 'mail' => $mail,
+ 'user' => self::getId()
));
return $ret == 1 || $mail === self::get('email');
}
+
public static function login($user, $pass)
{
$ret = Database::queryFirst('SELECT userid, password FROM user WHERE login = :user LIMIT 1', array(':user' => $user));
@@ -240,15 +243,22 @@ class User
foreach ($_COOKIE as $name => $value) {
if (substr($name, 0, 5) !== '_shib')
continue;
- @setcookie($name, '', time() - 8640000, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true);
+ @setcookie($name, '', time() - CONFIG_SESSION_TIMEOUT, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true);
}
Session::delete();
if (self::$isShib) {
- Header('Location: ?do=Logout&noredirect=yes');
+ Header('Location: ' . CONFIG_PREFIX . '?do=Logout&noredirect=yes');
} else {
Header('Location: ?do=Main');
}
exit(0);
}
+ public static function delete()
+ {
+ if (!User::isLoggedIn() || !User::isInDatabase())
+ return true;
+ return Database::exec("DELETE FROM user WHERE userid = :userid LIMIT 1", array('userid' => User::getId()), true) > 0;
+ }
+
}
diff --git a/index.php b/index.php
index 8fde6b9..b38753d 100644
--- a/index.php
+++ b/index.php
@@ -113,13 +113,11 @@ Message::renderList();
// Render page. If the module wants to output anything, it will be done here...
Page::render();
+Render::addTemplate('footer');
+
if (defined('CONFIG_DEBUG') && CONFIG_DEBUG) {
Message::addWarning('!! Debug-Modus aktiv !!');
}
-if (defined('CONFIG_FOOTER')) {
- Render::addTemplate('footer', array('text' => CONFIG_FOOTER));
-}
-
// Send page to client.
Render::output();
diff --git a/modules/agb.inc.php b/modules/agb.inc.php
new file mode 100644
index 0000000..09179e3
--- /dev/null
+++ b/modules/agb.inc.php
@@ -0,0 +1,11 @@
+<?php
+
+class Page_Agb extends Page
+{
+
+ public function doRender()
+ {
+ Render::addTemplate('agb/_page');
+ }
+
+} \ No newline at end of file
diff --git a/modules/deleteuser.inc.php b/modules/deleteuser.inc.php
new file mode 100644
index 0000000..5341790
--- /dev/null
+++ b/modules/deleteuser.inc.php
@@ -0,0 +1,37 @@
+<?php
+
+class Page_DeleteUser extends Page
+{
+
+ public function doPreprocess()
+ {
+ if (!User::load()) {
+ Message::addError('Sie sind nicht angemeldet');
+ Util::redirect('?do=Main');
+ }
+ if (!User::isInDatabase()) {
+ Message::addInfo('Sie haben sich nicht für den bwLehrpool-Dienst registriert, daher gibt es auch keine zu löschenden Daten');
+ Util::redirect('?do=Main');
+ }
+ // Dooo it
+ if (Request::post('confirm') === 'on') {
+ Image::deleteOwnedBy(User::getId());
+ if (User::delete()) {
+ Message::addError('All Ihre Daten wurden vom Server gelöscht');
+ } else {
+ Message::addError('Fehler beim Löschen Ihrer Daten');
+ }
+ Util::redirect('?do=Main');
+ }
+ if (Request::post('token') !== false) {
+ Message::addError('Bitte bestätigen Sie, dass Sie ihren Account löschen möchten');
+ Util::redirect();
+ }
+ }
+
+ public function doRender()
+ {
+ Render::addTemplate('deleteuser/_page');
+ }
+
+}
diff --git a/modules/logout.inc.php b/modules/logout.inc.php
index 1f22fb4..f1379d6 100644
--- a/modules/logout.inc.php
+++ b/modules/logout.inc.php
@@ -5,8 +5,10 @@ class Page_Logout extends Page
public function doPreprocess()
{
- if (Request::any('noredirect') === false) {
- User::load();
+ if (!User::load()) {
+ Util::redirect('?do=Main');
+ }
+ if (User::isLocalOnly()) {
User::logout();
}
}
diff --git a/modules/register.inc.php b/modules/register.inc.php
index 3dd3b89..0fec4c7 100644
--- a/modules/register.inc.php
+++ b/modules/register.inc.php
@@ -12,6 +12,13 @@ class Page_Register extends Page
}
if (!User::isShibbolethAuth())
Util::redirect(CONFIG_PREFIX . 'shib/?do=Main');
+
+ if (User::getOrganization() === false) {
+ Message::addError('Ihre Einrichtung {{0}} scheint kein bwIDM zu unterstützen. Bitte wenden Sie sich an den Support.',
+ User::getOrganizationId());
+ Util::redirect('?do=Main');
+ }
+
if (Request::post('agb') === 'on') {
// Put stuff in DB
User::deploy(Request::post('share') !== 'on');
diff --git a/style/default.css b/style/default.css
index 1a68547..05e4c5d 100644
--- a/style/default.css
+++ b/style/default.css
@@ -56,7 +56,7 @@ span.form-control {
margin-bottom: 2em;
}
-.group-group .input-group-addon, .group-group, .form-control {
+.group-group .input-group-addon, .group-group .form-control {
border-radius: 0;
}
.group-group .input-group:first-child .input-group-addon {
@@ -72,6 +72,10 @@ span.form-control {
border-bottom-right-radius: 4px;
}
+.navbar-brand {
+ padding: 2px;
+}
+
.slx-ga {
min-width: 8em;
text-align: left;
diff --git a/templates/agb/_page.html b/templates/agb/_page.html
new file mode 100644
index 0000000..6e2ce1e
--- /dev/null
+++ b/templates/agb/_page.html
@@ -0,0 +1,35 @@
+<h2>Datenschutz</h2>
+<p>
+ Bei der Registrierung für den bwLehrpool-Dienst werden die folgenden
+ Nutzerinformationen von der Heimateinrichtung an den zentralen
+ bwLehrpool-Server des Dienstbetreibers (Universität Freiburg)
+ verschlüsselt übermittelt:
+</p>
+<ul>
+ <li>Vor- und Nachname (<a href="https://www.bwidm.de/attribute/#surname">sn</a>, <a href="https://www.bwidm.de/attribute/#givenName">givenName</a>) (*)</li>
+ <li>E-Mailadresse (<a href="https://www.bwidm.de/attribute/#mail">mail</a>) (*)</li>
+ <li>Eindeutige, anonyme Nutzerkennung (<a href="https://www.bwidm.de/attribute/#IdPPersistentNameIdentifier">IdPPersistentNameIdentifier</a>)</li>
+ <li>Heimateinrichtung (<a href="https://www.bwidm.de/attribute/#eduPersonScopedAffiliation">eduPersonScopedAffiliation</a>)</li>
+ <li>Status des Nutzers (Dozent/Mitarbeiter, Student, ..., <a href="https://www.bwidm.de/attribute/#eduPersonScopedAffiliation">eduPersonScopedAffiliation</a>)</li>
+</ul>
+<p>
+ Die mit (*) gekennzeichneten Daten werden nicht zentral gespeichert
+ sondern nur an Ihre Einrichtung weitergeleitet, es sei denn, Sie nehmen
+ am zentralen VM-Austausch teil.
+ <br>
+ Wenn Sie nicht am bwLehrpool-Dienst
+ teilnehmen, werden keine Daten übertragen. Die Vorschriften des
+ Landesdatenschutzgesetzes (LDSG) und bereichsspezifische
+ Datenschutzvorschriften (insbesondere TKG, TMG) in den jeweils geltenden
+ Fassungen werden beachtet.
+</p>
+
+<h2>Pflichten</h2>
+<p>
+ Jeder Nutzer, der virtuelle Lehrumgebungen hochlädt oder modifiziert, ist dafür
+ verantwortlich, dass alle an der eigenen Institution gültigen Lizenzbestimmungen
+ eingehalten werden. Gleichzeit ist er auch dazu verpflichtet, dass er gemäß der
+ Empfehlungen des bwLehrpool-Teams nach bestem Wissen und Gewissen dafür sorgt,
+ dass keine Schadsoftware (Viren, Trojaner, …) sich in den virtuellen
+ Lehrumgebungen befinden.
+</p> \ No newline at end of file
diff --git a/templates/deleteuser/_page.html b/templates/deleteuser/_page.html
new file mode 100644
index 0000000..af6c7eb
--- /dev/null
+++ b/templates/deleteuser/_page.html
@@ -0,0 +1,23 @@
+<form method="post" action="?do=DeleteUser">
+ <input type="hidden" name="token" value="{{token}}">
+ <div class="form-narrow">
+
+ <p>
+ Bitte bestätigen Sie, dass Sie sich vom bwLehrpool-Dienst abmelden möchten.
+ Dabei werden all Ihre Daten, sowie sämtliche von Ihnen erstellte Virtuelle
+ Maschinen vom Zentral-Server gelöscht.
+ </p>
+
+ <div class="input-group">
+ <span class="input-group-addon">
+ <input name="confirm" type="checkbox" id="confirm">
+ </span>
+ <span class="form-control"><label for="confirm">Ich bin sicher</label></span>
+ </div>
+
+ <div class="pull-right">
+ <button type="submit" class="btn btn-danger">Account löschen</button>
+ </div>
+
+ </div>
+</form>
diff --git a/templates/footer.html b/templates/footer.html
new file mode 100644
index 0000000..5fff1ac
--- /dev/null
+++ b/templates/footer.html
@@ -0,0 +1,7 @@
+<div class="clearfix"></div>
+<hr>
+<div class="pull-right">
+ <a href="?do=Agb">Nutzungsbedingungen und Datenschutz</a>
+ -
+ <a href="//www.hs-offenburg.de/rz/projekte/bwlehrpool-servicedesk/" target="_blank">Support</a>
+</div> \ No newline at end of file
diff --git a/templates/login/_page.html b/templates/login/_page.html
index 36dcb0f..c9beccf 100644
--- a/templates/login/_page.html
+++ b/templates/login/_page.html
@@ -5,3 +5,6 @@
<button class="btn btn-lg btn-primary btn-block" type="submit">Anmelden</button>
<input type="hidden" name="action" value="login">
</form>
+<p>
+ Stattdessen <a href="shib/?do=Main">via bwIDM anmelden</a>.
+</p> \ No newline at end of file
diff --git a/templates/logout/_page.html b/templates/logout/_page.html
index a1fc870..a5327d8 100644
--- a/templates/logout/_page.html
+++ b/templates/logout/_page.html
@@ -3,6 +3,6 @@
Abmelden
</div>
<div class="panel-body">
- Zum abmelden schließen Sie bitte dieses Browser-Fenster.
+ Zum Abmelden schließen Sie bitte Ihren Browser.
</div>
</div>
diff --git a/templates/main-menu.html b/templates/main-menu.html
index 721c0bb..8e78bc2 100644
--- a/templates/main-menu.html
+++ b/templates/main-menu.html
@@ -7,16 +7,18 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="navbar-brand" href="?do=Main">bwLehrstuhl</a>
+ <a class="navbar-brand" href="?do=Main"><img src="/img/bwLehrpool_198x46.png" alt="bwLehrpool"></a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
{{#user}}
<li>
- <span>
+ <form method="post" action="?do=Logout">
+ <input type="hidden" name="token" value="{{token}}">
+ <input type="hidden" name="action" value="logout">
<b>{{user}}</b>
- <a class="btn btn-default btn-xs" href="?do=Logout">Abmelden</a>
- </span>
+ <button class="btn btn-default btn-xs" type="submit">Abmelden</button>
+ </form>
</li>
{{/user}}
{{^user}}
diff --git a/templates/main/_page.html b/templates/main/_page.html
index 521c01a..f316943 100644
--- a/templates/main/_page.html
+++ b/templates/main/_page.html
@@ -1,2 +1,2 @@
-<h1>Willkommen zu bwLehrpool</h1>
+<h1>Willkommen zu bwLehrpool!</h1>
diff --git a/templates/main/deploy.html b/templates/main/deploy.html
index c1b9bbf..f8f20c2 100644
--- a/templates/main/deploy.html
+++ b/templates/main/deploy.html
@@ -11,11 +11,13 @@
<span class="input-group-addon">
<input name="agb" type="checkbox" id="agb">
</span>
- <span class="form-control"><label for="agb">Ich stimme den <a>Nutzungsbedingungen</a> zu</label></span>
+ <span class="form-control"><label for="agb">Ich stimme den <a href="?do=Agb">Nutzungsbedingungen</a> zu</label></span>
</div>
<p>
- Möchten Sie Virtuelle Maschinen mit anderen Hochschulen austauschen? Dazu werden Ihr Name und Ihre e-Mail-Adresse zentral gespeichert und für Dozenten anderer Hochschulen auffindbar gemacht. Sie können diese Einstellung später jederzeit ändern.
+ Möchten Sie Virtuelle Maschinen mit anderen Hochschulen austauschen? Dazu werden
+ Ihr Name und Ihre e-Mail-Adresse zentral gespeichert und für Dozenten anderer
+ Hochschulen auffindbar gemacht. Sie können diese Einstellung später jederzeit ändern.
</p>
<div class="input-group">
diff --git a/templates/main/logged-in.html b/templates/main/logged-in.html
index a02c90e..2c88e76 100644
--- a/templates/main/logged-in.html
+++ b/templates/main/logged-in.html
@@ -8,12 +8,15 @@
<div>
Hier können Sie wählen, ob Sie Virtuelle Maschinen mit Dozenten anderer Hochschulen
austauschen möchten.
+ <br>
+ Wenn Sie sich vom VM-Austausch abmelden, werden Ihre personenbezogenen Daten vom
+ Zentral-Server gelöscht.
</div>
</div>
<div class="linkbox">
<a href="?do=DeleteUser">Vom bwLehrpool-Service abmelden</a>
<div>
- Wenn Sie Ihre Teilname am bwLehrpool-Service zurückziehen möchten, werden Ihre persönlichen
+ Wenn Sie Ihre Teilname am bwLehrpool-Service zurückziehen möchten, werden Ihre personenbezogenen
Daten vom Zentral-Server gelöscht (falls dort vorhanden). Alle von Ihnen öffentlich zugänglich gemachten
Virtuellen Maschinen werden ebenfalls gelöscht. Kopien solcher VMs auf den Satelliten-Servern
anderer Hochschulen können jedoch nicht gelöscht werden. Hier wird lediglich die Verknüpfung
diff --git a/templates/sharemode/remove.html b/templates/sharemode/remove.html
index a007fc6..d91590e 100644
--- a/templates/sharemode/remove.html
+++ b/templates/sharemode/remove.html
@@ -3,6 +3,7 @@
<input type="hidden" name="action" value="remove">
<div class="form-narrow">
<p>
+ Sie sind zur Zeit für den landesweiten VM-Austausch angemeldet.
Wenn Sie Ihre persönlichen Daten vom Zentral-Server entfernen, können
Sie nicht mehr am landesweiten VM-Austausch teilnehmen. Eventuell von
Ihnen freigegebene Virtuelle Maschinen werden auf dem Zentral-Server einem