addText('server', 'Server:') ->setRequired('Prosím vyplňte server.') ->setValue(@$_COOKIE['server']); $form->addText('username', 'Uživatelské jméno:') ->setRequired('Prosím vyplňte své uživatelské jméno.') ->setValue(@$_COOKIE['user']); $form->addPassword('password', 'Heslo:'); // setRequired nepoužívat!! kvůli soft logoutu!!! //->setRequired('Prosím vyplňte své heslo.'); $form->addSubmit('send', 'Přihlásit'); //$form->addProtection(); //ochrana pomocí TOKENu $form->onSuccess[] = $this->signInFormSucceeded(...); return $form; } private function signInFormSucceeded(Form $form, LoginFormData $data): void //moje vlastní třída LoginFormData { try { // kontrola serverů: if (!Funkce::is_cloud_ip($data->server)) { error_log("QR Login - neplatny server.", 0); //log je ve var/log/apache2/error.log (fail2ban) $form->addError('Neznámý server.'); return; } // sestav Credentials: $credentials = new ServerCredentials($data->server); $autentifikator = new MujAutentifikator($credentials, $this->session); // naše vlastní autentifikace! $this->getUser()->setAuthenticator($autentifikator); // musíme ji registrovat! $blacklist_check = $this->blackList->blacklist_check($data->server); bdump($blacklist_check); if (is_null($blacklist_check)) { //nic, jako by prošel } else { // $blacklist_check->vysledek Returns 1, pokud není blacklistu. Když se tam nachází, tak 0. // $blacklist_check->expire_date Kdy končí. // $blacklist_check->expired_text Co jim zahlásíš. if ($blacklist_check->vysledek == 0) { setcookie("salt", "", time() - 3600); // smažeme v tomto případě kukínu ... if (empty($blacklist_check->expired_text)) throw new BlackListException("Licence pro použití PečAppky vypršela, nebo nám dlužíte peníze."); else throw new BlackListException($blacklist_check->expired_text); // custom text z blacklist DB } } // uložené heslo? if (empty($data->password) and isset($_COOKIE['salt'])) { $password = Funkce::decrypt_password($_COOKIE['salt']); } else { $password = $data->password; } // validace přihlášení je v třídě MujAutentifikator->authenticate(...) $this->getUser()->login($data->username, $password); // kam potom? $this->restoreRequest($this->backlink); // vrátit se na požadovanou stránku $this->redirect(':Ctecka:'); // jinak přejdi sem } catch (Nette\Database\ConnectionException) { error_log("QR Login - neplatne prihlaseni.", 0); //log je ve var/log/apache2/error.log (fail2ban) $form->addError('Neplatné přihlášení.'); } catch (Nette\Security\AuthenticationException $e) { error_log("QR Login - neplatne prihlaseni.", 0); //log je ve var/log/apache2/error.log (fail2ban) $form->addError($e->getMessage()); } catch (BlackListException $e2) { $form->addError($e2->getMessage()); } } public function renderIn(): void { // ukázat či neukázat pole pro heslo? $this->template->salt = isset($_COOKIE['salt']); } /** * Normalní logout. * @return void */ public function actionOut(): void { $this->getUser()->logout(); $this->flashMessage('Odhlášení bylo úspěšné.'); $this->redirect('Sign:in'); } /** * Tvrdý logout. * @return void */ public function actionHardOut(): void { $this->getUser()->logout(); setcookie("salt", "", time() - 3600); // smažeme v tomto případě kukínu ... // smažeme vybranou DB ze session: if ($this->session->hasSection(Konstanty::sectionDatabase)) { $section = $this->session->getSection(Konstanty::sectionDatabase); $section->remove(Konstanty::sessionCurrentDatabase); } $this->flashMessage('Odhlášení bylo úspěšné.'); $this->redirect('Sign:in'); } }