From 7a811b07f634d3f2bb8c3478a020fc430cf70f7d Mon Sep 17 00:00:00 2001 From: Marcus Proest Date: Thu, 28 Mar 2019 11:19:27 +0100 Subject: Make URLs, brand names and list of admins configurable --- config.php.example | 15 +++++++++++++++ inc/user.inc.php | 14 +++++--------- index.php | 3 ++- modules/adduser.inc.php | 2 +- modules/agb.inc.php | 17 +++++++++++++---- modules/deleteuser.inc.php | 4 ++-- modules/login.inc.php | 2 +- modules/main.inc.php | 8 +++++--- modules/register.inc.php | 25 ++++++++++++++----------- modules/sharemode.inc.php | 3 ++- shib/api.php | 10 +++++----- templates/agb/_page.html | 24 ++++++++++++------------ templates/deleteuser/_page.html | 2 +- templates/footer.html | 2 +- templates/login/_page.html | 2 +- templates/main-menu.html | 2 +- templates/main/_page.html | 2 +- templates/main/deploy.html | 8 ++++---- templates/main/guest.html | 4 ++-- templates/main/logged-in.html | 8 ++++---- templates/sharemode/deploy.html | 2 +- templates/sharemode/testacc.html | 4 ++-- 22 files changed, 95 insertions(+), 68 deletions(-) diff --git a/config.php.example b/config.php.example index ded60bf..2ea6950 100644 --- a/config.php.example +++ b/config.php.example @@ -5,6 +5,21 @@ define('CONFIG_DEBUG', true); define('CONFIG_PREFIX', '/webif/'); define('CONFIG_SESSION_TIMEOUT', 86400 * 7); define('CONFIG_FORCE_DOMAIN', 'my.server.address.example.com'); +define('CONFIG_ENTITLEMENT', ';http://bwidm.de/entitlement/bwLehrpool;'); +define('CONFIG_SUITE', 'bwLehrpool'); +define('CONFIG_HELPURL', 'www.bwlehrpool.de'); +define('CONFIG_FOOTER_SUPPORT', '//www.hs-offenburg.de/rz/projekte/bwlehrpool-servicedesk/'); +define('CONFIG_MASTERWEBIF', 'https://bwlp-masterserver.ruf.uni-freiburg.de/webif/'); +define('CONFIG_IDM', 'bwIDM'); +define('CONFIG_PROVIDER', 'Universität Freiburg'); + +define('CONFIG_ADMINS', serialize(array('5fb22037697816a70a847d15245c9f88', '94e48d34587ab9963a2013ddc97e1e45', 'fb91f270a95a5b006be916f2b2da305c'))); + +define('CONFIG_IDM_LINK_SN', 'https://www.bwidm.de/attribute/#surname'); +define('CONFIG_IDM_LINK_GIVENNAME', 'https://www.bwidm.de/attribute/#givenName'); +define('CONFIG_IDM_LINK_MAIL', 'https://www.bwidm.de/attribute/#mail'); +define('CONFIG_IDM_LINK_PID', 'https://www.bwidm.de/attribute/#IdPPersistentNameIdentifier'); +define('CONFIG_IDM_LINK_EPSA', 'https://www.bwidm.de/attribute/#eduPersonScopedAffiliation'); // Have a properties file or set variables here manually. // Make sure properties file is not in webroot diff --git a/inc/user.inc.php b/inc/user.inc.php index fe43abe..6e3c06d 100644 --- a/inc/user.inc.php +++ b/inc/user.inc.php @@ -86,12 +86,8 @@ class User public static function isAdmin() { - // TODO: Not hardcoded; per Institution... - return in_array(self::getShibId(), array( - '5fb22037697816a70a847d15245c9f88', - '94e48d34587ab9963a2013ddc97e1e45', - 'fb91f270a95a5b006be916f2b2da305c', - ), true); + // TODO: per Institution... + return in_array(self::getShibId(), unserialize(CONFIG_ADMINS), true); } /** @@ -155,9 +151,9 @@ class User if (empty($_SERVER['persistent-id'])) { if (Session::getUid() === false) { if (!empty($_SERVER['Shib-Session-ID'])) { - Message::addError('Sie haben sich erfolgreich mittels bwIDM authentifiziert,' + Message::addError('Sie haben sich erfolgreich mittels {{0}} authentifiziert,' . ' aber der IdP Ihrer Einrichtung scheint die benötigten Metadaten nicht' - . ' an den bwLehrpool-SP zu übermitteln. Bitte wenden Sie sich an den Support.'); + . ' an den {{1}}-SP zu übermitteln. Bitte wenden Sie sich an den Support.', CONFIG_IDM, CONFIG_SUITE); } Session::delete(); return false; @@ -204,7 +200,7 @@ class User || strpos(";{$_SERVER['affiliation']}", ';staff@') !== false || strpos(";{$_SERVER['affiliation']}", ';faculty@') !== false)) self::$user['role'] = 'TUTOR'; - elseif (isset($_SERVER['entitlement']) && strpos(";{$_SERVER['entitlement']};", ';http://bwidm.de/entitlement/bwLehrpool;') !== false) + elseif (isset($_SERVER['entitlement']) && strpos(";{$_SERVER['entitlement']};", CONFIG_ENTITLEMENT) !== false) self::$user['role'] = 'TUTOR'; else self::$user['role'] = 'STUDENT'; diff --git a/index.php b/index.php index 11ddcc3..d94322e 100644 --- a/index.php +++ b/index.php @@ -113,6 +113,7 @@ Render::addTemplate('main-menu', array( 'url' => urlencode($_SERVER['REQUEST_URI']), 'user' => User::getName(), 'admin' => User::isAdmin(), + 'suite' => CONFIG_SUITE )); Message::renderList(); @@ -120,7 +121,7 @@ Message::renderList(); // Render page. If the module wants to output anything, it will be done here... Page::render(); -Render::addTemplate('footer'); +Render::addTemplate('footer', array('help' => CONFIG_FOOTER_SUPPORT)); if (defined('CONFIG_DEBUG') && CONFIG_DEBUG) { Message::addWarning('!! Debug-Modus aktiv !!'); diff --git a/modules/adduser.inc.php b/modules/adduser.inc.php index 7bb6c1f..c725e27 100644 --- a/modules/adduser.inc.php +++ b/modules/adduser.inc.php @@ -7,7 +7,7 @@ class Page_AddUser extends Page { User::load(); if (!User::isShibbolethAuth()) { - Message::addError('Not bwIDM'); + Message::addError('Not {{0}}', CONFIG_IDM); Util::redirect('?do=Main'); } if (!User::isAdmin()) { diff --git a/modules/agb.inc.php b/modules/agb.inc.php index 09179e3..7d38482 100644 --- a/modules/agb.inc.php +++ b/modules/agb.inc.php @@ -2,10 +2,19 @@ class Page_Agb extends Page { - + public function doRender() { - Render::addTemplate('agb/_page'); + $data = []; + $data['suite'] = CONFIG_SUITE; + $data['provider'] = CONFIG_PROVIDER; + $data['linkidmsn'] = CONFIG_IDM_LINK_SN; + $data['linkidmgivenname'] = CONFIG_IDM_LINK_GIVENNAME; + $data['linkidmmail'] = CONFIG_IDM_LINK_MAIL; + $data['linkidmepsa'] = CONFIG_IDM_LINK_EPSA; + $data['linkidmpid'] = CONFIG_IDM_LINK_PID; + + Render::addTemplate('agb/_page', $data); } - -} \ No newline at end of file + +} diff --git a/modules/deleteuser.inc.php b/modules/deleteuser.inc.php index 5341790..9b7972f 100644 --- a/modules/deleteuser.inc.php +++ b/modules/deleteuser.inc.php @@ -10,7 +10,7 @@ class Page_DeleteUser extends Page 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'); + Message::addInfo('Sie haben sich nicht für den {{0}}-Dienst registriert, daher gibt es auch keine zu löschenden Daten', CONFIG_SUITE); Util::redirect('?do=Main'); } // Dooo it @@ -31,7 +31,7 @@ class Page_DeleteUser extends Page public function doRender() { - Render::addTemplate('deleteuser/_page'); + Render::addTemplate('deleteuser/_page', array('suite' => CONFIG_SUITE)); } } diff --git a/modules/login.inc.php b/modules/login.inc.php index 37b005f..b472113 100644 --- a/modules/login.inc.php +++ b/modules/login.inc.php @@ -18,7 +18,7 @@ class Page_Login extends Page public function doRender() { - Render::addTemplate('login/_page'); + Render::addTemplate('login/_page', array('idm' => CONFIG_IDM)); } } diff --git a/modules/main.inc.php b/modules/main.inc.php index 8873b12..db62096 100644 --- a/modules/main.inc.php +++ b/modules/main.inc.php @@ -10,10 +10,10 @@ class Page_Main extends Page protected function doRender() { - Render::addTemplate('main/_page'); + Render::addTemplate('main/_page', array('suite' => CONFIG_SUITE)); if (!User::isLoggedIn()) { // Guest - Render::addTemplate('main/guest', array('prefix' => CONFIG_PREFIX)); + Render::addTemplate('main/guest', array('prefix' => CONFIG_PREFIX, 'suite' => CONFIG_SUITE, 'idm' => CONFIG_IDM)); return; } // Logged in user -- @@ -55,7 +55,7 @@ class Page_Main extends Page private function renderShibbolethRegistered() { - Render::addTemplate('main/logged-in'); + Render::addTemplate('main/logged-in', array('suite' => CONFIG_SUITE)); } private function renderShibbolethUnregistered() @@ -78,6 +78,8 @@ class Page_Main extends Page } } } + $data['suite'] = CONFIG_SUITE; + $data['idm'] = CONFIG_IDM; Render::addTemplate('main/deploy', $data); } diff --git a/modules/register.inc.php b/modules/register.inc.php index c5c5cae..19ccfcf 100644 --- a/modules/register.inc.php +++ b/modules/register.inc.php @@ -7,7 +7,7 @@ class Page_Register extends Page { User::load(); if (User::isInDatabase()) { - Message::addWarning('Sie haben sich bereits für bwLehrpool registriert'); + Message::addWarning('Sie haben sich bereits für {{0}} registriert', CONFIG_SUITE); Util::redirect('?do=Main'); } if (!User::isShibbolethAuth()) @@ -16,20 +16,21 @@ class Page_Register extends Page if (!User::isTutor()) { return; } - + if (User::getOrganization() === false) { - Message::addError('Ihre Einrichtung {{0}} scheint kein bwIDM zu unterstützen. Bitte wenden Sie sich an den Support.', - User::getOrganizationId()); + Message::addError('Ihre Einrichtung {{0}} scheint kein {{1}} zu unterstützen. Bitte wenden Sie sich an den Support.', + User::getOrganizationId(), CONFIG_IDM); Util::redirect('?do=Main'); } - + if (Request::post('testlogin')) { // Check if one of firstname, lastname or email matches - $user = Database::queryFirst('SELECT firstname, lastname, email, organizationid FROM user WHERE userid = :login LIMIT 1', array('login' => Request::post('testlogin'))); + $user = Database::queryFirst('SELECT firstname, lastname, email, organizationid FROM user WHERE userid = :login LIMIT 1', + array('login' => Request::post('testlogin'))); if ($user === false || User::getOrganizationId() !== $user['organizationid']) { // Invalid Login Message::addError('Test-Account {{0}} unbekannt. ' - . ' Bitte wenden Sie sich an den bwLehrpool-Support, wenn dieser Test-Account Ihnen gehört.', Request::post('testlogin')); + . ' Bitte wenden Sie sich an den {{1}}-Support, wenn dieser Test-Account Ihnen gehört.', Request::post('testlogin'), CONFIG_SUITE); Util::redirect('?do=Main'); } if (User::getLastName() !== $user['lastname'] @@ -37,20 +38,22 @@ class Page_Register extends Page && User::getMail() !== $user['email']) { // No match by personal information Message::addError('Ihre Metadaten stimmen nicht mit dem Test-Account {{0}} überein. ' - . ' Bitte wenden Sie sich an den bwLehrpool-Support, wenn dieser Test-Account Ihnen gehört.', Request::post('testlogin')); + . ' Bitte wenden Sie sich an den {{1}}-Support, wenn dieser Test-Account Ihnen gehört.', Request::post('testlogin'), CONFIG_SUITE); Util::redirect('?do=Main'); } // Check if anonymous is requested, but user shared VMs with his testacc if (Image::getImageCount(Request::post('testlogin')) > 0) { - Message::addError('Sie haben mit Ihrem Test-Account Virtuelle Maschinen auf den Zentral-Server hochgeladen und können sich daher nicht ohne Teilnahme am landesweiten VM-Austausch registrieren.'); + Message::addError('Sie haben mit Ihrem Test-Account Virtuelle Maschinen auf den Zentral-Server hochgeladen und können" + . " sich daher nicht ohne Teilnahme am landesweiten VM-Austausch registrieren.'); Util::redirect('?do=Main'); } } - + if (Request::post('agb') === 'on') { // Check if everything's there if (!User::isTutor()) { - Message::addError('Sie sind weder Mitglied einer Gruppe, die als Zugriffsberechtigt eingestuft wird, noch tragen Sie das bwLehrpool-Entitlement. Bitte kontaktieren Sie Ihren lokalen bwLehrpool-Support.'); + Message::addError('Sie sind weder Mitglied einer Gruppe, die als Zugriffsberechtigt eingestuft wird, noch tragen Sie das {{0}}-Entitlement." + . " Bitte kontaktieren Sie Ihren lokalen {{0}}-Support.', CONFIG_SUITE); } elseif (empty(User::getMail())) { Message::addError('Ihr Identity Provider hat keine E-Mail-Adresse zu Ihrem Account geliefert. Registrierung nicht möglich.'); } elseif (!User::hasFullName()) { diff --git a/modules/sharemode.inc.php b/modules/sharemode.inc.php index ed7c4a4..22e1683 100644 --- a/modules/sharemode.inc.php +++ b/modules/sharemode.inc.php @@ -32,13 +32,14 @@ class Page_ShareMode extends Page { if (User::isLocalOnly()) { // Local anyways, no way to de-provision user data - Render::addTemplate('sharemode/testacc'); + Render::addTemplate('sharemode/testacc', array('suite' => CONFIG_SUITE)); } elseif (User::isShibbolethAuth()) { // Shibboleth user if (User::isAnonymous()) { // Did not deploy user data to DB, so show deploy form $data = User::getData(); $data['organization'] = User::getOrganizationName(); + $data['suite'] = CONFIG_SUITE; Render::addTemplate('sharemode/deploy', $data); } else { // User is known in DB, show delete form diff --git a/shib/api.php b/shib/api.php index 2098765..4bfee68 100644 --- a/shib/api.php +++ b/shib/api.php @@ -36,7 +36,7 @@ if (empty($_SERVER['persistent-id'])) { . " INNER JOIN organization USING (organizationid) " . " WHERE user.shibid = :shibid LIMIT 1", array('shibid' => $shibId)); // Figure out role - if (strpos(";{$_SERVER['entitlement']};", ';http://bwidm.de/entitlement/bwLehrpool;') !== false) { + if (strpos(";{$_SERVER['entitlement']};", CONFIG_ENTITLEMENT) !== false) { $role = 'TUTOR'; } else if (strpos(";{$_SERVER['affiliation']};", ';employee@') !== false || strpos(";{$_SERVER['affiliation']};", ';staff@') !== false @@ -48,11 +48,11 @@ if (empty($_SERVER['persistent-id'])) { // NEW: Ignore students for now $response = array( 'status' => 'error', - 'error' => "Sie wurden als Student eingestuft und können sich daher nicht an der bwLehrpool-Suite anmelden." + 'error' => "Sie wurden als Student eingestuft und können sich daher nicht an der " . CONFIG_SUITE . "-Suite anmelden." . "\nFalls Ihr Nutzerkonto kein Studentenkonto ist stellen Sie sicher, dass Ihr IdP für berechtigte" - . "\nAccounts entweder das bwLehrpool-Entitlement ausliefert, oder das Attribut 'affiliation'" + . "\nAccounts entweder das " . CONFIG_SUITE . "-Entitlement ausliefert, oder das Attribut 'affiliation'" . "\nausgeliefert wird, und es entweder 'employee@..', 'staff@..' oder 'faculty@..' enthält." - . "\n\nMehr Informationen finden Sie unter www.bwlehrpool.de" + . "\n\nMehr Informationen finden Sie unter " . CONFIG_HELPURL ); Header('Content-Type: text/plain; charset=utf-8'); die(json_encode($response, JSON_PRETTY_PRINT)); @@ -106,7 +106,7 @@ if (empty($_SERVER['persistent-id'])) { $response['status'] = 'unregistered'; } $response['id'] = $shibId; - $response['url'] = 'https://bwlp-masterserver.ruf.uni-freiburg.de/webif/'; + $response['url'] = CONFIG_MASTERWEBIF; @file_put_contents('/tmp/shib-unreg-' . time() . '-' . $_SERVER['REMOTE_ADDR'] . '.txt', print_r($_SERVER, true)); } else { // Found, see if we got personal information, either temporarily through metadata, or from database diff --git a/templates/agb/_page.html b/templates/agb/_page.html index 6e2ce1e..6ce581e 100644 --- a/templates/agb/_page.html +++ b/templates/agb/_page.html @@ -1,23 +1,23 @@

