https://bobobet555.com/

Submitted URL:
https://bobobet555.com/
Report Finished:

The outgoing links identified from the page

JavaScript Variables · 16 found

Global JavaScript variables loaded on the window object of a page, are variables declared outside of functions and accessible from anywhere in the code within the current scope

NameType
0object
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
checkDomainfunction
selectHaUrlfunction
checkUrlfunction
loadIframefunction
selectAppfunction
loginfunction

Console log messages · 5 found

Messages logged to the web console

TypeCategoryLog
warningother
URL
https://bobobet555.com/
Text
Allow attribute will take precedence over 'allowfullscreen'.
errornetwork
URL
https://bobobet555.com/favicon.ico
Text
Failed to load resource: the server responded with a status of 404 ()
verbosedom
URL
https://bobobet555.com/front/login/index.html
Text
[DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o
verbosedom
URL
https://bobobet555.com/front/login/index.html
Text
[DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o
verbosedom
URL
https://bobobet555.com/front/login/index.html
Text
[DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o

HTML

The raw HTML body of the page

<!DOCTYPE html><html lang="en"><head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no viewport-fit=cover">
    <!--    <meta name="theme-color" content="#000" />-->
    <title>...</title>
    <link id="favicon" rel="icon" type="image/x-icon" href="front/face/all/current/z54/favicon.ico">
    <style>
      * {
        box-sizing: border-box;
      }
      html,
      body {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
        overflow: hidden;
      }
      #app-iframe {
        position: relative;
        width: 100%;
        height: 100%;
        border: 0;
      }
      img {
        display: none;
      }
      body.bodyLandscape {
        padding-top: 10vh !important;
        height: 110vh;
        width: calc(100% - 80px);
        margin: 0 40px;
        padding: 0;
        overflow: auto;
      }
      .bodyScrolled {
        width: 100% !important;
        margin: 0 !important;
      }
      #app-iframe {
        position: relative;
        width: 100%;
        height: 100%;
        border: 0;
      }
      img {
        display: none;
      }
      @keyframes drag_animation {
        0% {
          transform: scale(1);
        }

        25% {
          transform: scale(1.5);
        }

        30% {
          transform: scale(1);
        }

        60% {
          opacity: 1;
        }

        to {
          transform: translateY(-200px);
          opacity: 0;
        }
      }
      .iosfullscreen {
        position: absolute;
        display: block;
        height: 150vh;
        pointer-events: all;
        color: #fff;
        top: 0;
        left: 0;
        width: 100%;
        background-color: #000;
        z-index: 1500;
        overflow: scroll;
      }

      .iosdragFullscreen {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
      }

      .iosscrollarea {
        position: relative;
        top: 0;
        left: 0;
        width: 100%;
        height: 100vh;
      }
      .iosscrollarea .warning {
        position: fixed;
        width: 60vw;
        height: 30vw;
        top: calc(50% - 15vw);
        left: calc(50% - 30vw);
        text-align: center;
      }
      .iosscrollarea .animation {
        position: absolute;
        top: 50vh;
        right: 15px;
        width: 50px;
        height: 50px;
        background-size: 100% 100%;
        background-position: 50%;
        background-repeat: no-repeat;
        background-image: url("./casinohand.webp");
        animation-name: drag_animation;
        animation-duration: 4s;
        animation-iteration-count: infinite;
      }
      #iphoneTest {
        display: none;
      }
    </style>
  <link rel="apple-touch-icon" href="front/face/all/current/z54/favicon.ico"></head>
  <body>
    <div id="iphoneTest" style="overflow: scroll" class="background iosfullscreen">
      <div class="element iosdragFullscreen">
        <div class="element background iosscrollarea">
          <div class="warning">
            <span id="drag-fullscreen-title" class="element title text-title">This game needs to be in fullscreen </span>
            <br>
            <span id="drag-fullscreen-message" class="element body text-title-1"> Use your finger to drag the screen </span>
          </div>
          <div class="animation"></div>
        </div>
      </div>
    </div>
    <script>
      let [domain, supportHa] = checkDomain();
      const haList = ["s1", "s2"];
      const af = /#af=([^#]*)/.exec(window.location.href);
      if (af && af[1]) {
        sessionStorage.afId = af[1];
      }

      function checkDomain() {
        let _domain = window.location.host;
        if (_domain === "localhost" || _domain === "192.168.2.12") return [_domain, false];
        const tempHostArray = window.location.host.split(".");

        if (["s1", "s2", "devel", "intern", "shop", "terminal"].includes(tempHostArray[0])) {
          _domain = tempHostArray.slice(1).join(".");
          return [_domain, false];
        }
        if (tempHostArray[0] === "www") {
          _domain = tempHostArray.slice(1).join(".");
        }
        return [_domain, true];
      }

      async function selectHaUrl(_haList) {
        if (supportHa) {
          const rand = Math.floor(Math.random() * _haList.length);
          if (_haList[rand]) {
            const url = `${window.location.protocol}//${_haList[rand]}.${domain}/`;
            if (!(await checkUrl(url))) {
              _haList.splice(rand, rand + 1);
              if (_haList.length === 1) {
                return `${window.location.protocol}//${_haList[0]}.${domain}/`;
              } else {
                return selectHaUrl(_haList);
              }
            }
            return url;
          } else {
            alert("Can't connect with server");
          }
        } else {
          return "";
        }
      }

      // TODO: remove
      function checkUrl(_url) {
        // TODO: fix cors error
        return true;
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), 5000);
        return fetch(`${_url}index.html`, { signal: controller.signal })
          .then((r) => {
            return true;
          })
          .catch((e) => {
            console.error(e);
            return false;
          });
      }

      function loadIframe(path) {
        if (document.getElementById("app-iframe")) {
          document.getElementById("app-iframe").remove();
        }
        const iframe = document.createElement("iframe");
        iframe.src = selectApp(path);
        iframe.id = "app-iframe";
        iframe.name = "app";
        iframe.scrolling = "yes";
        iframe.allow = "fullscreen";
        iframe.allowFullscreen = true;
        document.body.appendChild(iframe);
      }

      function selectApp(path) {
        let core = +localStorage.core_v === 2 ? "sp/fmcore/current" : "portal";
        // core = "portal";
        if (localStorage.user_type === "manager") {
          const params = window.location.href.split("?")[1] || "";
          if (params.includes("sbooking")) {
            return `${path}front/${core}/index.html`;
          }
          // return `${path}front/${core}/index.html`;
          return `${path}front/mng/index.html`;
        }
        return `${path}front/${core}/index.html`;
      }

      async function login({ username, password, shard, part, haUrl, saveDevice }) {
        haUrl = haUrl || (await selectHaUrl(haList));
        if (typeof haUrl === "undefined") {
          return;
        }
        const headers = {
          "Content-Type": "application/json",
        };
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        fetch(`${haUrl}aaa/login`, {
          method: "POST",
          headers,
          body: JSON.stringify({ username, password, shard, part: part * 1 }),
        })
          .then((response) => {
            if (response.status === 200) {
              return response;
            } else {
              throw new Error(`Can't login!:${response.status}`);
            }
          })
          .then((response) => response.json())
          .then(async (data) => {
            if (data.rToken) {
              try {
                const user = JSON.parse(atob(data.rToken.split(".")[1]));
                if ([10, 11, 12].includes(user.role * 1)) {
                  localStorage.user_type = "manager";
                }
                localStorage.token = data.rToken;
                localStorage.user = JSON.stringify(user);
                localStorage.lastUser = user.id;
                localStorage["Auth-Usr"] = `${shard}${part}:${user.id}`;
                if (saveDevice) {
                  await trustDevice(haUrl, username, password, data.rToken);
                }
                window.location.reload();
              } catch (error) {
                console.log(error);
                alert(error.message);
              }
            }
          })
          .catch((error) => {
            console.log(error);
            alert(error.message);
          });
      }

      function trustDevice(haUrl, username, password, rToken) {
        const headers = {
          "Content-Type": "application/json",
          "x-access-token": rToken,
        };
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(`${haUrl}aaa/login_trust`, {
          method: "POST",
          headers,
          body: JSON.stringify({ username, password }),
        })
          .then((response) => {
            if (response.status === 200) {
              return response;
            } else {
              throw new Error(`Device not saved!:${response.status}`);
            }
          })
          .then((response) => response.json())
          .then(async (data) => {
            if (data.rToken) {
              try {
                const user = JSON.parse(atob(data.rToken.split(".")[1]));
                localStorage.token = data.rToken;
                localStorage.user = JSON.stringify(user);
              } catch (error) {
                console.log(error);
                alert(error.message);
              }
            }
          })
          .catch((error) => {
            console.log(error);
            alert(error.message);
          });
      }

      async function logout(haUrl, rToken) {
        haUrl = haUrl || (await selectHaUrl(haList));
        const headers = {
          "Content-Type": "application/json",
          "x-access-token": rToken,
        };
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(`${haUrl}aaa/logout`, {
          method: "POST",
          headers,
        }).catch((error) => {
          console.log(error);
          alert(error.message);
        });
      }

      async function u_logout(haUrl, rToken) {
        haUrl = haUrl || (await selectHaUrl(haList));
        const headers = {
          "Content-Type": "application/json",
          "x-access-token": rToken,
        };
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(`${haUrl}aaa/u_logout`, {
          method: "POST",
          headers,
        })
          .then((response) => response.json())
          .catch((error) => {
            console.log(error);
            alert(error.message);
          });
      }

      async function bookTicket(dataToSend, haUrl) {
        if (!haUrl) {
          haUrl = await selectHaUrl(haList);
        }
        if (typeof haUrl === "undefined") {
          return;
        }
        const method = "back/.in?action=nologin_call&subaction=set_book_ticket";
        const headers = {};
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(haUrl + method, {
          method: "POST",
          body: dataToSend,
          headers,
        }).then((response) => response.json());
      }

      async function searchTicket(data) {
        let { ticketNr, ticketCode, haUrl } = data;
        if (!haUrl) {
          haUrl = await selectHaUrl(haList);
        }
        if (typeof haUrl === "undefined") {
          return { Error: true, Message: "API Url Error!" };
        }
        let method = "back/.in?action=nologin_call&subaction=search_ticket";
        method += "&ticket_code=" + ticketCode;

        if (Number.isNaN(+ticketNr)) {
          method += "&ticket_name=" + ticketNr;
        } else {
          method += "&ticket_id=" + ticketNr;
        }
        const headers = {};
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(haUrl + method, {
          method: "POST",
          headers,
        }).then((response) => response.json());
      }

      async function getJackpot(data) {
        let { haUrl, model } = data;
        if (!haUrl) {
          haUrl = await selectHaUrl(haList);
        }
        let method = `back/.in?action=nologin_call&subaction=jackpot&model=${model}`;

        const headers = {};
        if (localStorage["Auth-Usr"]) {
          headers["Auth-Usr"] = localStorage["Auth-Usr"];
        }
        return fetch(haUrl + method, {
          method: "POST",
          headers,
        }).then((response) => response.json());
      }

      // init
      (async () => {
        let path = "";
        if (localStorage.token) {
          path = await selectHaUrl(haList);
        }
        loadIframe(path);
      })();

      window.addEventListener("message", async (event) => {
        switch (event.data.action) {
          case "fmcore-loaded": {
            const out = {
              action: "app-init",
              payload: {
                domain,
                token: localStorage.token,
                user: localStorage.user,
                facePath: "../../../face/",
                appsPath: "../../../",
              },
            };
            if (window.location.href.split("?").length > 1) {
              out.payload.params = window.location.href.split("?")[1];
            }
            window.frames.app.postMessage(out, "*");

            out.action = "fmcore-init";
            window.frames.app.postMessage(out, "*");

            // disable back button
            history.pushState(null, document.title, location.href);
            window.addEventListener("popstate", function () {
              history.pushState(null, document.title, location.href);
            });
            break;
          }
          case "app-init": {
            const out = {
              action: "app-init",
              payload: {
                domain,
                token: localStorage.token,
                user: localStorage.user,
                facePath: "../face/",
              },
            };
            if (window.location.href.split("?").length > 1) {
              out.payload.params = window.location.href.split("?")[1];
            }
            window.frames.app.postMessage(out, "*");

            out.action = "fmcore-init";
            window.frames.app.postMessage(out, "*");

            // disable back button
            history.pushState(null, document.title, location.href);
            window.addEventListener("popstate", function () {
              history.pushState(null, document.title, location.href);
            });
            break;
          }
          case "login": {
            if (event.data.payload.hasOwnProperty("shard") && event.data.payload.hasOwnProperty("part")) {
              await login(event.data.payload);
            } else {
              alert("Missing domain configurations!");
            }
            break;
          }
          case "logout": {
            const { haUrl, shard, part } = event.data.payload || {};
            if (shard && part) {
              await logout(haUrl, localStorage.token);
            }
            delete localStorage.token;
            delete localStorage.user_type;
            window.location.reload();
            break;
          }
          case "u_logout": {
            const { haUrl, rToken } = event.data.payload;
            if (event.data.payload.hasOwnProperty("shard") && event.data.payload.hasOwnProperty("part")) {
              const message = await u_logout(haUrl, rToken);
              const out = {
                action: "u_logout_response",
                payload: {
                  message,
                },
              };
              window.frames.app.postMessage(out, "*");
            }
            break;
          }
          case "delete-cred": {
            delete localStorage.token;
            delete localStorage.user_type;
            break;
          }
          case "reload": {
            window.location.reload();
            break;
          }
          case "book-ticket-api": {
            const { data, haUrl } = event.data.payload;
            let formData = new FormData();
            formData.append("data", JSON.stringify(data));
            const response = await bookTicket(formData, haUrl);
            if (event.ports?.[0]) {
              event.ports[0].postMessage(response);
            } else {
              const out = {
                action: "book-ticket-response",
                payload: { data: response },
              };
              window.frames.app.postMessage(out, "*");
            }
            break;
          }
          case "search-ticket-api": {
            const response = await searchTicket(event.data.payload);
            if (event.ports?.[0]) {
              event.ports[0].postMessage(response);
            } else {
              const out = {
                action: "search-ticket-response",
                payload: response,
              };
              window.frames.app.postMessage(out, "*");
            }
            break;
          }
          case "get-sessionStorage": {
            const { param } = event.data.payload;
            if (event.ports && event.ports[0]) {
              event.ports[0].postMessage(sessionStorage.getItem(param));
            }
            break;
          }
          case "get-localStorage-async": {
            const { param } = event.data.payload;
            if (event.ports && event.ports[0]) {
              event.ports[0].postMessage(localStorage.getItem(param));
            }
            break;
          }
          case "get-localStorage": {
            const { param } = event.data.payload;
            const out = {
              action: "get-localStorage",
              payload: {
                [param]: localStorage[param],
              },
            };

            window.frames.app.postMessage(out, "*");
            break;
          }
          case "set-sessionStorage": {
            const { param, value } = event.data.payload;
            sessionStorage[param] = value;
            break;
          }
          case "del-sessionStorage": {
            const { param } = event.data.payload;
            sessionStorage.removeItem(param);
            break;
          }
          case "del-localStorage": {
            const { param } = event.data.payload;
            localStorage.removeItem(param);
            break;
          }
          case "set-localStorage": {
            const { param, value } = event.data.payload;
            localStorage[param] = value;
            break;
          }
          case "set-title": {
            document.title = event.data.payload.title;
            break;
          }
          case "set-meta": {
            const { name, value } = event.data.payload;
            if (document.querySelector(`meta[name="${name}"]`)) {
              document.querySelector(`meta[name="${name}"]`).content = value;
            } else {
              const meta = document.createElement("meta");
              meta.setAttribute("name", name);
              meta.content = value;
              document.getElementsByTagName("head")[0].appendChild(meta);
            }
            break;
          }
          case "set-favicon": {
            const { path } = event.data.payload;
            document.getElementById("favicon").href = `front/face/${path}`;
            let head = window.parent.document.getElementsByTagName("head")[0];
            let link = window.parent.document.createElement("link");
            link.rel = "apple-touch-icon";
            link.href = `front/face/${path}`;
            head.appendChild(link);
            break;
          }
          case "printPost": {
            window.parent.postMessage(event.data.payload, "*");
            break;
          }
          case "open-sl": {
            const { type } = event.data.payload;
            const url = `${window.location.protocol}://${window.location.host}/?screen&type=${type}`;
            window.open(url);
            break;
          }
          case "open-sl-param": {
            const { param } = event.data.payload;
            const url = `${window.location.protocol}//${window.location.host}/${param}`;
            window.open(url);
            break;
          }
          case "open-window": {
            const { path, setCookie } = event.data.payload;
            if (setCookie) {
              document.cookie = `obs_wa=${localStorage.token};path=/;domain=${domain}`;
            }
            const url = `${await selectHaUrl(haList)}${path}`;
            window.open(url, "_blank", "height=600,width=600");
            // console.log('open-sl')
            break;
          }
          case "redirect": {
            const { path } = event.data.payload;
            window.location.href = path;
            break;
          }
          case "load-chat-smartsupp": {
            const { key, offset = "" } = event.data.payload;

            window._smartsupp = window._smartsupp || {};
            const [x, y] = offset.split(",");
            if (x) window._smartsupp.offsetX = x;
            if (y) window._smartsupp.offsetY = y;
            window._smartsupp.key = key;
            window.smartsupp ||
              (function (d) {
                let smartsupp;
                var s,
                  c,
                  o = (smartsupp = function () {
                    o._.push(arguments);
                  });
                o._ = [];
                s = d.getElementsByTagName("script")[0];
                c = d.createElement("script");
                c.type = "text/javascript";
                c.charset = "utf-8";
                c.async = true;
                c.src = "//www.smartsuppchat.com/loader.js?";
                s.parentNode.insertBefore(c, s);
              })(document);
            break;
          }
          case "load-google-tag-manager": {
            const { key } = event.data.payload;
            (function (w, d, s, l, i) {
              w[l] = w[l] || [];
              w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
              var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l !== "dataLayer" ? "&l=" + l : "";
              j.async = true;
              j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
              f.parentNode.insertBefore(j, f);
            })(window, document, "script", "dataLayer", key);
            break;
          }
          case "get-jackpot": {
            const response = await getJackpot(event.data.payload);
            if (event.ports?.[0]) {
              event.ports[0].postMessage(response);
            } else {
              const out = {
                action: "get-jackpot-response",
                payload: response,
              };
              window.frames.app.postMessage(out, "*");
            }
            break;
          }
          default:
            break;
        }
      });
    </script><iframe src="front/portal/index.html" id="app-iframe" name="app" scrolling="yes" allow="fullscreen" allowfullscreen=""></iframe>
  

</body></html>