aboutsummaryrefslogtreecommitdiff
path: root/lib/phplib/Seminar_Register_Auth.class.php
diff options
context:
space:
mode:
authorPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
committerPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
commit4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch)
tree5c07151ae61276d334e88f6309c30d439a85c12e /lib/phplib/Seminar_Register_Auth.class.php
parentda0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff)
parent97a188592c679890a25c37ab78463add76a52ff7 (diff)
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/phplib/Seminar_Register_Auth.class.php')
-rw-r--r--lib/phplib/Seminar_Register_Auth.class.php242
1 files changed, 0 insertions, 242 deletions
diff --git a/lib/phplib/Seminar_Register_Auth.class.php b/lib/phplib/Seminar_Register_Auth.class.php
deleted file mode 100644
index f2a272e..0000000
--- a/lib/phplib/Seminar_Register_Auth.class.php
+++ /dev/null
@@ -1,242 +0,0 @@
-<?php
-
-/**
- * Seminar_Register_Auth.class.php
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * @author André Noack <noack@data-quest.de>
- * @copyright 2000 Stud.IP Core-Group
- * @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
- */
-class Seminar_Register_Auth extends Seminar_Auth
-{
- public function start()
- {
- global $sess;
-
- switch ($this->getState()) {
- # No valid auth info or auth is expired
- case 1:
-
- if ($this->nobody) {
- # Authenticate as nobody
- $this->auth['uid'] = 'nobody';
- return true;
- } else {
- # Show the registration form
- $this->auth_registerform();
- $this->auth['uid'] = 'form';
- exit;
- }
- # Login in progress, check results and act accordingly
- case 3:
- $uid = $this->auth_doregister();
- if ($uid) {
- $this->auth['uid'] = $uid;
- $GLOBALS['user'] = new Seminar_User($this->auth['uid']);
- return true;
- } else {
- $this->auth_registerform();
- $this->auth['uid'] = 'form';
- $sess->freeze();
- exit;
- }
- }
-
- return parent::start();
- }
-
- public function auth_registerform()
- {
- $this->check_environment();
-
- // load the default set of plugins
- PluginEngine::loadPlugins();
-
- if (!$_COOKIE[get_class($GLOBALS['sess'])]) {
- $register_template = $GLOBALS['template_factory']->open('nocookies');
- } else {
- $register_template = $GLOBALS['template_factory']->open('register/form');
- $register_template->validator = new email_validation_class();
- $register_template->error_msg = $this->error_msg;
- $register_template->username = Request::get('username');
- $register_template->Vorname = Request::get('Vorname');
- $register_template->Nachname = Request::get('Nachname');
- $register_template->Email = Request::get('Email');
- $register_template->title_front = Request::get('title_front');
- $register_template->title_rear = Request::get('title_rear');
- $register_template->geschlecht = Request::int('geschlecht', 0);
- }
- PageLayout::setHelpKeyword('Basis.AnmeldungRegistrierung');
- PageLayout::setTitle(_('Registrierung'));
-
- echo $register_template->render(
- [],
- $GLOBALS['template_factory']->open('layouts/base.php')
- );
- }
-
- /**
- * @return bool|string
- */
- public function auth_doregister()
- {
- $this->check_environment();
-
- $this->error_msg = '';
-
- $this->auth['uname'] = Request::username('username'); // This provides access for "crcregister.ihtml"
-
- $validator = new email_validation_class(); // Klasse zum Ueberpruefen der Eingaben
- $validator->timeout = 10; // Wie lange warten wir auf eine Antwort des Mailservers?
-
- if (!Seminar_Session::check_ticket(Request::option('login_ticket'))) {
- return false;
- }
-
- $username = trim(Request::get('username'));
- $Vorname = trim(Request::get('Vorname'));
- $Nachname = trim(Request::get('Nachname'));
-
- // accept only registered domains if set
- if (Config::get()->EMAIL_DOMAIN_RESTRICTION) {
- $Email = trim(Request::get('Email')) . '@' . trim(Request::get('emaildomain'));
- } else {
- $Email = trim(Request::get('Email'));
- }
-
- if (!$validator->ValidateUsername($username)) {
- $this->error_msg = $this->error_msg . _('Der gewählte Benutzername ist zu kurz!') . '<br>';
- return false;
- } // username syntaktisch falsch oder zu kurz
- // auf doppelte Vergabe wird weiter unten getestet.
-
- if (!$validator->ValidatePassword(Request::get('password'))) {
- $this->error_msg = $this->error_msg . _('Das Passwort ist zu kurz, zu lang oder enthält nicht erlaubte Zeichen!') . '<br>';
- return false;
- }
-
- if (!$validator->ValidateName($Vorname)) {
- $this->error_msg = $this->error_msg . _('Der Vorname fehlt oder ist unsinnig!') . '<br>';
- return false;
- } // Vorname nicht korrekt oder fehlend
- if (!$validator->ValidateName($Nachname)) {
- $this->error_msg = $this->error_msg . _('Der Nachname fehlt oder ist unsinnig!') . '<br>';
- return false; // Nachname nicht korrekt oder fehlend
- }
- if (!$validator->ValidateEmailAddress($Email)) {
- $this->error_msg = $this->error_msg . _('Die E-Mail-Adresse fehlt oder ist falsch geschrieben!') . '<br>';
- return false;
- } // E-Mail syntaktisch nicht korrekt oder fehlend
-
- $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
- $Zeit = date('H:i:s, d.m.Y');
-
- if (!$validator->ValidateEmailHost($Email)) { // Mailserver nicht erreichbar, ablehnen
- $this->error_msg = $this->error_msg . _('Der Mailserver ist nicht erreichbar, bitte überprüfen Sie, ob Sie E-Mails mit der angegebenen Adresse verschicken und empfangen können!') . '<br>';
- return false;
- } else { // Server ereichbar
- if (!$validator->ValidateEmailBox($Email)) { // aber user unbekannt. Mail an abuse!
- StudipMail::sendAbuseMessage('Register', "Emailbox unbekannt\n\nUser: $username\nEmail: $Email\n\nIP: $REMOTE_ADDR\nZeit: $Zeit\n");
- $this->error_msg = $this->error_msg . _('Die angegebene E-Mail-Adresse ist nicht erreichbar, bitte überprüfen Sie Ihre Angaben!') . '<br>';
- return false;
- } else {
- ; // Alles paletti, jetzt kommen die Checks gegen die Datenbank...
- }
- }
-
- $check_uname = StudipAuthAbstract::CheckUsername($username);
-
- if ($check_uname['found']) {
- $this->error_msg = $this->error_msg . _('Der gewählte Benutzername ist bereits vorhanden!') . '<br>';
- return false; // username schon vorhanden
- }
-
- if (User::countBySQL('Email = ?', [$Email])) {
- $this->error_msg = $this->error_msg . _('Die angegebene E-Mail-Adresse wird bereits von einem anderen Benutzer verwendet. Sie müssen eine andere E-Mail-Adresse angeben!') . '<br>';
- return false; // Email schon vorhanden
- }
-
- // alle Checks ok, Benutzer registrieren...
- $hasher = UserManagement::getPwdHasher();
- $new_user = new User();
- $new_user->username = $username;
- $new_user->perms = 'user';
- $new_user->password = $hasher->HashPassword(Request::get('password'));
- $new_user->vorname = $Vorname;
- $new_user->nachname = $Nachname;
- $new_user->email = $Email;
- $new_user->geschlecht = Request::int('geschlecht');
- $new_user->title_front = trim(Request::get('title_front', Request::get('title_front_chooser')));
- $new_user->title_rear = trim(Request::get('title_rear', Request::get('title_rear_chooser')));
- $new_user->auth_plugin = 'standard';
- $new_user->store();
-
- if (!$new_user->user_id) {
- return false;
- }
-
- self::sendValidationMail($new_user);
-
- $this->auth['perm'] = $new_user->perms;
- $this->auth['uname'] = $new_user->username;
- $this->auth['auth_plugin'] = $new_user->auth_plugin;
-
- return $new_user->user_id;
- }
-
- /**
- * Send a validation mail to the passed user
- *
- * @param User $user a user-object or id of the user
- * to resend the validation mail for
- */
- public static function sendValidationMail($user){
- // if no user-object is given interpret it as a user-id
- if (is_string($user)) {
- $user = new User($user);
- }
-
- // template-variables for the include partial
- $Zeit = date('H:i:s, d.m.Y', $user->mkdate);
- $username = $user->username;
- $Vorname = $user->vorname;
- $Nachname = $user->nachname;
- $Email = $user->email;
-
- // (re-)send the confirmation mail
- $to = $user->email;
- $token = Token::create(7 * 24 * 60 * 60, $user->id); // Link is valid for 1 week
- $url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'email_validation.php?secret=' . $token;
- $mail = new StudipMail();
- $abuse = StudipMail::getAbuseEmail();
-
- $lang_path = getUserLanguagePath($user->id);
-
- // include language-specific subject and mailbody
- // TODO: This should be refactored so that the included file returns an array
- include "locale/{$lang_path}/LC_MAILS/register_mail.inc.php"; // Defines $subject and $mailbody
-
- // send the mail
- $mail->setSubject($subject ?? '')
- ->addRecipient($to)
- ->setBodyText($mailbody ?? '')
- ->send();
- }
-
- /**
- * Validates a given hash for a given user id.
- * @param string $secret Secret to validate
- * @param string $user_id User id
- * @return bool
- */
- public static function validateSecret($secret, $user_id)
- {
- return Token::isValid($secret, $user_id);
- }
-}