PageSourceSearch

https://nebulasmp.vercel.app/assets/hesap.js?s=20261002-173936

js nebulasmp.vercel.app collected 2026-10-03 07:22:05 UTC 9,584 bytes, 208 lines download raw bytes

1/* ============================================================
2   SAG UST GIRIS KUTUSU  —  her sayfada
3
4   Sahibin tarifi (2 Eylul): "bastin login'e sag uste, orda login
5   acildi ama baska sekme daha var register diye; ona basinca mc adini
6   giriyon sonra da kendi istedigin sifreyi yaziyon, bu kadar. Beni
7   hatirla secenegi de olcak. Sifremi unuttum'u kaldir."
8
9   Iki sekme, iki kutu:
10     Sign in   ad + sifre + beni hatirla
11     Register  ad + kendi sectigi sifre + beni hatirla
12
13   Ilk surumde kayitta oyun ici 6 haneli kod adimi vardi; sahip onu ve
14   "sifremi unuttum"u kaldirtti.
15
16   Bu dosya kendi basina calisir; sayfaya tek bir <script> satiri
17   eklemek yeter, markup'i kendisi uretiyor.
18   ============================================================ */
19(function () {
20  "use strict";
21
22  var AD_RE = /^[A-Za-z0-9_]{3,16}$/;
23  var nav = document.querySelector(".nav .wrap");
24  if (!nav) return;
25
26  var nick = null, ekran = "giris";
27
28  /* ---------- markup ---------- */
29  var dugme = document.createElement("button");
30  dugme.className = "hs-dugme";
31  dugme.type = "button";
32  dugme.textContent = "SIGN IN";
33  nav.appendChild(dugme);
34
35  var kap = document.createElement("div");
36  kap.className = "hs-ov";
37  kap.hidden = true;
38  kap.innerHTML =
39    '<div class="hs-kutu" role="dialog" aria-modal="true">' +
40      '<button class="hs-kapat" type="button" aria-label="Close">&times;</button>' +
41      /* REGISTER SEKMESI KALDIRILDI (9 Eylul, sahip: "sitede register
42         kalksin, login olsun sitede sadece; herkesin sifresi oyundaki
43         sifresi olsun").
44
45         Site hesabi artik kendiliginden aciliyor: oyuncu oyunda
46         "/login <sifre>" yazdiginda sunucudaki NebulaSiteSifre modulu
47         AYNI sifreyi sitenin bicimiyle (PBKDF2-SHA256) hesaplayip
48         hesabi yaziyor. Yani ayri bir kayit adimi anlamsiz.
49
50         Sunucu tarafi (functions/api/hesap.js) kayit islemini hala
51         kabul ediyor - eski baglantilar kirilmasin diye bilerek
52         birakildi, sadece arayuzden kaldirildi. */
53      '<h3 class="hs-bas">Sign in</h3>' +
54      '<p class="hs-alt"></p>' +
55      '<div class="hs-alan hs-ad"><label>Minecraft name</label>' +
56        '<input id="hs-ad" autocomplete="username" spellcheck="false" maxlength="16" placeholder="XPRAISE"></div>' +
57      /* E-POSTA - sadece kayit sekmesinde gorunur (6 Eylul, sahip:
58         "sitedeki register/login'i degistiriyoruz, e-posta ile
59         register var"). Girişte SORULMUYOR: mevcut hesaplarda
60         e-posta yok, sorsaydik hepsi kilitlenirdi. */
61      /* E-posta alani DURUYOR ama hep gizli: asagidaki kod ePosta'ya
62         bakiyor, elemani silsem null olur ve giris ekrani cokerdi. */
63      '<div class="hs-alan hs-eposta" hidden><label>Email</label>' +
64        '<input id="hs-eposta" type="email" autocomplete="email" ' +
65        'spellcheck="false" maxlength="120" placeholder="[email protected]"></div>' +
66      '<div class="hs-alan hs-sifre"><label id="hs-sifre-et">Password</label>' +
67        '<input id="hs-sifre" type="password" autocomplete="current-password" placeholder="Your password"></div>' +
68      '<label class="hs-hatirla"><input type="checkbox" id="hs-hatirla" checked> Remember me</label>' +
69      '<button class="mcbtn wide hs-git" type="button">Sign in</button>' +
70      '<p class="hs-mesaj" hidden></p>' +
71    '</div>';
72  document.body.appendChild(kap);
73
74  var $ = function (s) { return kap.querySelector(s); };
75  var eAd = $("#hs-ad"), eSifre = $("#hs-sifre"), ePosta = $("#hs-eposta"),
76      eHatirla = $("#hs-hatirla"), eGit = $(".hs-git"), eMesaj = $(".hs-mesaj"),
77      eBas = $(".hs-bas"), eAlt = $(".hs-alt");
78
79  var HATA = {
80    /* Kayit adimi kalkinca "hesabim yok" durumu da bu hataya dusuyor -
81       mesaj ne yapmasi gerektigini soylemeli, yoksa oyuncu takiliyor. */
82    bad_login:          "Wrong name or password. Your site password is your in-game " +
83                        "password: join the server and type /login <password> once, " +
84                        "then sign in here.",
85    bad_username:       "That is not a valid Minecraft name.",
86    kayit_kapali: "Site accounts open by themselves. Log in once in game with /login <password>, then sign in here with the same password.",
87    already_registered: "That name already has an account. Sign in instead.",
88    bad_email: "Type a valid email address.",
89    weak_password:      "Password must be at least 6 characters.",
90    command_failed:     "Could not reach the server. Try again in a moment.",
91    storage_unavailable:"Could not save it. Tell the owner.",
92    no_secret:          "Login is not configured. Tell the owner.",
93    ip_bulunamadi:      "We cannot see you on the server. Join the game once from " +
94                        "this same internet connection, then try again. Turn any VPN off.",
95    ip_uyusmuyor:       "This connection is used by a different player in game. " +
96                        "Register from the connection you actually play on, with any VPN off."
97  };
98
99  function mesaj(t, iyi) {
100    eMesaj.hidden = !t;
101    eMesaj.textContent = t || "";
102    eMesaj.className = "hs-mesaj" + (iyi ? " iyi" : "");
103  }
104
105  /* ---------- ekranlar ----------
106     Iki ekran, iki kutu. Sahibin tarifi aynen: "ad gir, sifre yaz,
107     bu kadar". Oyun ici kod adimi ve "sifremi unuttum" onun istegiyle
108     kaldirildi. */
109  function ciz() {
110    mesaj("");
111    kap.querySelectorAll(".hs-sekme button").forEach(function (b) {
112      b.classList.toggle("on", b.dataset.e === ekran);
113    });
114    if (ekran === "giris") {
115      eBas.textContent = "Sign in";
116      eAlt.textContent = "Use your in-game password - the one you type in /login.";
117      $("#hs-sifre-et").textContent = "Password";
118      eSifre.autocomplete = "current-password";
119      eSifre.placeholder = "Your password";
120      eGit.textContent = "Sign in";
121      kap.querySelector(".hs-eposta").hidden = true;
122    } else {
123      eBas.textContent = "Create your account";
124      eAlt.textContent = "Type your Minecraft name and pick a password for the site.";
125      $("#hs-sifre-et").textContent = "Choose a password (min 6 characters)";
126      eSifre.autocomplete = "new-password";
127      eSifre.placeholder = "A password you pick";
128      eGit.textContent = "Create account";
129      kap.querySelector(".hs-eposta").hidden = false;
130    }
131  }
132
133  /* Kayit ekrani artik ACILMIYOR - cagiran ne derse desin giris. */
134  function ac(e) { ekran = "giris"; kap.hidden = false; ciz();
135    setTimeout(function () { eAd.focus(); }, 40); }
136  function kapa() { kap.hidden = true; }
137
138  dugme.addEventListener("click", function () {
139    if (nick) gonder({ islem: "cikis" }, function () { girisliYap(null); });
140    else ac("giris");
141  });
142  $(".hs-kapat").addEventListener("click", kapa);
143  kap.addEventListener("click", function (e) { if (e.target === kap) kapa(); });
144  document.addEventListener("keydown", function (e) { if (e.key === "Escape") kapa(); });
145  kap.querySelectorAll(".hs-sekme button").forEach(function (b) {
146    b.addEventListener("click", function () { ac(b.dataset.e); });
147  });
148  [eAd, ePosta, eSifre].forEach(function (i) {
149    i.addEventListener("keydown", function (e) { if (e.key === "Enter") eGit.click(); });
150  });
151
152  function gonder(govde, bitti) {
153    fetch("/api/hesap", {
154      method: "POST", headers: { "content-type": "application/json" },
155      body: JSON.stringify(govde),
156    })
157      .then(function (r) { return r.json()["catch"](function () { return null; }); })
158      .then(function (d) { bitti(d); })
159      ["catch"](function () { bitti(null); });
160  }
161
162  eGit.addEventListener("click", function () {
163    var ad = (eAd.value || "").trim();
164    var sifre = eSifre.value || "";
165    if (!AD_RE.test(ad)) return mesaj(HATA.bad_username, false);
166    if (ekran === "kayit" && sifre.length < 6) return mesaj(HATA.weak_password, false);
167    if (!sifre) return mesaj("Type your password.", false);
168    var eposta = (ePosta.value || "").trim();
169    /* Kayitta e-posta ZORUNLU. Kalip kasten gevsek - amac yazim
170       hatasini yakalamak, RFC dogrulamak degil; asiri siki kalip
171       gecerli adresleri reddediyor. */
172    if (ekran === "kayit" && !/^[^@\s]+@[^@\s.]+\.[^@\s]{2,}$/.test(eposta))
173      return mesaj("Type a valid email address.", false);
174
175    var eskiYazi = eGit.textContent;
176    eGit.disabled = true; eGit.textContent = "…";
177    gonder({ islem: ekran, nick: ad, sifre: sifre, eposta: eposta,
178             hatirla: !!eHatirla.checked },
179      function (d) {
180        eGit.disabled = false; eGit.textContent = eskiYazi;
181        if (d && d.ok) { girisliYap(d.nick); kapa(); }
182        else mesaj((d && HATA[d.error]) || "Something went wrong. Try again.", false);
183      });
184  });
185
186  /* ---------- girisli gorunum ---------- */
187  function girisliYap(a) {
188    nick = a || null;
189    if (nick) {
190      dugme.classList.add("girisli");
191      dugme.innerHTML = '<img src="https://mc-heads.net/avatar/' +
192        encodeURIComponent(nick) + '/22" alt=""><span>' + nick + '</span>';
193      dugme.title = "Sign out";
194    } else {
195      dugme.classList.remove("girisli");
196      dugme.textContent = "SIGN IN";
197      dugme.title = "";
198    }
199    /* Sayfalar bunu dinleyip kendi arayuzunu guncelleyebilir
200       (magazada rutbe/kasa kartlarinin kilidi bu olayla aciliyor). */
201    document.dispatchEvent(new CustomEvent("nbhesap", { detail: { nick: nick } }));
202  }
203
204  fetch("/api/hesap", { headers: { accept: "application/json" }, cache: "no-store" })
205    .then(function (r) { return r.json(); })
206    .then(function (d) { girisliYap(d && d.girisli ? d.nick : null); })
207    ["catch"](function () { girisliYap(null); });
208})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.