Datenschutz

- Bei der Registrierung für den bwLehrpool-Dienst werden die folgenden + Bei der Registrierung für den {{suite}}-Dienst werden die folgenden Nutzerinformationen von der Heimateinrichtung an den zentralen - bwLehrpool-Server des Dienstbetreibers (Universität Freiburg) + {{suite}}-Server des Dienstbetreibers ({{provider}}) verschlüsselt übermittelt:

Die mit (*) gekennzeichneten Daten werden nicht zentral gespeichert sondern nur an Ihre Einrichtung weitergeleitet, es sei denn, Sie nehmen am zentralen VM-Austausch teil.
- Wenn Sie nicht am bwLehrpool-Dienst + Wenn Sie nicht am {{suite}}-Dienst teilnehmen, werden keine Daten übertragen. Die Vorschriften des Landesdatenschutzgesetzes (LDSG) und bereichsspezifische Datenschutzvorschriften (insbesondere TKG, TMG) in den jeweils geltenden @@ -28,8 +28,8 @@

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. + eingehalten werden. Gleichzeitig ist er auch dazu verpflichtet, dass er gemäß der + Empfehlungen des {{suite}}-Teams nach bestem Wissen und Gewissen dafür sorgt, + dass sich keine Schadsoftware (Viren, Trojaner, …) in den virtuellen + Lehrumgebungen befindet.

