diff options
-rw-r--r-- | inc/database.inc.php | 15 | ||||
-rw-r--r-- | inc/session.inc.php | 2 | ||||
-rw-r--r-- | inc/user.inc.php | 52 | ||||
-rw-r--r-- | index.php | 6 | ||||
-rw-r--r-- | modules/agb.inc.php | 11 | ||||
-rw-r--r-- | modules/deleteuser.inc.php | 37 | ||||
-rw-r--r-- | modules/logout.inc.php | 6 | ||||
-rw-r--r-- | modules/register.inc.php | 7 | ||||
-rw-r--r-- | style/default.css | 6 | ||||
-rw-r--r-- | templates/agb/_page.html | 35 | ||||
-rw-r--r-- | templates/deleteuser/_page.html | 23 | ||||
-rw-r--r-- | templates/footer.html | 7 | ||||
-rw-r--r-- | templates/login/_page.html | 3 | ||||
-rw-r--r-- | templates/logout/_page.html | 2 | ||||
-rw-r--r-- | templates/main-menu.html | 10 | ||||
-rw-r--r-- | templates/main/_page.html | 2 | ||||
-rw-r--r-- | templates/main/deploy.html | 6 | ||||
-rw-r--r-- | templates/main/logged-in.html | 5 | ||||
-rw-r--r-- | templates/sharemode/remove.html | 1 |
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; + } + } @@ -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 |