function step1_2() { global $__server; // er skjemaet sendt inn? if ($_SERVER['REQUEST_METHOD'] == "POST") { // sjekk for gyldig trinn if (!isset($_POST['step']) || $_POST['step'] != 1 && $_POST['step'] != 2) { redirect::handle(); } $step = $_POST['step']; // trin 1 if ($step == 1) { // epost1, epost2, b_dag, b_maaned, b_aar, forste_bruker $epost1 = trim(postval("epost1")); $epost2 = trim(postval("epost2")); $b_dag = intval(postval("b_dag")); $b_maaned = intval(postval("b_maaned")); $b_aar = intval(postval("b_aar")); $forste_bruker = isset($_POST['forste_bruker']); $date = ess::$b->date->get(); $n_day = $date->format("j"); $n_month = $date->format("n"); $n_year = $date->format("Y"); $age = $n_year - $b_aar - ($n_month < $b_maaned || $b_maaned == $n_month && $n_day < $b_dag ? 1 : 0); $birth = $b_aar . "-" . str_pad($b_maaned, 2, "0", STR_PAD_LEFT) . "-" . str_pad($b_dag, 2, "0", STR_PAD_LEFT); // sjekk om fødselsdatoen er gyldig $birth_date = ess::$b->date->get(); $birth_date->setDate($b_aar, $b_maaned, $b_dag); $birth_valid = $birth_date->format("Y-m-d") == $birth; // sjekk e-post $email_valid = game::validemail($epost1); // kontroller om e-postadressen eller domenet er blokkert if ($email_valid) { $pos = mb_strpos($epost1, "@"); $domain = mb_strtolower(mb_substr($epost1, $pos + 1)); $result = \Kofradia\DB::get()->query("SELECT eb_id, eb_type FROM email_blacklist WHERE (eb_type = 'address' AND eb_value = " . \Kofradia\DB::quote($epost1) . ") OR (eb_type = 'domain' AND eb_value = " . \Kofradia\DB::quote($domain) . ") ORDER BY eb_type = 'address' LIMIT 1"); $error_email = $result->fetch(); } // sjekk e-post (1) if (!$email_valid) { ess::$b->page->add_message("Ugyldig e-postadresse.", "error"); } elseif ($error_email) { if ($error_email['eb_type'] == "address") { ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($epost1) . "</b> er blokkert for registrering.", "error"); } else { ess::$b->page->add_message("Domenet <b>" . htmlspecialchars($domain) . "</b> er blokkert for registrering og kan ikke benyttes.", "error"); } } elseif ($epost1 != $epost2) { ess::$b->page->add_message("Den gjentatte e-postadressen var ikke lik den første.", "error"); } elseif ($b_dag < 1 || $b_dag > 31) { ess::$b->page->add_message("Du må velge en gyldig dag.", "error"); } elseif ($b_maaned < 1 || $b_maaned > 12) { ess::$b->page->add_message("Du må velge en gyldig måned.", "error"); } elseif ($b_aar < 1900 || $b_aar > ess::$b->date->get()->format("Y")) { ess::$b->page->add_message("Du må velge et gyldig år.", "error"); } elseif (!$birth_valid) { ess::$b->page->add_message("Datoen du fylte inn for fødselsdatoen din eksisterer ikke."); } elseif ($age < 13) { putlog("ABUSE", "%c9%bUNDER ALDERSGRENSEN:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å registrere seg med fødselsdato %u{$birth}%u (%u{$age}%u år) og e-posten %u{$epost1}%u!"); ess::$b->page->add_message("Du må ha fylt 13 år for å registrere deg og spille Kofradia!", "error"); redirect::handle("", redirect::ROOT); } elseif (!$forste_bruker) { ess::$b->page->add_message("I følge betingelsene kan du kun ha en bruker. Bruk den!", "error"); redirect::handle("", redirect::ROOT); } else { // hent DB info $result1 = \Kofradia\DB::get()->query("SELECT id, time, expire FROM registration WHERE email = " . \Kofradia\DB::quote($epost1)); $result2 = \Kofradia\DB::get()->query("SELECT u_id FROM users WHERE u_email = " . \Kofradia\DB::quote($epost1) . " AND u_access_level != 0"); // e-post allerede i registreringssystemet? if ($row = $result1->fetch()) { $time = game::timespan($row['expire'], game::TIME_ABS | game::TIME_FULL); ess::$b->page->add_message("E-postadressen er allerede aktivt i registeringssystemet. Sjekk e-posten for e-postkode eller vent {$time}, for så å prøve igjen.", "error"); } elseif ($row = $result2->fetch()) { putlog("ABUSE", "%c9%bREGISTRER KONTO:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å registrere seg en e-post som allerede finnes: %u{$epost1}%u!"); ess::$b->page->add_message("Denne e-posten er allerede i bruk.", "error"); redirect::handle("", redirect::ROOT); } else { // sett opp kode $code = mb_substr(md5(uniqid("kofradia_")), 0, 16); // legg til i databasen \Kofradia\DB::get()->exec("INSERT INTO registration SET time = " . time() . ", birth = '{$birth}', email = " . \Kofradia\DB::quote($epost1) . ", code = '{$code}', ip = '{$_SERVER['REMOTE_ADDR']}', expire = " . (time() + 7200)); // send e-post $email = new email(); $email->text = 'Hei, Du har begynt registrering av bruker på Kofradia. Dersom du ikke har bedt om denne e-posten kan du se bort ifra den. For å bekrefte e-postadressen din må du følge denne lenken: ' . $__server['path'] . '/registrer?e=' . $code . ' Din verifiseringskode er: ' . $code . ' Forespørselen ble utført fra ' . $_SERVER['REMOTE_ADDR'] . '. Du må fortsette innen ' . game::timespan(7200, game::TIME_FULL | game::TIME_NOBOLD) . ' (' . ess::$b->date->get(time() + 7200)->format(date::FORMAT_SEC) . '). Etter den tid må du be om ny e-post. -- www.kofradia.no'; $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR']; $email->headers['Reply-To'] = "*****@*****.**"; $email->send($epost1, "Starte registrering på Kofradia"); ess::$b->page->add_message("En e-post med verifiseringskode har blitt sendt til <b>" . htmlspecialchars($epost1) . "</b>. Sjekk e-posten snarest!"); redirect::handle("?e"); } } } else { // e $ecode = trim(postval("e")); // sjekk e-postkode if (empty($ecode)) { ess::$b->page->add_message("Du må fylle ut e-postkoden du har fått på epost.", "error"); } else { // sjekk om den finnes $result = \Kofradia\DB::get()->query("SELECT id, time, email, code, ip, expire, user FROM registration WHERE code = " . \Kofradia\DB::quote($ecode)); if (!($row = $result->fetch())) { putlog("ABUSE", "%c9%bE-POST KODE:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å fortsette registreringen med ugyldig e-postkode (%u{$ecode}%u)!"); ess::$b->page->add_message("Fant ikke e-postkoden i databasen! Kontroller at den er riktig og evt. be om ny e-postkode.", "error"); } else { // oppdater oppføringen \Kofradia\DB::get()->exec("UPDATE registration SET verified = 1 WHERE id = {$row['id']}"); $_SESSION[$GLOBALS['__server']['session_prefix'] . 'reg'] = array("id" => $row['id'], "step" => 3); redirect::handle(); } } } } echo ' <p><b>Velkommen</b> til Kofradia sine nettsider! Kofradia er et tekstbassert nettspill som handler om å utføre forskjellige funksjoner for å stige i gradene. I tillegg finnes det både forum og diverse annen informasjon på siden!</p> <p>På denne siden oppretter du din bruker og spiller. Merk! Det er kun lov å ha én bruker. Har du allerede en bruker fra før har du ikke lov til å registrere ny bruker.</p>'; if (!isset($_REQUEST['e'])) { ess::$b->page->add_js_domready('$("epost1").focus();'); echo ' <form action="registrer" method="post"> <input type="hidden" name="step" value="1" /> <div class="registrer_felt"> <boxes /> <dl class="dd_right dl_2x"> <dt>E-postadresse</dt> <dd><input type="text" id="epost1" name="epost1" value="' . htmlspecialchars(postval("epost1")) . '" class="styled w150" /></dd> <dt>Gjenta e-postadresse</dt> <dd><input type="text" name="epost2" value="' . htmlspecialchars(postval("epost2")) . '" class="styled w150" /></dd> <dt>Fødselsdato</dt> <dd> <select name="b_dag"> <option value="">Dag</option>'; $active = postval("b_dag"); for ($i = 1; $i <= 31; $i++) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>'; } echo ' </select> <select name="b_maaned"> <option value="">Måned</option>'; global $_lang; $active = postval("b_maaned"); for ($i = 1; $i <= 12; $i++) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . ucfirst($_lang['months'][$i]) . '</option>'; } echo ' </select> <select name="b_aar"> <option value="">År</option>'; $active = postval("b_aar"); for ($i = ess::$b->date->get()->format("Y"); $i >= 1900; $i--) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>'; } echo ' </select> </dd> <dd><input type="checkbox" name="forste_bruker" id="c1" /><label for="c1"> Jeg har ingen aktiv bruker fra før</label></dd> </dl> <p class="c">' . show_sbutton("Gå til neste trinn") . '</p> </div> </form>'; } else { ess::$b->page->add_js_domready('$("verife").focus();'); echo ' <p><b>Verifiseringskode</b></p> <p>Når du har mottatt e-post etter å ha fylt inn e-postadresse og fødelsdato, mottar du en verifiseringskode som fylles inn her. Du kan deretter fortsette din registrering.</p> <form action="registrer" method="post"> <input type="hidden" name="step" value="2" /> <div class="registrer_felt"> <boxes /> <dl class="dd_right"> <dt>Verifiseringskode</dt> <dd><input type="text" id="verife" name="e" value="' . htmlspecialchars(requestval("e")) . '" maxlength="32" class="styled w120" /></dd> </dl> <p class="c">' . show_sbutton("Valider", 'class="indent"') . '</p> </div> <p><a href="registrer">Tilbake</a></p> </form>'; } }
/** * Innstillinger */ protected static function page_set() { global $__server; $subpage2 = getval("b"); redirect::store(page_min_side::addr(NULL, $subpage2 != "" ? "b=" . $subpage2 : '')); ess::$b->page->add_title("Innstillinger"); ess::$b->page->add_css(' .minside_set_links .active { color: #CCFF00 }'); echo ' <p class="c minside_set_links"> <a href="' . htmlspecialchars(page_min_side::addr(NULL, "")) . '"' . ($subpage2 == "" ? ' class="active"' : '') . '>Generelt</a> | <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=email")) . '"' . ($subpage2 == "email" ? ' class="active"' : '') . '>Skift e-postadresse</a> | <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=pass")) . '"' . ($subpage2 == "pass" ? ' class="active"' : '') . '>Skift passord</a> </p>'; // endre passord? if ($subpage2 == "pass") { ess::$b->page->add_title("Endre passord"); // må logge inn med utvidede tilganger if (isset(login::$extended_access) && !login::$extended_access['authed']) { echo ' <div class="bg1_c center" style="width: 350px"> <h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p>Du må logge inn med utvidede tilganger for å få tilgang til denne funksjonen.</p> </div> </div>'; } elseif (access::has("mod") && page_min_side::$active_user->id != login::$user->id) { // kan ikke endre denne brukerens passord? if (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 && !access::has("sadmin")) { echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du har ikke rettigheter til å endre passordet til denne brukeren. Kun senioradministrator kan gjøre det.</p> </div> </div>'; } else { // lagre passordet? if (isset($_POST['pass'])) { $pass = trim(postval("pass")); $error = password::validate($pass, password::LEVEL_LOGIN); $log = trim(postval("log")); if ($error > 0) { $errors = array(); if ($error & password::ERROR_SHORT) { $errors[] = 'Passordet er for kort. Må være minimum 8 tegn.'; } if ($error & password::ERROR_NONCAP || $error & password::ERROR_CAP || $error & password::ERROR_NUM) { $errors[] = 'Passordet må inneholde både små bokstaver, store bokstaver og tall.'; } ess::$b->page->add_message(implode('<br />', $errors), "error"); } elseif ($log == "") { ess::$b->page->add_message("Mangler logg melding.", "error"); } else { // samme passord? if (password::verify_hash($pass, page_min_side::$active_user->data['u_pass'], 'user')) { ess::$b->page->add_message("Passordet er det samme som nåværende. Velg et annet.", "error"); } else { $pass_new = password::hash($pass, null, 'user'); // lagre endringer \Kofradia\DB::get()->exec("UPDATE users SET u_pass = "******" WHERE u_id = " . page_min_side::$active_user->id); // legg til crewlogg crewlog::log("user_password", page_min_side::$active_player->id, $log, array("pass_old" => page_min_side::$active_user->data['u_pass'], "pass_new" => $pass_new)); ess::$b->page->add_message("Passordet ble endret."); } } } echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Endre passord<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p class="r">Tilgangsnivå: Moderator</p> <p>Her endrer du passordet til ' . page_min_side::$active_player->profile_link() . '.</p> <form action="" method="post" autocomplete="off"> <dl class="dd_right dl_2x"> <dt>Nytt passord</dt> <dd><input type="password" value="" name="pass" id="pass" class="styled w120" /></dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> <dd>' . show_sbutton("Lagre") . '</dd> </dl> </form> </div> </div>'; } } else { // lagre passord if (isset($_POST['save_pass'])) { // kontroller alle feltene $pass_old = trim(postval("pass_old")); $pass_new = trim(postval("pass_new")); $pass_repeat = trim(postval("pass_repeat")); // kontroller at alle feltene er fylt ut if ($pass_old == "" || $pass_new == "" || $pass_repeat == "") { ess::$b->page->add_message("Alle feltene må fylles ut.", "error"); } elseif (!password::verify_hash($pass_old, page_min_side::$active_user->data['u_pass'], 'user')) { ess::$b->page->add_message("Det gamle passordet stemte ikke.", "error"); } elseif ($pass_new != $pass_repeat) { ess::$b->page->add_message("De nye passordene var ikke like.", "error"); } elseif ($pass_old == $pass_new) { ess::$b->page->add_message("Du må velge et nytt passord.", "error"); } elseif (mb_strlen($pass_new) < 6) { ess::$b->page->add_message("Det nye passordet må inneholde minimum 6 tegn.", "error"); } elseif (password::validate($pass_new, password::LEVEL_LOGIN) != 0) { ess::$b->page->add_message("Du må velge et vanskeligere passord.", "error"); } elseif (password::verify_hash($pass_new, page_min_side::$active_user->data['u_bank_auth'], 'bank_auth')) { ess::$b->page->add_message("Velg et annet passord enn du har i banken."); } else { \Kofradia\DB::get()->exec("UPDATE users SET u_pass = "******" WHERE u_id = " . page_min_side::$active_user->id); // melding ess::$b->page->add_message("Passordet ble endret. Alle andre steder brukeren var logget inn er nå logget ut."); putlog("NOTICE", "%bPASSORD-ENDRING%b: %u" . page_min_side::$active_player->data['up_name'] . "%u byttet passordet på sin bruker. {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // logg ut alle andre brukere \Kofradia\DB::get()->exec("UPDATE sessions SET ses_active = 0, ses_logout_time = " . time() . " WHERE ses_active = 1 AND ses_u_id = " . page_min_side::$active_user->id . " AND ses_id != " . login::$info['ses_id']); redirect::handle(); } } echo ' <div class="bg1_c" style="width: 300px"> <h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>For å kunne skifte passord må alle 3 feltene være fylt ut.</p> <form action="" method="post" autocomplete="off"> <dl class="dd_right dl_2x"> <dt>Nåværende passord</dt> <dd><input type="password" class="styled w100" name="pass_old" /></dd> <dt>Nytt passord</dt> <dd><input type="password" class="styled w100" name="pass_new" /></dd> <dt>Gjenta nytt passord</dt> <dd><input type="password" class="styled w100" name="pass_repeat" /></dd> </dl> <p class="c">' . show_sbutton("Skift passordet", 'name="save_pass"') . '</p> </form> </div> </div>'; } } elseif ($subpage2 == "email") { // skifte e-postadresse? /* Trinn i skifte e-postadresse: 1. Skriver inn ønsket e-postadresse man vil skifte til 2. E-post blir sendt til gammel e-postadresse med info og link til validering 3. Validering av gammel e-postadresse (step 1) 4. E-post blir sendt til ny e-postadresse med info og link til validering 5. E-potadresse blir skiftet (step 2) */ ess::$b->page->add_title("Skifte e-postadresse"); // må logge inn med utvidede tilganger if (isset(login::$extended_access) && !login::$extended_access['authed']) { echo ' <div class="bg1_c center" style="width: 350px"> <h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p>Du må logge inn med utvidede tilganger for å få tilgang til denne funksjonen.</p> </div> </div>'; } elseif (access::has("mod") && (page_min_side::$active_user->id != login::$user->id || isset($_GET['o']))) { // kan ikke endre denne brukerens e-postadresse? if (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 && !access::has("sadmin")) { echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du har ikke rettigheter til å skifte e-postadressen til denne brukeren. Kun senioradministrator kan gjøre det.</p> </div> </div>'; } else { // lagre ny e-post? $email_ex = false; if (isset($_POST['email'])) { $email = trim(postval("email")); $log = trim(postval("log")); // sjekk om e-postadressen allerede er i bruk $result = \Kofradia\DB::get()->query("SELECT u_id, up_id, up_name, up_access_level FROM users LEFT JOIN users_players ON up_id = u_active_up_id WHERE u_email = " . \Kofradia\DB::quote($email) . " AND u_access_level != 0"); $email_ex = $result->fetch(); // ikke gyldig e-postadresse? if (!game::validemail($email)) { ess::$b->page->add_message("Ugyldig e-postadresse.", "error"); } elseif (empty($log)) { ess::$b->page->add_message("Du må fylle inn en loggmelding.", "error"); } elseif ($email == page_min_side::$active_user->data['u_email']) { ess::$b->page->add_message("Du må skrive inn en ny e-postadresse."); } elseif ($email_ex && !isset($_POST['ignore_ex'])) { ess::$b->page->add_message("Denne e-posten er allerede i bruk av " . game::profile_link($email_ex['up_id'], $email_ex['up_name'], $email_ex['up_access_level']) . ". Bekreft at du ønsker å la begge brukerene ha denne e-postadresse, evt. endre til en annen e-postadresse."); } else { // lagre endringer \Kofradia\DB::get()->exec("UPDATE users SET u_email = " . \Kofradia\DB::quote($email) . " WHERE u_id = " . page_min_side::$active_user->id); // legg til crewlogg crewlog::log("user_email", page_min_side::$active_player->id, $log, array("email_old" => page_min_side::$active_user->data['u_email'], "email_new" => $email)); // fjern mulige params for egen bytting av e-post page_min_side::$active_user->params->remove("change_email_step"); page_min_side::$active_user->params->remove("change_email_new_address"); page_min_side::$active_user->params->remove("change_email_hash"); page_min_side::$active_user->params->remove("change_email_time", true); ess::$b->page->add_message("E-postadressen ble endret."); redirect::handle(page_min_side::addr("")); } } echo ' <div class="bg1_c center" style="width: 350px"> <h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <form action="" method="post" autocomplete="off"> <dl class="dd_right dl_2x"> <dt>Nåværende e-postadresse</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Ny e-postadresse</dt> <dd><input type="text" value="' . htmlspecialchars(postval("email", page_min_side::$active_user->data['u_email'])) . '" name="email" id="email" class="styled w150" /></dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> </dl> <p class="c">' . ($email_ex ? show_sbutton("Lagre ny e-postadresse, ignorer advarsel", 'name="ignore_ex"') : show_sbutton("Lagre ny e-postadresse")) . '</p> </form> </div> </div>'; } } else { // blokkert fra å skifte e-postadressen? $blokkering = blokkeringer::check(blokkeringer::TYPE_EPOST); if ($blokkering) { ess::$b->page->add_message("Du er blokkert fra å skifte e-postadressen din. Blokkeringen varer til " . ess::$b->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error"); redirect::handle(page_min_side::addr("")); } // hent status $status = page_min_side::$active_user->params->get("change_email_step", false); $email_addr = page_min_side::$active_user->params->get("change_email_new_address"); $html_pre = ' <div class="bg1_c center" style="width: 350px"> <h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes />'; $html_suf = ' </div> </div>'; $in_use = false; $expire = false; if ($status) { // se om e-postadressen allerede er i bruk $result = \Kofradia\DB::get()->query("SELECT COUNT(u_id) FROM users WHERE u_email = " . \Kofradia\DB::quote($email_addr) . " AND u_access_level != 0"); $in_use = $result->fetchColumn(0) > 0; } elseif ($status && page_min_side::$active_user->params->get("change_email_time") + 86400 < time()) { $expire = true; } // avbryte? if (isset($_POST['abort']) && $status || $in_use || $expire) { if ($in_use) { // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u kunne ikke skifte e-postadresse fordi den nye adressen er i bruk (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u" . $email_addr . "%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($email_addr) . "</b> har blitt benyttet av en annen bruker. Du kan ikke skifte til denne e-postadressen.", "error"); } elseif ($expire) { // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u kunne ikke skifte e-postadresse fordi det ble brukt for lang tid (egentlig startet " . ess::$b->date->get(page_min_side::$active_user->params->get("change_email_time"))->format() . ") (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("Du brukte for lang tid med å bekrefte e-postadressen. Skifting av e-post er avbrutt.", "error"); } else { // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u avbrøt skifting av e-postadresse (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("Du har avbrutt skifting av e-postadresse."); } // fjern fra params page_min_side::$active_user->params->remove("change_email_step"); page_min_side::$active_user->params->remove("change_email_new_address"); page_min_side::$active_user->params->remove("change_email_hash"); page_min_side::$active_user->params->remove("change_email_time", true); redirect::handle(); } // behandle trinn 1 if (isset($_GET['old'])) { // er ikke på trinn 1 eller feil kode? if ($status != 1 || page_min_side::$active_user->params->get("change_email_hash") != $_GET['old']) { ess::$b->page->add_message("E-posten du har blitt henvist fra gjelder ikke lenger.", "error"); redirect::handle(); } // gå videre til neste trinn? if (isset($_POST['continue']) && validate_sid(false)) { // generer kode $hash = mb_substr(md5(uniqid("kofradia_")), 0, 16); // sett status page_min_side::$active_user->params->update("change_email_step", 2); page_min_side::$active_user->params->update("change_email_new_address", $email_addr); page_min_side::$active_user->params->update("change_email_hash", $hash); page_min_side::$active_user->params->update("change_email_time", time(), true); // send e-post til nye e-posten $email = new email(); $email->text = 'Hei, Du har bedt om å skifte e-postadressen for din spiller ' . page_min_side::$active_player->data['up_name'] . ' på ' . $__server['path'] . '. Den gamle e-postadressen har blitt bekreftet. Gammel/nåværende e-postadresse: ' . page_min_side::$active_user->data['u_email'] . ' Ny e-postadresse: ' . $email_addr . ' For å godta eller avslå dette gå inn på følgende adresse: ' . $__server['path'] . '/min_side?u&a=set&b=email&new=' . $hash . ' -- www.kofradia.no'; $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR']; $email->headers['Reply-To'] = "*****@*****.**"; $email->send($email_addr, "Skifte e-postadresse (bekrefte ny adresse)"); // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u har bekreftet gammel e-postadresse (%u" . page_min_side::$active_user->data['u_email'] . "%u) og skal nå bekrefte %u{$email_addr}%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("En e-post har blitt sendt til <b>" . htmlspecialchars($email_addr) . "</b> for bekreftelse."); redirect::handle(); } echo $html_pre . ' <p>Du har bekreftet nåværende e-postadresse.</p> <dl class="dd_right"> <dt>Nåværende e-postadresse</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Ny ønsket e-postadresse</dt> <dd>' . htmlspecialchars($email_addr) . '</dd> </dl> <p><u>Du må nå bekrefte den nye e-postadressen.</u></p> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <p class="c"> ' . show_sbutton("Send e-post for bekreftelse", 'name="continue"') . ' ' . show_sbutton("Avbryt", 'name="abort"') . ' </p> </form>' . $html_suf; } elseif (isset($_GET['new'])) { // er ikke på trinn 2 eller feil kode? if ($status != 2 || page_min_side::$active_user->params->get("change_email_hash") != $_GET['new']) { ess::$b->page->add_message("E-posten du har blitt henvist fra gjelder ikke lenger.", "error"); redirect::handle(); } // fullføre skifting av e-postadresse? if (isset($_POST['confirm']) && validate_sid(false)) { $note = trim(postval("note")); // mangler logg? if ($note == "") { ess::$b->page->add_message("Mangler begrunnelse."); } else { // lagre endringer \Kofradia\DB::get()->exec("UPDATE users SET u_email = " . \Kofradia\DB::quote($email_addr) . " WHERE u_id = " . page_min_side::$active_user->id); // legg til crewlogg crewlog::log("user_email", page_min_side::$active_player->id, $note, array("email_old" => page_min_side::$active_user->data['u_email'], "email_new" => $email_addr)); // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u skiftet e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u" . $email_addr . "%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("E-postadressen ble skiftet fra <b>" . htmlspecialchars(page_min_side::$active_user->data['u_email']) . "</b> til <b>" . htmlspecialchars($email_addr) . "</b>."); // fjern fra params page_min_side::$active_user->params->remove("change_email_step"); page_min_side::$active_user->params->remove("change_email_new_address"); page_min_side::$active_user->params->remove("change_email_hash"); page_min_side::$active_user->params->remove("change_email_time", true); redirect::handle(); } } echo $html_pre . ' <p>Du har bekreftet både den nåværende og den nye e-postadressen.</p> <dl class="dd_right"> <dt>Nåværende e-postadresse</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Ny ønsket e-postadresse</dt> <dd><b><u>' . htmlspecialchars($email_addr) . '</u></b></dd> </dl> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <dl class="dd_right"> <dt>Begrunnelse</dt> <dd><textarea name="note" rows="5" cols="10" class="w200">' . htmlspecialchars(postval("note")) . '</textarea></dd> </dl> <p class="c"> ' . show_sbutton("Skift e-postadresse", 'name="confirm"') . ' ' . show_sbutton("Avbryt", 'name="abort"') . ' </p> </form>' . $html_suf; } elseif (!$status) { // velge ny e-postadresse if (isset($_POST['new_email']) && validate_sid(false)) { // se om e-postadressen allerede er i bruk $result = \Kofradia\DB::get()->query("SELECT COUNT(u_id) FROM users WHERE u_email = " . \Kofradia\DB::quote($_POST['new_email']) . " AND u_access_level != 0"); $in_use = $result->fetchColumn(0) > 0; // valider e-post $email_addr = $_POST['new_email']; $email_valid = game::validemail($email_addr); // kontroller om e-postadressen eller domenet er blokkert if ($email_valid) { $pos = mb_strpos($email_addr, "@"); $domain = mb_strtolower(mb_substr($email_addr, $pos + 1)); $result = \Kofradia\DB::get()->query("SELECT eb_id, eb_type FROM email_blacklist WHERE (eb_type = 'address' AND eb_value = " . \Kofradia\DB::quote($email_addr) . ") OR (eb_type = 'domain' AND eb_value = " . \Kofradia\DB::quote($domain) . ") ORDER BY eb_type = 'address' LIMIT 1"); $error_email = $result->fetch(); } // ugyldig e-postadresse? if (!$email_valid) { ess::$b->page->add_message("Ugyldig e-postadresse.", "error"); } elseif ($in_use) { putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u forsøkte å skifte e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u som allerde er i bruk {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); ess::$b->page->add_message("E-posten du ønsker å skifte til er allerede benyttet av en annen bruker."); } elseif ($error_email) { if ($error_email['eb_type'] == "address") { ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($email_addr) . "</b> er blokkert og kan ikke benyttes.", "error"); } else { ess::$b->page->add_message("Domenet <b>" . htmlspecialchars($domain) . "</b> er blokkert og kan ikke benyttes.", "error"); } } else { // generer kode $hash = mb_substr(md5(uniqid("kofradia_")), 0, 16); // sett status page_min_side::$active_user->params->update("change_email_step", 1); page_min_side::$active_user->params->update("change_email_new_address", $email_addr); page_min_side::$active_user->params->update("change_email_hash", $hash); page_min_side::$active_user->params->update("change_email_time", time(), true); // send e-post til gamle e-posten $email = new email(); $email->text = 'Hei, Du har bedt om å skifte e-postadressen for din spiller ' . page_min_side::$active_player->data['up_name'] . ' på ' . $__server['path'] . '. Gammel/nåværende e-postadresse: ' . page_min_side::$active_user->data['u_email'] . ' Ny e-postadresse: ' . $email_addr . ' For å godta eller avslå dette gå inn på følgende adresse: ' . $__server['path'] . '/min_side?u&a=set&b=email&old=' . $hash . ' -- www.kofradia.no'; $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR']; $email->headers['Reply-To'] = "*****@*****.**"; $email->send(page_min_side::$active_user->data['u_email'], "Skifte e-postadresse (bekrefte gammel adresse)"); // logg putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u har startet skifting av e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); // info ess::$b->page->add_message("En e-post har blitt sendt til <b>" . htmlspecialchars(page_min_side::$active_user->data['u_email']) . "</b> for bekreftelse."); redirect::handle(); } } echo $html_pre . ' <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <dl class="dd_right"> <dt>Nåværende e-postadresse</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Ny ønsket e-postadresse</dt> <dd><input type="text" name="new_email" value="' . htmlspecialchars(postval("new_email", "")) . '" class="styled w150" /></dd> </dl> <p>Du vil motta en e-post for bekreftelse på den gamle e-postadressen, for deretter å få en bekreftelse på den nye før e-postadressen blir skiftet.</p> <p>Husk at du ikke har lov til å gi bort eller selge brukeren til andre personer. <u>Brukeren skal ikke brukes av andre enn deg.</u></p> <p class="c">' . show_sbutton("Fortsett") . '</p>' . (access::has("mod") ? ' <p class="c"><a href="' . htmlspecialchars(page_min_side::addr("set", "b=email&o")) . '">Endre e-postadresse som moderator</a></p>' : '') . ' </form>' . $html_suf; } else { echo $html_pre . ' <p>Du er i ferd med å skifte e-postadresse for brukeren din.</p> <p>Informasjon:</p> <dl class="dd_right"> <dt>Nåværende e-postadresse</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Ny ønsket e-postadresse</dt> <dd>' . htmlspecialchars($email_addr) . '</dd> <dt>Status</dt> <dd>' . ($status == 1 ? 'Venter på bekreftelse av <b>gammel</b> e-postadresse.' : 'Venter på bekreftelse av <b>ny</b> e-postadresse') . '</dd> </dl> <form action="" method="post"> <p class="c">' . show_sbutton("Avbryt", 'name="abort"') . '</p> </form>' . $html_suf; } } } elseif ($subpage2 == "") { // lagre innstillinger? if (isset($_POST['save'])) { if (page_min_side::$active_user->id != login::$user->id && !access::has("sadmin")) { ess::$b->page->add_message("Du har ikke tilgang til å redigere disse innstillingene for andre brukere.", "error"); redirect::handle(); } $show_signature = LOCK ? page_min_side::$active_user->data['u_forum_show_signature'] : (isset($_POST['show_signature']) ? 1 : 0); $forum_page = LOCK ? page_min_side::$active_user->data['u_forum_per_page'] : max(5, min(100, intval(postval("forum_page")))); $force_ssl = isset($_POST['force_ssl']) ? 1 : 0; $music_auto = LOCK ? page_min_side::$active_user->data['u_music_auto'] : (isset($_POST['music']) && $_POST['music'] == "auto" ? 1 : 0); $music_manual = LOCK ? page_min_side::$active_user->params->get("music_manual") ? true : false : isset($_POST['music']) && $_POST['music'] == "manual"; $hide_progressbar_left = LOCK ? page_min_side::$active_user->params->get("hide_progressbar_left") ? true : false : isset($_POST['hide_progressbar_left']); $changed = false; $user_change = array(); if ($force_ssl != page_min_side::$active_user->data['u_force_ssl']) { $user_change[] = "u_force_ssl = {$force_ssl}"; } if ($music_auto != page_min_side::$active_user->data['u_music_auto']) { $user_change[] = "u_music_auto = {$music_auto}"; } if ($show_signature != page_min_side::$active_user->data['u_forum_show_signature']) { $user_change[] = "u_forum_show_signature = {$show_signature}"; } if ($forum_page != page_min_side::$active_user->data['u_forum_per_page']) { $user_change[] = "u_forum_per_page = {$forum_page}"; } if ($hide_progressbar_left != (page_min_side::$active_user->params->get("hide_progressbar_left") ? true : false)) { if (!$hide_progressbar_left) { page_min_side::$active_user->params->remove("hide_progressbar_left"); } else { page_min_side::$active_user->params->update("hide_progressbar_left", "1"); } $changed = true; } if ($music_manual != (page_min_side::$active_user->params->get("music_manual") ? true : false)) { if (!$music_manual) { page_min_side::$active_user->params->remove("music_manual"); } else { page_min_side::$active_user->params->update("music_manual", "1"); } $changed = true; } if ($changed) { page_min_side::$active_user->params->commit(); } // noe som skal endres? if (count($user_change) > 0) { \Kofradia\DB::get()->exec("UPDATE users SET " . implode(", ", $user_change) . " WHERE u_id = " . page_min_side::$active_user->id); $changed = true; } if ($changed) { ess::$b->page->add_message("Endringene ble lagret."); } else { ess::$b->page->add_message("Ingen endringer ble utført."); } redirect::handle(); } ess::$b->page->add_css(' .minside_set { margin: 0 20px; background-color: #222222; padding: 1px 5px } .minside_set p { margin: 5px 0 }'); echo ' <div class="bg1_c" style="width: 400px"> <h1 class="bg1">Innstillinger<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <form action="" method="post"> <p><b>Forumalternativer:</b></p> <div class="minside_set"> <p><input type="checkbox" name="show_signature" id="show_signature"' . (page_min_side::$active_user->data['u_forum_show_signature'] != 0 ? ' checked="checked"' : '') . ' /><label for="show_signature"> Vis signaturer i forumet</label></p> <p>Antall foruminnlegg per side: <input type="text" name="forum_page" maxlength="2" value="' . page_min_side::$active_user->data['u_forum_per_page'] . '" class="styled w40" /></p> </div> <p><b>Sikkerhet:</b></p> <div class="minside_set"> <p><input type="checkbox" name="force_ssl" id="force_ssl"' . (page_min_side::$active_user->data['u_force_ssl'] != 0 ? ' checked="checked"' : '') . ' /><label for="force_ssl"> Alltid benytt sikker tilkobling (SSL)</label>' . (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 ? ' <span class="dark">(Som crew benytter du uansett alltid SSL.)</span>' : '') . '</p> </div> <p><b>Spillinnstillinger:</b></p> <div class="minside_set"> <p><input type="checkbox" name="hide_progressbar_left" id="hide_progressbar_left"' . (page_min_side::$active_user->params->get("hide_progressbar_left") ? ' checked="checked"' : '') . ' /><label for="hide_progressbar_left"> Skjul «Rank» og «Wanted nivå» fra toppen av siden</label></p> </div> <p><b>Annet:</b></p> <div class="minside_set"> <p>Musikkalternativer:<br /> <input type="radio" name="music" value="auto" id="music_auto"' . (!page_min_side::$active_user->params->get("music_manual") && page_min_side::$active_user->data['u_music_auto'] ? ' checked="checked"' : '') . ' /><label for="music_auto"> Spill av musikk automatisk</label><br /> <input type="radio" name="music" value="preload" id="music_preload"' . (!page_min_side::$active_user->params->get("music_manual") && !page_min_side::$active_user->data['u_music_auto'] ? ' checked="checked"' : '') . ' /><label for="music_preload"> Last inn musikkfil, men ikke spill av automatisk</label><br /> <input type="radio" name="music" value="manual" id="music_manual"' . (page_min_side::$active_user->params->get("music_manual") ? ' checked="checked"' : '') . ' /><label for="music_manual"> Ikke last inn musikkfil -- trykk på spiller for å laste inn</label> </p> </div>' . (page_min_side::$active_user->id != login::$user->id ? ' <p class="c">Du har ikke tilgang til å endre disse innstillingene</p>' : ' <p class="c">' . show_sbutton("Lagre endringer", 'name="save"') . '</p>') . ' </form> </div> </div>'; } }
} } // ny henvendelse? $preview = false; if (isset($_POST['new']) && (isset($_POST['add']) || isset($_POST['preview']))) { $category = postval("category"); $name = trim(postval("name")); $email = $user ? $user : trim(postval("email")); $subject = trim(postval("subject")); $content = trim(postval("content")); // sjekk kategori if (!isset($categories[$category])) { $_base->page->add_message("Du må velge en kategori.", "error"); } elseif (mb_strlen($name) == 0) { $_base->page->add_message("Du må fylle ut et navn.", "error"); } elseif (!game::validemail($email)) { $_base->page->add_message("Du må skrive inn en gyldig e-postadresse.", "error"); } elseif (mb_strlen($subject) == 0) { $_base->page->add_message("Du må fylle ut et emne.", "error"); } elseif (mb_strlen($content) < 20) { $_base->page->add_message("Henvendelsen kan ikke inneholde mindre enn 20 tegn.", "error"); } elseif (isset($_POST['preview'])) { $preview = true; $_base->page->add_message("Viser forhåndsvisning."); } else { // legg til hovedoppføring $random = rand(10000, 99999); \Kofradia\DB::get()->exec("INSERT INTO henvendelser SET h_name = " . \Kofradia\DB::quote($name) . ", h_category = " . \Kofradia\DB::quote($categories[$category]) . ", h_email = " . \Kofradia\DB::quote($email) . ", h_subject = " . \Kofradia\DB::quote($subject) . ", h_time = " . time() . ", h_hm_time = " . time() . ", h_random = {$random}"); $h_id = \Kofradia\DB::get()->lastInsertId(); // legg til meldingen \Kofradia\DB::get()->exec("INSERT INTO henvendelser_messages SET hm_h_id = {$h_id}, hm_content = " . \Kofradia\DB::quote($content) . ", hm_time = " . time() . ", hm_ip = " . \Kofradia\DB::quote($_SERVER['REMOTE_ADDR']) . ", hm_up_id = " . (login::$logged_in ? login::$user->player->id : "NULL") . ", hm_browser = " . \Kofradia\DB::quote($_SERVER['HTTP_USER_AGENT']));
/** * Opprette ny oppføring */ protected function add() { // opprette? if (isset($_POST['eb_type'])) { $type = $_POST['eb_type']; $value = trim(postval("eb_value")); $note = trim(postval("eb_note")); // ugyldig type? if ($type != "address" && $type != "domain") { ess::$b->page->add_message("Ugyldig type.", "error"); } elseif ($type == "address" && !game::validemail($value)) { ess::$b->page->add_message("Verdien du skrev inn er ikke en gyldig e-postadresse.", "error"); } elseif ($type == "domain" && !preg_match("/^[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]\$/Diu", $value)) { ess::$b->page->add_message("Verdien du skrev inn er ikke et gyldig domenenavn eller underdomene.", "error"); } else { // sjekk om den allerede eksisterer $result = \Kofradia\DB::get()->query("SELECT eb_time, eb_up_id FROM email_blacklist WHERE eb_type = " . \Kofradia\DB::quote($type) . " AND eb_value = " . \Kofradia\DB::quote($value)); $row = $result->fetch(); if ($row) { ess::$b->page->add_message('En identisk oppføring ble lagt til av <user id="' . $row['eb_up_id'] . '" /> ' . ess::$b->date->get($row['eb_time'])->format() . '.', "error"); } else { // opprett oppføringen \Kofradia\DB::get()->exec("INSERT INTO email_blacklist SET eb_type = " . \Kofradia\DB::quote($type) . ", eb_value = " . \Kofradia\DB::quote($value) . ", eb_time = " . time() . ", eb_up_id = " . login::$user->player->id . ", eb_note = " . \Kofradia\DB::quote($note)); // logg putlog("CREWCHAN", "E-POST BLOKKERING: " . login::$user->player->data['up_name'] . " la til oppføringen {$value} ({$type})"); ess::$b->page->add_message("Oppføringen ble lagt til."); redirect::handle(); } } } ess::$b->page->add_title("Ny blokkering"); ess::$b->page->add_js_domready('$("eb_value").focus();'); echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Ny blokkering av e-post<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <p class="c"><a href="email_blacklist">Tilbake</a></p> <form action="" method="post"> <dl class="dd_right"> <dt>Type</dt> <dd> <select name="eb_type"> <option value="address"' . (postval("eb_type") == "address" ? ' selected="selected"' : '') . '>Spesifikk e-post</option> <option value="domain"' . (postval("eb_type") == "domain" || !isset($_POST['eb_type']) ? ' selected="selected"' : '') . '>Domenenavn</option> </select> </dd> <dt>Verdi</dt> <dd><input type="text" name="eb_value" id="eb_value" class="styled w150" value="' . htmlspecialchars(postval("eb_value")) . '" /></dd> <dt>Notat</dt> <dd><textarea name="eb_note" rows="3" cols="30">' . htmlspecialchars(postval("eb_note")) . '</textarea></dd> </dl> <p class="c">' . show_sbutton("Legg til") . '</p> </form> </div> </div>'; }