\ No newline at end of file diff --git a/templates/deleteuser/_page.html b/templates/deleteuser/_page.html index af6c7eb..a6cae77 100644 --- a/templates/deleteuser/_page.html +++ b/templates/deleteuser/_page.html @@ -3,7 +3,7 @@

- Bitte bestätigen Sie, dass Sie sich vom bwLehrpool-Dienst abmelden möchten. + Bitte bestätigen Sie, dass Sie sich vom {{suite}}-Dienst abmelden möchten. Dabei werden all Ihre Daten, sowie sämtliche von Ihnen erstellte Virtuelle Maschinen vom Zentral-Server gelöscht.

diff --git a/templates/footer.html b/templates/footer.html index 5fff1ac..5f8da0e 100644 --- a/templates/footer.html +++ b/templates/footer.html @@ -3,5 +3,5 @@
Nutzungsbedingungen und Datenschutz - - Support + Support
\ No newline at end of file diff --git a/templates/login/_page.html b/templates/login/_page.html index c9beccf..d572d5a 100644 --- a/templates/login/_page.html +++ b/templates/login/_page.html @@ -6,5 +6,5 @@

- Stattdessen via bwIDM anmelden. + Stattdessen via {{idm}} anmelden.

\ No newline at end of file diff --git a/templates/main-menu.html b/templates/main-menu.html index 2cfe389..e4583cc 100644 --- a/templates/main-menu.html +++ b/templates/main-menu.html @@ -7,7 +7,7 @@ - bwLehrpool + {{suite}}