- ID de l'analyse :
- c42a010e-38f2-4355-8b5e-a9a702bccdd8Terminée
- URL soumise :
- https://bobobet555.com/
- Fin du rapport :
Liens : 0 trouvé(s)
Liens sortants identifiés à partir de la page
Variables JavaScript : 16 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
0 | object |
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
checkDomain | function |
selectHaUrl | function |
checkUrl | function |
loadIframe | function |
selectApp | function |
login | function |
Messages de journal de console : 5 trouvé(s)
Messages consignés dans la console web
Type | Catégorie | Enregistrement |
---|---|---|
warning | other |
|
error | network |
|
verbose | dom |
|
verbose | dom |
|
verbose | dom |
|
HTML
Le corps HTML de la page en données brutes
<!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>