Exemple #1
0
    /**
     * Send lenke med autologin
     */
    protected function handle()
    {
        // mangler eller ugyldig nøkkel?
        if (!isset($_POST['key']) || !isset($_SESSION['glemtpassord_key']) || $_POST['key'] != $_SESSION['glemtpassord_key']) {
            ess::$b->page->add_message("Ugyldig forespørsel. Prøv på nytt.", "error");
            return;
        }
        // sjekk e-post
        $epost = trim(postval("epost"));
        if (empty($epost)) {
            ess::$b->page->add_message("Du må fylle inn e-postadressen din.", "error");
            return;
        }
        // sjekk om det er noen oppføringer med denne e-posten i databasen (og hent de som lever)
        $result = \Kofradia\DB::get()->query("SELECT u_id, up_name, up_access_level, u_pass_change, u_email FROM users LEFT JOIN users_players ON u_active_up_id = up_id WHERE u_email = " . \Kofradia\DB::quote($epost) . " AND u_access_level != 0");
        // ingen?
        if ($result->rowCount() == 0) {
            ess::$b->page->add_message('Fant ingen bruker som hadde e-postadressen ' . htmlspecialchars($epost) . '. Du finner ikke din bruker dersom <u>brukeren</u> er deaktivert. Dersom du har blitt deaktivert og mener dette er feil ta <a href="henvendelser">kontakt</a>.', "error");
            return;
        }
        // flere e-postadresser?
        if ($result->rowCount() > 1) {
            ess::$b->page->add_message('Det finnes flere brukere som er registrert på ' . htmlspecialchars($epost) . '. Vennligst ta <a href="henvendelser">kontakt</a>!', "error");
            redirect::handle();
        }
        $row = $result->fetch();
        // er det noen oppføring for når passordet sist ble oppdatert?
        if (!empty($row['u_pass_change'])) {
            $info = explode(";", $row['u_pass_change']);
            // A;<timestamp>;<ip>[;hash]			-- asked	- bedt om nytt pass
            // C;<timestamp>;<ip>					-- changed	- endret pass
            // bedt om pass (A - asked)
            if ($info[0] == "A") {
                // når?
                $when = intval($info[1]);
                $wait = max(0, $when + self::WAIT - time());
                if ($wait > 0) {
                    ess::$b->page->add_message("Du benyttet deg av glemt passord " . ess::$b->date->get($when)->format() . ", og må vente " . game::timespan($wait, game::TIME_FULL) . " før du kan benytte deg av glemt passord på nytt. Se e-posten du skal ha mottatt!", "error");
                    return;
                }
            }
        }
        // legg inn i databasen
        \Kofradia\DB::get()->exec("UPDATE users SET u_pass_change = 'A;" . time() . ";{$_SERVER['REMOTE_ADDR']}' WHERE u_id = {$row['u_id']}");
        // generer autologin
        $hash = \Kofradia\Users\Autologin::generate($row['u_id'], time() + self::AUTOLOGIN_TIME, null, \Kofradia\Users\Autologin::TYPE_RESET_PASS);
        // send e-post
        $email = new email();
        $email->text = 'Hei,

Du har bedt om å nullstille ditt passord på ' . ess::$s['path'] . ' fra IP-en ' . $_SERVER['REMOTE_ADDR'] . ' (' . $_SERVER['HTTP_USER_AGENT'] . ').

Ved å benytte lenken nedenfor vil passordet på brukeren din bli nullstilt, du blir automatisk logget inn og kan fylle inn ditt nye passord:
' . \Kofradia\Users\Autologin::generateUrl($hash) . '

Hvis du ikke ønsker å nullstille ditt passord kan du se bort fra denne e-posten.

--
www.kofradia.no';
        $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
        $email->headers['Reply-To'] = "*****@*****.**";
        $email->send($epost, "Nullstille ditt passord");
        // logg dette
        putlog("NOTICE", "%c7%bNULLSTILLE PASSORD:%b%c %u{$_SERVER['REMOTE_ADDR']}%u ba om e-post for å nullstille passordet %u{$epost}%u (%u{$row['up_name']}%u)");
        // gi infomelding
        ess::$b->page->add_message("Vi har sendt deg en e-post til <b>" . htmlspecialchars($row['u_email']) . "</b>.<br />Benytt denne for å nullstille passordet ditt.");
        redirect::handle("", redirect::ROOT);
    }