Compare commits

...

3 Commits

Author SHA1 Message Date
BartekGit d179256f20 Info o HotSpot 2026-05-28 09:54:48 +02:00
BartekGit 720aa1448b Wykluczanie IP karczmy. 2026-05-28 09:33:53 +02:00
BartekGit f4ed9b3982 Walka z iphonem v2 2026-05-27 17:16:53 +02:00
2 changed files with 78 additions and 12 deletions
+1 -1
View File
@@ -31,7 +31,7 @@
Aby zapewnić bezpieczeństwo Twojego zamówienia, musimy upewnić się, że znajdujesz się na terenie Aby zapewnić bezpieczeństwo Twojego zamówienia, musimy upewnić się, że znajdujesz się na terenie
restauracji.<br><br>Prosimy o udzielenie zgody na dostęp do lokalizacji w przeglądarce. restauracji.<br><br>Prosimy o udzielenie zgody na dostęp do lokalizacji w przeglądarce.
</div> </div>
<button class="btn btn-primary" style="margin-top: 24px; max-width: 250px; margin-left: auto; margin-right: auto;" <button id="geoActionBtn" class="btn btn-primary" style="margin-top: 24px; max-width: 250px; margin-left: auto; margin-right: auto;"
onclick="initGeolocation()">Udziel zgody / Sprawdź</button> onclick="initGeolocation()">Udziel zgody / Sprawdź</button>
</div> </div>
</div> </div>
+77 -11
View File
@@ -979,12 +979,37 @@ function startApp() {
}, 25000); }, 25000);
} }
function showGeoConsentScreen() {
const geoScreen = document.getElementById("geoScreen");
const loadingScreen = document.getElementById("loadingScreen");
const geoMsg = document.getElementById("geoMsg");
const geoActionBtn = document.getElementById("geoActionBtn");
loadingScreen.classList.add("hidden");
geoScreen.classList.remove("hidden");
if (geoMsg) {
geoMsg.innerHTML = `Aby zapewnić bezpieczeństwo Twojego zamówienia, musimy upewnić się, że znajdujesz się na terenie restauracji.<br><br>Prosimy o udzielenie zgody na dostęp do lokalizacji w przeglądarce.`;
}
if (geoActionBtn) {
geoActionBtn.disabled = false;
geoActionBtn.textContent = "Udziel zgody / Sprawdź";
}
}
function isIOSDevice() {
return /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
}
function shouldBypassGeolocationHost() {
const bypassHosts = ['82.160.190.247'];
return bypassHosts.includes(window.location.hostname);
}
window.initGeolocation = function () { window.initGeolocation = function () {
const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); if (shouldBypassGeolocationHost()) {
if (isIOS) { console.warn("Bypassing geolocation for trusted host.");
// Tymczasowo pomijamy weryfikację GPS tylko na urządzeniach Apple
// (wymagają bezwzględnie poprawnego certyfikatu HTTPS, inaczej blokują bez pytania)
console.warn("Bypassing geolocation on iOS.");
startApp(); startApp();
return; return;
} }
@@ -992,6 +1017,7 @@ window.initGeolocation = function () {
const geoScreen = document.getElementById("geoScreen"); const geoScreen = document.getElementById("geoScreen");
const loadingScreen = document.getElementById("loadingScreen"); const loadingScreen = document.getElementById("loadingScreen");
const geoMsg = document.getElementById("geoMsg"); const geoMsg = document.getElementById("geoMsg");
const geoActionBtn = document.getElementById("geoActionBtn");
const bypassHosts = ['localhost', '127.0.0.1', '192.168.20.84']; const bypassHosts = ['localhost', '127.0.0.1', '192.168.20.84'];
if (window.location.protocol === 'http:' && bypassHosts.includes(window.location.hostname)) { if (window.location.protocol === 'http:' && bypassHosts.includes(window.location.hostname)) {
@@ -1000,6 +1026,19 @@ window.initGeolocation = function () {
return; return;
} }
if (!window.isSecureContext) {
geoMsg.innerHTML = `<b style="color: #ff6b6b;">Ta strona nie jest uruchomiona w bezpiecznym trybie HTTPS.</b><br><br>
Przeglądarki mobilne blokują geolokalizację bez pytania, jeśli adres nie zaczyna się od <b>https://</b>.<br><br>
Otwórz aplikację przez HTTPS i spróbuj ponownie.<br><br>
<b>Masz problem z lokalizacją?</b> Połącz się z <b>HotSpot Karczmy</b>, a wtedy wejdziesz do aplikacji bez geolokalizacji.<br>
Hasło: <b>karczmabiesiada</b>`;
if (geoActionBtn) {
geoActionBtn.disabled = false;
geoActionBtn.textContent = "Spróbuj ponownie";
}
return;
}
loadingScreen.classList.add("hidden"); loadingScreen.classList.add("hidden");
geoScreen.classList.remove("hidden"); geoScreen.classList.remove("hidden");
@@ -1009,6 +1048,10 @@ window.initGeolocation = function () {
} }
geoMsg.innerHTML = "Sprawdzamy Twoją lokalizację..."; geoMsg.innerHTML = "Sprawdzamy Twoją lokalizację...";
if (geoActionBtn) {
geoActionBtn.disabled = true;
geoActionBtn.textContent = "Sprawdzanie...";
}
navigator.geolocation.getCurrentPosition( navigator.geolocation.getCurrentPosition(
(position) => { (position) => {
@@ -1024,14 +1067,29 @@ window.initGeolocation = function () {
startApp(); startApp();
// setTimeout(() => showToast(`Lokalizacja zweryfikowana (Dystans: ${Math.round(dist)}m, Dokładność: ${Math.round(accuracy)}m)`), 2000); // setTimeout(() => showToast(`Lokalizacja zweryfikowana (Dystans: ${Math.round(dist)}m, Dokładność: ${Math.round(accuracy)}m)`), 2000);
} else { } else {
if (geoActionBtn) {
geoActionBtn.disabled = false;
geoActionBtn.textContent = "Spróbuj ponownie";
}
geoMsg.innerHTML = `Wydaje się, że jesteś poza restauracją (ok. ${Math.round(dist)}m od nas).<br>Nasza aplikacja działa tylko na miejscu.<br><br> geoMsg.innerHTML = `Wydaje się, że jesteś poza restauracją (ok. ${Math.round(dist)}m od nas).<br>Nasza aplikacja działa tylko na miejscu.<br><br>
<small style="color: #888;">Debug: Twoja odległość: ${Math.round(dist)}m, Dokładność sygnału: ${Math.round(accuracy)}m</small><br><br> <small style="color: #888;">Debug: Twoja odległość: ${Math.round(dist)}m, Dokładność sygnału: ${Math.round(accuracy)}m</small><br><br>
Jeśli to błąd GPS lub słaby sygnał, spróbuj ponownie za chwilę.`; Jeśli to błąd GPS lub słaby sygnał, spróbuj ponownie za chwilę.`;
} }
}, },
(error) => { (error) => {
if (error.code === error.PERMISSION_DENIED) { if (geoActionBtn) {
const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); geoActionBtn.disabled = false;
geoActionBtn.textContent = "Spróbuj ponownie";
}
const deniedBecauseInsecure = /secure origins|only secure|https/i.test(String(error.message || ""));
if (deniedBecauseInsecure) {
geoMsg.innerHTML = `<b style="color: #ff6b6b;">Przeglądarka zablokowała lokalizację z powodu braku HTTPS.</b><br><br>
Geolokalizacja działa tylko na bezpiecznym adresie <b>https://</b> (lub localhost).<br>
Otwórz aplikację przez HTTPS i spróbuj ponownie.<br><br>
<b>Masz problem z lokalizacją?</b> Połącz się z <b>HotSpot Karczmy</b>, a wtedy wejdziesz do aplikacji bez geolokalizacji.<br>
Hasło: <b>karczmabiesiada</b>`;
} else if (error.code === error.PERMISSION_DENIED) {
const isIOS = isIOSDevice();
let instructions = ''; let instructions = '';
if (isIOS) { if (isIOS) {
@@ -1040,12 +1098,16 @@ window.initGeolocation = function () {
2. Wybierz <b>"Ustawienia witryny"</b> (Website Settings).<br> 2. Wybierz <b>"Ustawienia witryny"</b> (Website Settings).<br>
3. Zmień opcję <b>"Położenie"</b> (Location) na "Zapytaj" lub "Pozwalaj".<br> 3. Zmień opcję <b>"Położenie"</b> (Location) na "Zapytaj" lub "Pozwalaj".<br>
4. Odśwież stronę.<br><br> 4. Odśwież stronę.<br><br>
<i>Uwaga: Na urządzeniach Apple lokalizacja działa WYŁĄCZNIE, gdy adres strony zaczyna się od bezpiecznego <b>https://</b>. Jeżeli jesteś na http://, system zablokuje to automatycznie.</i>`; <i>Uwaga: Na urządzeniach Apple lokalizacja działa WYŁĄCZNIE, gdy adres strony zaczyna się od bezpiecznego <b>https://</b>. Jeżeli jesteś na http://, system zablokuje to automatycznie.</i><br><br>
<b>Masz problem z lokalizacją?</b> Połącz się z <b>HotSpot Karczmy</b>, a wtedy wejdziesz do aplikacji bez geolokalizacji.<br>
Hasło: <b>karczmabiesiada</b>`;
} else { } else {
instructions = `<b>Instrukcja dla Android / Chrome:</b><br> instructions = `<b>Instrukcja dla Android / Chrome:</b><br>
1. Kliknij ikonkę <b>kłódki / ustawień</b> 🔒 obok adresu strony na górze przeglądarki.<br> 1. Kliknij ikonkę <b>kłódki / ustawień</b> 🔒 obok adresu strony na górze przeglądarki.<br>
2. Znajdź <b>Uprawnienia</b> (Lokalizacja) i zmień z "Zablokuj" na "Zezwalaj".<br> 2. Znajdź <b>Uprawnienia</b> (Lokalizacja) i zmień z "Zablokuj" na "Zezwalaj".<br>
3. Odśwież stronę.`; 3. Odśwież stronę.<br><br>
<b>Masz problem z lokalizacją?</b> Połącz się z <b>HotSpot Karczmy</b>, a wtedy wejdziesz do aplikacji bez geolokalizacji.<br>
Hasło: <b>karczmabiesiada</b>`;
} }
geoMsg.innerHTML = `<b style="color: #ff6b6b;">Przeglądarka zablokowała dostęp do lokalizacji.</b><br><br> geoMsg.innerHTML = `<b style="color: #ff6b6b;">Przeglądarka zablokowała dostęp do lokalizacji.</b><br><br>
@@ -1059,6 +1121,10 @@ window.initGeolocation = function () {
); );
}; };
setTimeout(() => { if (shouldBypassGeolocationHost()) {
startApp();
} else if (isIOSDevice()) {
showGeoConsentScreen();
} else {
initGeolocation(); initGeolocation();
}, 600); }