load->model('LoginModel', '', TRUE); } public function index() { if (isset($_POST['logout']) && $_POST['logout'] == 'Logout') { $_POST['logout'] = ''; redirect("/logout"); } if (isset($_SESSION['user'])) { redirect(base_url('user/' . $_SESSION['user']['username'])); } if (isset($_POST['loginname']) && !empty($_POST['loginname']) && isset($_POST['loginPassword']) && !empty($_POST['loginPassword'])) { $_SESSION['loggedOut'] = false; $rememberMe = isset($_POST['rememberMe']) ? $_POST['rememberMe'] : 'off'; $this->LoginModel->login($_POST['loginname'], $_POST['loginPassword'], $rememberMe); isset($_GET['r']) && !empty($_GET['r']) ? redirect(base64_decode($_GET['r'])) : redirect(base_url('login')); } $notice = isset($_SESSION['notice']) ? $_SESSION['notice'] : ''; $_SESSION['notice'] = ''; $this->load->view('header', ['active' => 'login', 'title' => 'Login', 'additionalStyles' => ['login.css']]); $this->load->view('login', ['notice' => $notice]); $this->load->view('footer', ['additionalScripts' => ['login.js']]); } public function register() { $notice = ['state' => false, 'errors' => ['username', 'email', 'password', 'passwordRepeat'], 'messages' => [], 'endMessage' => lang('register_error_occured')]; $username = $this->input->post('username'); $email = $this->input->post('email'); $password = $this->input->post('password'); $passwordRepeat = $this->input->post('passwordRepeat'); // Username if (isset($username)) { if (!preg_match('/[^A-Za-z0-9._]/', $username)) { if ($this->LoginModel->isAvailable($username) == "") { if (strlen($username) >= 4) { unset($notice['errors'][array_search('username', $notice['errors'])]); } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_username_short'), 'body' => lang('register_error_username_short_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_username_occupied'), 'body' => lang('register_error_username_occupied_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_username_characters'), 'body' => lang('register_error_username_characters_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_username_missing'), 'body' => lang('register_error_username_missing_body')]; } // Email if (isset($email)) { $isRegistered = $this->LoginModel->isRegistered($email); if ($isRegistered == "") { $trashMail = $this->LoginModel->isTrashMail($email); if (!$trashMail) { unset($notice['errors'][array_search('email', $notice['errors'])]); } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_trashmail'), 'body' => lang('register_error_trashmail')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_email_occupied'), 'body' => lang('register_error_email_occupied')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_email_missing'), 'body' => lang('register_error_email_missing')]; } // Password if (isset($password)) { if (isset($passwordRepeat)) { if ($password == $passwordRepeat) { if ($this->LoginModel->checkPassword($password)) { unset($notice['errors'][array_search('password', $notice['errors'])]); unset($notice['errors'][array_search('passwordRepeat', $notice['errors'])]); } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_pw_unsecure'), 'body' => lang('register_error_unsecure_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_pw_different'), 'body' => lang('register_error_pw_different_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_pw_second_missing'), 'body' => lang('register_error_pw_second_missing_body')]; } } else { $notice['messages'][] = ['type' => 'danger', 'headline' => lang('register_error_pw_missing'), 'body' => lang('register_error_pw_missing_body')]; } // Register if (empty($notice['errors'])) { $this->LoginModel->register($username, $email, $password, 0); // TODO: Implement login method $notice['messages'][] = ['type' => 'success', 'headline' => sprintf(lang('register_welcome'), $username), 'body' => lang('register_welcome_body')]; $notice['state'] = true; $notice['endMessage'] = lang('register_end_message_success'); } header("Content-Type: application/json"); echo json_encode($notice); } public function logout() { unset($_SESSION['user']); $this->load->helper('cookie'); // delete_cookie('rememberMe'); // delete_cookie('token'); $notice = '
Abgemeldet! Du wurdest erfolgreich abgemeldet! Ich hoffe wir sehen uns bald wieder.
'; $_SESSION['notice'] = $notice; $_SESSION['loggedOut'] = true; $redirect = isset($_GET['redirect']) ? urldecode(base64_decode($_GET['redirect'])) : base_url("login"); redirect($redirect); } public function activate($emailHash = '', $activationKey = '') { if ($emailHash !== '' && $activationKey !== '' && strlen($activationKey) == 256 && strlen($emailHash) == 32) { $email_id = $this->LoginModel->hashMailExists($emailHash, $activationKey); if ($email_id !== NULL) { $this->LoginModel->activateMail($email_id); $_SESSION['notice'] = '
Dein Account wurde erfolgreich bestätigt! Du kannst dich jetzt mit deinem Passwort einloggen und alle Funktionen dieser Seite ausreizen!
'; } else { $_SESSION['notice'] = '
Dein Account konnte nicht aktiviert werden! Möglicherweise ist der Aktivierungs-Schlüssel falsch. Sollte dieser Fehler weiterhin auftreten, kontaktiere bitte das Website-Team!
'; } } else { $_SESSION['notice'] = '
Ein Fehler ist aufgetreten! Der angegebene Aktivierungs-Schlüssel ist ungültig und entspricht nicht den Anforderungen. Der Account kann nicht aktiviert werden!
'; } redirect(base_url('login')); } public function forget() { if (isset($_SESSION['user'])) redirect(base_url('login')); $username = $this->input->post("username"); $notice = ["state" => false, "message" => ""]; if (!isset($username) || $username == "") { $notice["message"] = 'Bitte gib deinen Nutzernamen oder deine E-Mail-Adresse an! Um dir Zugriff auf deinen Account zu gewähren, musst du entweder deinen Nutzernamen oder deine E-Mail-Adresse angeben.'; echo json_encode($notice); header('Content-Type: application/json'); exit; } $loginData = $this->LoginModel->getLoginData($username); if (empty($loginData)) { $notice['message'] = 'Dieser Nutzer existiert nicht! Es konnte kein Nutzer mit dieser E-Mail oder diesem Namen gefunden werden.'; echo json_encode($notice); header('Content-Type: application/json'); exit; } $loginData = $loginData[0]; $username = strtolower($username); if ($username == $loginData['username'] || $username == $loginData['email']) { $resetKey = $this->LoginModel->createForgetPasswordKey($loginData['username']); // TODO: E-Mail send $this->EmailModel->sendMail($loginData['email'], 'Passwort zurücksetzen auf KingOfDog.eu', 'password_reset', ['userHash' => base64_encode($loginData['username']), 'resetKey' => $resetKey]); $notice['state'] = true; $notice['message'] = "Eine E-Mail wurde an dich gesendet! Schau' in dein Postfach und klick auf den Link, um dein Passwort zu ändern!"; } echo json_encode($notice); header('Content-Type: application/json'); } public function reset($userKey = NULL, $resetKey = NULL) { if ($resetKey == NULL || $userKey == NULL) redirect(base_url("login")); $username = base64_decode(urldecode($userKey)); if (!$this->LoginModel->resetKeyIsValid($username, $resetKey)) redirect(base_url('login')); $password = $this->input->post('password'); $passwordRepeat = $this->input->post('passwordConfirm'); $notice = ["type" => false, "message" => ""]; if (isset($password)) { if (isset($passwordRepeat)) { $loginData = $this->LoginModel->getLoginData($username); if (!empty($loginData)) { $loginData = $loginData[0]; if ($this->LoginModel->checkPassword($password)) { if ($password == $passwordRepeat) { $this->LoginModel->changePassword($password, $loginData['original_name']); $this->LoginModel->unsetResetKey($loginData['ID']); $notice['message'] .= ""; $notice['type'] = true; } else { $notice['message'] .= ""; } } else { $notice['message'] .= ""; } } else { $notice['message'] .= ""; } } else { $notice['message'] .= ""; } echo json_encode($notice); header('Content-Type: application/json'); exit; } $this->load->view('header', ['active' => 'reset_password', 'title' => 'Neues Passwort festlegen', 'additionalStyles' => ['login.css']]); $this->load->view('network/password_reset', ['notice' => $notice['message']]); $this->load->view('footer', ['additionalScripts' => ['login.js']]); } }