PageSourceSearch

https://pupwife.com/scripts/dependencies/ipBanBoot.js

js pupwife.com collected 2026-09-30 15:05:14 UTC 3,815 bytes, 151 lines download raw bytes

1/**
2 * Site-wide IP ban gate — runs in the background while boot/loading overlays show.
3 * Call PupwifeIpBan.start() after the loader paints (loadingScreen.js, citrusBoot.js).
4 * sharedUsername.js loads this script as a fallback on pages without those boot paths.
5 */
6(function () {
7  'use strict';
8
9  if (window.__PUPWIFE_IP_BAN_BOOTED__) {
10    if (window.__PUPWIFE_IP_BAN_PENDING_START__ && window.PupwifeIpBan) {
11      window.PupwifeIpBan.start();
12    }
13    return;
14  }
15  window.__PUPWIFE_IP_BAN_BOOTED__ = true;
16
17  var started = false;
18  var ready = false;
19  var readyResolve;
20  var readyPromise = new Promise(function (resolve) {
21    readyResolve = resolve;
22  });
23
24  function currentPath() {
25    return (window.location.pathname || '').replace(/\\/g, '/');
26  }
27
28  function isExemptPage() {
29    return /\/(fuckoff|banned|admin|hashgenerator)\.html$/i.test(currentPath());
30  }
31
32  function markReady() {
33    if (ready) return;
34    ready = true;
35    clearTimeout(banGateTimeout);
36    readyResolve();
37  }
38
39  window.__unhideAfterBanCheck = markReady;
40
41  var banGateTimeout = setTimeout(markReady, 12000);
42
43  if (isExemptPage()) {
44    markReady();
45  }
46
47  function appendScript(src, onDone) {
48    if (document.querySelector('script[src="' + src + '"]')) {
49      if (onDone) onDone(null);
50      return;
51    }
52    var script = document.createElement('script');
53    script.src = src;
54    script.onload = function () {
55      if (onDone) onDone(null);
56    };
57    script.onerror = function () {
58      if (onDone) onDone(new Error('Failed to load ' + src));
59    };
60    (document.head || document.documentElement).appendChild(script);
61  }
62
63  function startChecker() {
64    appendScript('/scripts/dependencies/ipBanUtils.js', function (err) {
65      if (err) {
66        markReady();
67        return;
68      }
69      appendScript('/scripts/dependencies/ipBanChecker.js', function (checkerErr) {
70        if (checkerErr) markReady();
71      });
72    });
73  }
74
75  function pageDeclaresFirebase() {
76    return !!document.querySelector(
77      'script[src*="firebase-app-compat"], script[src*="firebaseConfig.js"]'
78    );
79  }
80
81  function waitForFirebaseReady(attempts, onReady) {
82    if (typeof window.ensureFirebaseApp === 'function' && window.ensureFirebaseApp()) {
83      onReady();
84      return;
85    }
86    if (attempts > 120) {
87      markReady();
88      return;
89    }
90    setTimeout(function () {
91      waitForFirebaseReady(attempts + 1, onReady);
92    }, 50);
93  }
94
95  function loadFirebaseChain() {
96    if (typeof window.ensureFirebaseApp === 'function' && window.ensureFirebaseApp()) {
97      startChecker();
98      return;
99    }
100
101    if (pageDeclaresFirebase()) {
102      waitForFirebaseReady(0, startChecker);
103      return;
104    }
105
106    if (typeof firebase !== 'undefined' && firebase.database) {
107      appendScript('/scripts/dependencies/firebaseConfig.js', function (err) {
108        if (err) markReady();
109        else startChecker();
110      });
111      return;
112    }
113
114    appendScript('https://www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js', function (err) {
115      if (err) {
116        markReady();
117        return;
118      }
119      appendScript('https://www.gstatic.com/firebasejs/9.22.0/firebase-database-compat.js', function (err2) {
120        if (err2) {
121          markReady();
122          return;
123        }
124        appendScript('/scripts/dependencies/firebaseConfig.js', function (err3) {
125          if (err3) markReady();
126          else startChecker();
127        });
128      });
129    });
130  }
131
132  function start() {
133    if (started || isExemptPage()) return;
134    started = true;
135    loadFirebaseChain();
136  }
137
138  window.PupwifeIpBan = {
139    start: start,
140    whenReady: function () {
141      return readyPromise;
142    },
143    isReady: function () {
144      return ready;
145    }
146  };
147
148  if (window.__PUPWIFE_IP_BAN_PENDING_START__) {
149    start();
150  }
151})();

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.