summaryrefslogtreecommitdiffstats
path: root/modules/adduser.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/adduser.inc.php')
-rw-r--r--modules/adduser.inc.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/modules/adduser.inc.php b/modules/adduser.inc.php
new file mode 100644
index 0000000..fc0dfa7
--- /dev/null
+++ b/modules/adduser.inc.php
@@ -0,0 +1,81 @@
+<?php
+
+class Page_AddUser extends Page
+{
+
+ protected function doPreprocess()
+ {
+ User::load();
+ if (!User::isShibbolethAuth()) {
+ Message::addError('Not bwIDM');
+ Util::redirect('?do=Main');
+ }
+ if (!User::isAdmin()) {
+ Message::addError('Not admin!');
+ Util::redirect('?do=Main');
+ }
+ // Add?
+ if (Request::post('action') === 'add') {
+ $organizationid = Request::post('organization', '');
+ $firstname = Request::post('firstname', '');
+ $lastname = Request::post('lastname', '');
+ $password = Request::post('password', '');
+ $login = Request::post('login', '');
+ if (empty($organizationid)) {
+ Message::addError('Keine Einrichtung gewählt.');
+ } else if (empty($firstname) || empty($lastname)
+ || empty($login) || empty($password)) {
+ Message:addError('Ein Feld wurde nicht ausgefüllt.');
+ } else {
+ // Validate login
+ if (preg_match('/^[a-z0-9_\.\-]+@([a-z0-9_\.\-]+)$/i', $login, $out)) {
+ // Complete login
+ $suffix = $out[1];
+ } else if (strpos($login, '@') !== false) {
+ // Has @ but invalid format
+ Message::addError('Ungültige Syntax für Login');
+ $suffix = '<invalid>';
+ } else {
+ // No @, try add orgid
+ $suffix = $organizationid;
+ $login .= "@$suffix";
+ }
+ $ok = Database::queryFirst('SELECT organizationid FROM satellite_suffix WHERE organizationid = :o AND suffix = :s LIMIT 1', array(
+ 'o' => $organizationid,
+ 's' => $suffix
+ ));
+ if ($ok === false) {
+ Message::addError('Login-Suffix @{{0}} ist ungültig.', $suffix);
+ } else {
+ Database::exec('INSERT INTO user (login, password, organizationid, firstname, lastname, email) '
+ . ' VALUES (:login, :password, :organization, :firstname, :lastname, :email)', array(
+ 'login' => $login,
+ 'password' => Crypto::hash6($password),
+ 'organization' => $organizationid,
+ 'firstname' => $firstname,
+ 'lastname' => $lastname,
+ 'email' => Request::post('email')
+ ));
+ Message::addSuccess('Benutzer {{0}} angelegt', $login);
+ }
+ }
+ Util::redirect('?do=Main');
+ }
+ }
+
+ protected function doRender()
+ {
+ // Show mask
+ $res = Database::simpleQuery('SELECT organizationid, name FROM satellite ORDER BY name ASC');
+ $orgs = array();
+ $orgs[] = array(
+ 'organizationid' => '',
+ 'name' => ' -- Bitte wählen -- '
+ );
+ while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
+ $orgs[] = $row;
+ }
+ Render::addTemplate('adduser/_page', array('orgs' => $orgs));
+ }
+
+} \ No newline at end of file