- ID da verificação
- 49f05549-8126-4b6f-9bcd-da8ae705700dConcluído
- URL enviado:
- https://bobobet555.com/
- Relatório concluído:
Ligações · 0 encontradas
As ligações de saída identificadas na página
Variáveis JavaScript · 16 encontradas
Variáveis JavaScript globais carregadas no objeto janela de uma página são variáveis declaradas fora das funções e acessíveis de qualquer parte do código dentro do âmbito atual
Nome | Tipo |
---|---|
0 | object |
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
checkDomain | function |
selectHaUrl | function |
checkUrl | function |
loadIframe | function |
selectApp | function |
login | function |
Mensagens de registo da consola · 5 encontradas
Mensagens registadas na consola web
Tipo | Categoria | Registo |
---|---|---|
warning | other |
|
error | network |
|
verbose | dom |
|
verbose | dom |
|
verbose | dom |
|
HTML
O corpo HTML em bruto da página
<!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>