public function login($user, $pass, $hash = '')
 {
     $origHash = $hash;
     if (strlen($user) > 0 && strlen($pass) > 0) {
         $db = Database::getInstance();
         if ($hash == '') {
             $hash = hash('sha256', $pass);
         }
         $table = Database::getEntityName('user');
         // Datenbank durchsuchen
         $db->query("select * from {$table} where us_benutzername = :login and us_passwort = :pass and us_aktiv = 1", array('login' => $user, 'pass' => $hash));
         if ($row = Database::getInstance()->fetch()) {
             $user = new User();
             $user->loadFromRow($row);
             $this->loginUser($user);
             return true;
         } else {
             // TODO: DTV
             if ($origHash == '') {
                 $hash = hash('sha1', utf8_decode($pass));
                 return $this->login($user, $pass, $hash);
             }
             Events::dispatch(FrameworkEvents::SECURITY_LOGIN_FAILED, new FrameworkEvent());
             return false;
         }
     } else {
         Events::dispatch(FrameworkEvents::SECURITY_LOGIN_FAILED, new FrameworkEvent());
         return false;
     }
 }
 /**
  * @param $user
  * @param $pass
  * @param $token
  * @return array
  */
 private function loginUser($user, $pass, &$token)
 {
     if (Security::login($user, $pass)) {
         $token = md5(Security::getUserId() . date('dmyHis'));
         $user = new User(Security::getUserId());
         $user->us_hash = $token;
         $user->save();
         return true;
     }
     return false;
 }
 public static function resetPassword(User $user, $template = '')
 {
     $user->generateHash();
     if ($template === '') {
         $template = __DIR__ . '/Mails/UserResetPassword.template.html';
     }
     // Mail senden
     $temp = new ControlContainer(null, '');
     $temp->setSkinfile($template);
     $temp->setEntity($user);
     $nachrichttext = $temp->toHtml();
     $empfaenger = $user->us_email;
     return Mailer::getInstance()->sendMail($empfaenger, 'Kennwortanforderung', $nachrichttext, $nachrichttext);
 }
 public function aktivierungslinkSenden()
 {
     $this->user = new User($this->request->id);
     if ($this->user->val('us_aktiv')) {
         FlashMessage::warning('Der Benutzer ist bereits aktiv. Es wurde keine Mail versendet');
         return;
     }
     $activationLink = Routing::appLink('User', 'activateUser', ['hash' => $this->user->generateHash()]);
     UserMailer::activate($this->user, 'Ihr Benutzerkonto', $activationLink);
     FlashMessage::success('Aktivierungslink wurde versendet');
 }
 public function install()
 {
     parent::install();
     $administratoren = new Rolle();
     $administratoren->ro_bezeichnung = 'Administratoren';
     $administratoren->ro_aktiv = true;
     $administratoren->ro_parent = 0;
     $administratoren->ro_neuebenutzer = false;
     $administratoren->save();
     $besucher = new Rolle();
     $besucher->ro_bezeichnung = 'Besucher';
     $besucher->ro_aktiv = true;
     $besucher->ro_parent = 0;
     $besucher->ro_neuebenutzer = true;
     $besucher->save();
     $admin = new User();
     $admin->us_benutzername = 'admin';
     $admin->us_passwort = 'masterkey';
     $admin->us_aktiv = 1;
     $admin->us_vorname = 'Administrator';
     $admin->us_anonymous = false;
     $admin->us_sprache = 1;
     $admin->save();
     $anonymous = new User();
     $anonymous->us_benutzername = mt_rand(1000000, 9999999);
     $anonymous->us_passwort = mt_rand(1000000, 9999999);
     $anonymous->us_aktiv = 1;
     $anonymous->us_vorname = 'Anonymous';
     $anonymous->us_anonymous = true;
     $anonymous->us_sprache = 1;
     $anonymous->save();
     $rolle = new UserRolle();
     $rolle->ur_user = $admin->id;
     $rolle->ur_rolle = $administratoren->id;
     $rolle->save();
     $rolle = new UserRolle();
     $rolle->ur_user = $anonymous->id;
     $rolle->ur_rolle = $besucher->id;
     $rolle->save();
 }
 public function isAuthenticated($request)
 {
     if (Security::isAuthenticated()) {
         return true;
     }
     // Token kann im Header oder in einem Parameter stehen
     $token = 'XYZ';
     if (isset($_SERVER['HTTP_X_TOKEN'])) {
         $token = $_SERVER['HTTP_X_TOKEN'];
     } elseif (isset($request->token)) {
         $token = $request->token;
     }
     $user = User::loadByToken($token);
     if ($user !== null) {
         Security::loginUser($user);
         return true;
     } else {
         return false;
     }
 }
 /**
  * @param $benutzername
  * @return User|null
  */
 public static function loadByBenutzername($benutzername)
 {
     return User::findFirst(['benutzername' => $benutzername]);
 }
 /**
  * Wechselt die Identität des angemeldeten Benutzers
  * ACHTUNG! Besondere Sorgfalt bei der Berechtigungsprüfung von Nöten!
  */
 public function doAnmeldenAls()
 {
     // TODO: Berechtigung prüfen
     // TODO: DTV!
     $darfWechsel = Application::isAdmin() || Security::hatRolle('DTV-GS');
     if (!$darfWechsel) {
         FlashMessage::danger('Für diese Aktion haben Sie keine Berechtigung');
         Application::getCurrentResponse()->redirectToFrontpage();
     }
     $this->user = User::loadByBenutzername($this->request->benutzer);
     if ($this->user != null) {
         Security::loginUser($this->user);
         FlashMessage::success('Sie sind jetzt angemeldet als ' . $this->user);
     } else {
         FlashMessage::danger('Benutzername nicht bekannt');
     }
     Application::getCurrentResponse()->redirectToFrontpage();
 }