reaper-arcade-hub 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/js/app.js +43 -9
- package/js/firebase-client.js +21 -7
- package/main/js/app.js +43 -9
- package/main/js/firebase-client.js +21 -7
- package/package.json +3 -2
- package/verify/js/firebase-client.js +21 -7
package/js/app.js
CHANGED
|
@@ -105,14 +105,21 @@ class ReaperHubApp {
|
|
|
105
105
|
window.reaperFirebase.listenBannedUsers((bannedList) => {
|
|
106
106
|
this.bannedUsers = bannedList || [];
|
|
107
107
|
this.renderBannedUsersList();
|
|
108
|
-
|
|
108
|
+
const currentNameLower = (this.currentUser.username || '').toLowerCase();
|
|
109
|
+
const isBannedOnServer = this.bannedUsers.some(u => u.toLowerCase() === currentNameLower);
|
|
110
|
+
|
|
111
|
+
if (this.currentUser.rank !== 'owner' && isBannedOnServer) {
|
|
109
112
|
this.currentUser.isBanned = true;
|
|
110
113
|
localStorage.setItem('reaper_is_banned', 'true');
|
|
111
|
-
localStorage.removeItem('reaper_verified_token');
|
|
112
|
-
localStorage.removeItem('reaper_token_expires');
|
|
113
|
-
localStorage.removeItem('reaper_gateway_verified');
|
|
114
|
-
localStorage.removeItem('reaper_playtime_' + this.currentUser.username);
|
|
115
114
|
this.renderBanScreen("Your account has been permanently blacklisted and all recorded progress has been purged.");
|
|
115
|
+
} else {
|
|
116
|
+
// If unbanned!
|
|
117
|
+
if (this.currentUser.isBanned || document.getElementById('ban-screen-overlay')) {
|
|
118
|
+
this.currentUser.isBanned = false;
|
|
119
|
+
localStorage.removeItem('reaper_is_banned');
|
|
120
|
+
this.removeBanScreen();
|
|
121
|
+
this.showToast("Your account was UNBANNED by an Administrator!");
|
|
122
|
+
}
|
|
116
123
|
}
|
|
117
124
|
});
|
|
118
125
|
window.reaperFirebase.listenShutdownMode((isShutdown) => {
|
|
@@ -2122,7 +2129,17 @@ class ReaperHubApp {
|
|
|
2122
2129
|
}
|
|
2123
2130
|
|
|
2124
2131
|
renderBanScreen(customReason) {
|
|
2125
|
-
|
|
2132
|
+
let overlay = document.getElementById('ban-screen-overlay');
|
|
2133
|
+
if (!overlay) {
|
|
2134
|
+
overlay = document.createElement('div');
|
|
2135
|
+
overlay.id = 'ban-screen-overlay';
|
|
2136
|
+
overlay.style.position = 'fixed';
|
|
2137
|
+
overlay.style.inset = '0';
|
|
2138
|
+
overlay.style.zIndex = '9999999';
|
|
2139
|
+
overlay.style.background = '#000';
|
|
2140
|
+
document.body.appendChild(overlay);
|
|
2141
|
+
}
|
|
2142
|
+
overlay.innerHTML = `
|
|
2126
2143
|
<div style="display: flex; height: 100vh; width: 100vw; background: #000; color: #ff2a2a; font-family: var(--font-mono); align-items: center; justify-content: center; text-align: center; padding: 2rem;">
|
|
2127
2144
|
<div style="border: 2px solid #ff2a2a; padding: 3rem 2rem; max-width: 540px; background: #0c0202; border-radius: 10px; box-shadow: 0 0 40px rgba(255, 42, 42, 0.4);">
|
|
2128
2145
|
<h1 style="font-size: 2.2rem; margin-bottom: 1rem; color: #ff3333;">[PERMANENT BAN]</h1>
|
|
@@ -2135,6 +2152,14 @@ class ReaperHubApp {
|
|
|
2135
2152
|
</div>
|
|
2136
2153
|
</div>
|
|
2137
2154
|
`;
|
|
2155
|
+
overlay.style.display = 'block';
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
removeBanScreen() {
|
|
2159
|
+
const overlay = document.getElementById('ban-screen-overlay');
|
|
2160
|
+
if (overlay) {
|
|
2161
|
+
overlay.remove();
|
|
2162
|
+
}
|
|
2138
2163
|
}
|
|
2139
2164
|
|
|
2140
2165
|
renderPermanentShutdownScreen() {
|
|
@@ -2345,12 +2370,21 @@ class ReaperHubApp {
|
|
|
2345
2370
|
}
|
|
2346
2371
|
|
|
2347
2372
|
async unbanUser(username) {
|
|
2348
|
-
|
|
2373
|
+
if (!username) return;
|
|
2374
|
+
const cleanUser = username.trim();
|
|
2375
|
+
this.bannedUsers = this.bannedUsers.filter(u => u.toLowerCase() !== cleanUser.toLowerCase());
|
|
2349
2376
|
localStorage.setItem('reaper_banned_users', JSON.stringify(this.bannedUsers));
|
|
2377
|
+
|
|
2378
|
+
if ((this.currentUser.username || '').toLowerCase() === cleanUser.toLowerCase()) {
|
|
2379
|
+
this.currentUser.isBanned = false;
|
|
2380
|
+
localStorage.removeItem('reaper_is_banned');
|
|
2381
|
+
this.removeBanScreen();
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2350
2384
|
if (window.reaperFirebase) {
|
|
2351
|
-
await window.reaperFirebase.unbanUser(
|
|
2385
|
+
await window.reaperFirebase.unbanUser(cleanUser);
|
|
2352
2386
|
}
|
|
2353
|
-
this.showToast(`User ${
|
|
2387
|
+
this.showToast(`User ${cleanUser} UNBANNED.`);
|
|
2354
2388
|
this.renderBannedUsersList();
|
|
2355
2389
|
}
|
|
2356
2390
|
|
package/js/firebase-client.js
CHANGED
|
@@ -257,16 +257,17 @@ class FirebaseService {
|
|
|
257
257
|
|
|
258
258
|
async banUser(username) {
|
|
259
259
|
if (!username || username === 'owner') return;
|
|
260
|
+
const cleanUser = username.trim();
|
|
260
261
|
|
|
261
262
|
if (this.db) {
|
|
262
263
|
try {
|
|
263
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
264
|
-
await this.db.ref(`reaperPlaytime/${
|
|
264
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).set(true);
|
|
265
|
+
await this.db.ref(`reaperPlaytime/${cleanUser}`).remove();
|
|
265
266
|
const chatSnap = await this.db.ref('reaperChat').once('value');
|
|
266
267
|
if (chatSnap.exists()) {
|
|
267
268
|
const chats = chatSnap.val();
|
|
268
269
|
for (const msgId of Object.keys(chats)) {
|
|
269
|
-
if (chats[msgId].username
|
|
270
|
+
if (chats[msgId].username && chats[msgId].username.toLowerCase() === cleanUser.toLowerCase()) {
|
|
270
271
|
await this.db.ref(`reaperChat/${msgId}`).remove();
|
|
271
272
|
}
|
|
272
273
|
}
|
|
@@ -277,21 +278,34 @@ class FirebaseService {
|
|
|
277
278
|
}
|
|
278
279
|
|
|
279
280
|
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]');
|
|
280
|
-
if (!localBans.
|
|
281
|
-
localBans.push(
|
|
281
|
+
if (!localBans.some(u => u.toLowerCase() === cleanUser.toLowerCase())) {
|
|
282
|
+
localBans.push(cleanUser);
|
|
282
283
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
|
|
286
287
|
async unbanUser(username) {
|
|
288
|
+
if (!username) return;
|
|
289
|
+
const cleanUser = username.trim();
|
|
290
|
+
|
|
287
291
|
if (this.db) {
|
|
288
292
|
try {
|
|
289
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
293
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).remove();
|
|
294
|
+
const snap = await this.db.ref('reaperBannedUsers').once('value');
|
|
295
|
+
if (snap.exists()) {
|
|
296
|
+
const bans = snap.val();
|
|
297
|
+
for (const k of Object.keys(bans)) {
|
|
298
|
+
if (k.toLowerCase() === cleanUser.toLowerCase()) {
|
|
299
|
+
await this.db.ref(`reaperBannedUsers/${k}`).remove();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
290
303
|
} catch (e) {
|
|
291
304
|
console.warn("Error unbanning user on Firebase:", e);
|
|
292
305
|
}
|
|
293
306
|
}
|
|
294
|
-
|
|
307
|
+
|
|
308
|
+
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]').filter(u => u.toLowerCase() !== cleanUser.toLowerCase());
|
|
295
309
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
296
310
|
}
|
|
297
311
|
|
package/main/js/app.js
CHANGED
|
@@ -105,14 +105,21 @@ class ReaperHubApp {
|
|
|
105
105
|
window.reaperFirebase.listenBannedUsers((bannedList) => {
|
|
106
106
|
this.bannedUsers = bannedList || [];
|
|
107
107
|
this.renderBannedUsersList();
|
|
108
|
-
|
|
108
|
+
const currentNameLower = (this.currentUser.username || '').toLowerCase();
|
|
109
|
+
const isBannedOnServer = this.bannedUsers.some(u => u.toLowerCase() === currentNameLower);
|
|
110
|
+
|
|
111
|
+
if (this.currentUser.rank !== 'owner' && isBannedOnServer) {
|
|
109
112
|
this.currentUser.isBanned = true;
|
|
110
113
|
localStorage.setItem('reaper_is_banned', 'true');
|
|
111
|
-
localStorage.removeItem('reaper_verified_token');
|
|
112
|
-
localStorage.removeItem('reaper_token_expires');
|
|
113
|
-
localStorage.removeItem('reaper_gateway_verified');
|
|
114
|
-
localStorage.removeItem('reaper_playtime_' + this.currentUser.username);
|
|
115
114
|
this.renderBanScreen("Your account has been permanently blacklisted and all recorded progress has been purged.");
|
|
115
|
+
} else {
|
|
116
|
+
// If unbanned!
|
|
117
|
+
if (this.currentUser.isBanned || document.getElementById('ban-screen-overlay')) {
|
|
118
|
+
this.currentUser.isBanned = false;
|
|
119
|
+
localStorage.removeItem('reaper_is_banned');
|
|
120
|
+
this.removeBanScreen();
|
|
121
|
+
this.showToast("Your account was UNBANNED by an Administrator!");
|
|
122
|
+
}
|
|
116
123
|
}
|
|
117
124
|
});
|
|
118
125
|
window.reaperFirebase.listenShutdownMode((isShutdown) => {
|
|
@@ -2122,7 +2129,17 @@ class ReaperHubApp {
|
|
|
2122
2129
|
}
|
|
2123
2130
|
|
|
2124
2131
|
renderBanScreen(customReason) {
|
|
2125
|
-
|
|
2132
|
+
let overlay = document.getElementById('ban-screen-overlay');
|
|
2133
|
+
if (!overlay) {
|
|
2134
|
+
overlay = document.createElement('div');
|
|
2135
|
+
overlay.id = 'ban-screen-overlay';
|
|
2136
|
+
overlay.style.position = 'fixed';
|
|
2137
|
+
overlay.style.inset = '0';
|
|
2138
|
+
overlay.style.zIndex = '9999999';
|
|
2139
|
+
overlay.style.background = '#000';
|
|
2140
|
+
document.body.appendChild(overlay);
|
|
2141
|
+
}
|
|
2142
|
+
overlay.innerHTML = `
|
|
2126
2143
|
<div style="display: flex; height: 100vh; width: 100vw; background: #000; color: #ff2a2a; font-family: var(--font-mono); align-items: center; justify-content: center; text-align: center; padding: 2rem;">
|
|
2127
2144
|
<div style="border: 2px solid #ff2a2a; padding: 3rem 2rem; max-width: 540px; background: #0c0202; border-radius: 10px; box-shadow: 0 0 40px rgba(255, 42, 42, 0.4);">
|
|
2128
2145
|
<h1 style="font-size: 2.2rem; margin-bottom: 1rem; color: #ff3333;">[PERMANENT BAN]</h1>
|
|
@@ -2135,6 +2152,14 @@ class ReaperHubApp {
|
|
|
2135
2152
|
</div>
|
|
2136
2153
|
</div>
|
|
2137
2154
|
`;
|
|
2155
|
+
overlay.style.display = 'block';
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
removeBanScreen() {
|
|
2159
|
+
const overlay = document.getElementById('ban-screen-overlay');
|
|
2160
|
+
if (overlay) {
|
|
2161
|
+
overlay.remove();
|
|
2162
|
+
}
|
|
2138
2163
|
}
|
|
2139
2164
|
|
|
2140
2165
|
renderPermanentShutdownScreen() {
|
|
@@ -2345,12 +2370,21 @@ class ReaperHubApp {
|
|
|
2345
2370
|
}
|
|
2346
2371
|
|
|
2347
2372
|
async unbanUser(username) {
|
|
2348
|
-
|
|
2373
|
+
if (!username) return;
|
|
2374
|
+
const cleanUser = username.trim();
|
|
2375
|
+
this.bannedUsers = this.bannedUsers.filter(u => u.toLowerCase() !== cleanUser.toLowerCase());
|
|
2349
2376
|
localStorage.setItem('reaper_banned_users', JSON.stringify(this.bannedUsers));
|
|
2377
|
+
|
|
2378
|
+
if ((this.currentUser.username || '').toLowerCase() === cleanUser.toLowerCase()) {
|
|
2379
|
+
this.currentUser.isBanned = false;
|
|
2380
|
+
localStorage.removeItem('reaper_is_banned');
|
|
2381
|
+
this.removeBanScreen();
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2350
2384
|
if (window.reaperFirebase) {
|
|
2351
|
-
await window.reaperFirebase.unbanUser(
|
|
2385
|
+
await window.reaperFirebase.unbanUser(cleanUser);
|
|
2352
2386
|
}
|
|
2353
|
-
this.showToast(`User ${
|
|
2387
|
+
this.showToast(`User ${cleanUser} UNBANNED.`);
|
|
2354
2388
|
this.renderBannedUsersList();
|
|
2355
2389
|
}
|
|
2356
2390
|
|
|
@@ -257,16 +257,17 @@ class FirebaseService {
|
|
|
257
257
|
|
|
258
258
|
async banUser(username) {
|
|
259
259
|
if (!username || username === 'owner') return;
|
|
260
|
+
const cleanUser = username.trim();
|
|
260
261
|
|
|
261
262
|
if (this.db) {
|
|
262
263
|
try {
|
|
263
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
264
|
-
await this.db.ref(`reaperPlaytime/${
|
|
264
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).set(true);
|
|
265
|
+
await this.db.ref(`reaperPlaytime/${cleanUser}`).remove();
|
|
265
266
|
const chatSnap = await this.db.ref('reaperChat').once('value');
|
|
266
267
|
if (chatSnap.exists()) {
|
|
267
268
|
const chats = chatSnap.val();
|
|
268
269
|
for (const msgId of Object.keys(chats)) {
|
|
269
|
-
if (chats[msgId].username
|
|
270
|
+
if (chats[msgId].username && chats[msgId].username.toLowerCase() === cleanUser.toLowerCase()) {
|
|
270
271
|
await this.db.ref(`reaperChat/${msgId}`).remove();
|
|
271
272
|
}
|
|
272
273
|
}
|
|
@@ -277,21 +278,34 @@ class FirebaseService {
|
|
|
277
278
|
}
|
|
278
279
|
|
|
279
280
|
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]');
|
|
280
|
-
if (!localBans.
|
|
281
|
-
localBans.push(
|
|
281
|
+
if (!localBans.some(u => u.toLowerCase() === cleanUser.toLowerCase())) {
|
|
282
|
+
localBans.push(cleanUser);
|
|
282
283
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
|
|
286
287
|
async unbanUser(username) {
|
|
288
|
+
if (!username) return;
|
|
289
|
+
const cleanUser = username.trim();
|
|
290
|
+
|
|
287
291
|
if (this.db) {
|
|
288
292
|
try {
|
|
289
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
293
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).remove();
|
|
294
|
+
const snap = await this.db.ref('reaperBannedUsers').once('value');
|
|
295
|
+
if (snap.exists()) {
|
|
296
|
+
const bans = snap.val();
|
|
297
|
+
for (const k of Object.keys(bans)) {
|
|
298
|
+
if (k.toLowerCase() === cleanUser.toLowerCase()) {
|
|
299
|
+
await this.db.ref(`reaperBannedUsers/${k}`).remove();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
290
303
|
} catch (e) {
|
|
291
304
|
console.warn("Error unbanning user on Firebase:", e);
|
|
292
305
|
}
|
|
293
306
|
}
|
|
294
|
-
|
|
307
|
+
|
|
308
|
+
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]').filter(u => u.toLowerCase() !== cleanUser.toLowerCase());
|
|
295
309
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
296
310
|
}
|
|
297
311
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reaper-arcade-hub",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Reaper Hub - 788 High-Speed HTML5 Games, AI Name Privacy Filter, Global Chat Deletion, Potato PC Performance Mode, Top Plays, Realtime Chat, Private DMs, Playtime Leaderboard & Verification Gateway",
|
|
3
|
+
"version": "1.1.2",
|
|
4
|
+
"description": "Reaper Hub - 788 High-Speed HTML5 Games, Instant Reactive Unban & Ban Engine, AI Name Privacy Filter, Global Chat Deletion, Potato PC Performance Mode, Top Plays, Realtime Chat, Private DMs, Playtime Leaderboard & Verification Gateway",
|
|
5
5
|
"main": "main/index.html",
|
|
6
6
|
"unpkg": "main/index.html",
|
|
7
7
|
"jsdelivr": "main/index.html",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"html5",
|
|
15
15
|
"unblocked",
|
|
16
16
|
"arcade",
|
|
17
|
+
"unban",
|
|
17
18
|
"moderation",
|
|
18
19
|
"privacy",
|
|
19
20
|
"performance",
|
|
@@ -257,16 +257,17 @@ class FirebaseService {
|
|
|
257
257
|
|
|
258
258
|
async banUser(username) {
|
|
259
259
|
if (!username || username === 'owner') return;
|
|
260
|
+
const cleanUser = username.trim();
|
|
260
261
|
|
|
261
262
|
if (this.db) {
|
|
262
263
|
try {
|
|
263
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
264
|
-
await this.db.ref(`reaperPlaytime/${
|
|
264
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).set(true);
|
|
265
|
+
await this.db.ref(`reaperPlaytime/${cleanUser}`).remove();
|
|
265
266
|
const chatSnap = await this.db.ref('reaperChat').once('value');
|
|
266
267
|
if (chatSnap.exists()) {
|
|
267
268
|
const chats = chatSnap.val();
|
|
268
269
|
for (const msgId of Object.keys(chats)) {
|
|
269
|
-
if (chats[msgId].username
|
|
270
|
+
if (chats[msgId].username && chats[msgId].username.toLowerCase() === cleanUser.toLowerCase()) {
|
|
270
271
|
await this.db.ref(`reaperChat/${msgId}`).remove();
|
|
271
272
|
}
|
|
272
273
|
}
|
|
@@ -277,21 +278,34 @@ class FirebaseService {
|
|
|
277
278
|
}
|
|
278
279
|
|
|
279
280
|
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]');
|
|
280
|
-
if (!localBans.
|
|
281
|
-
localBans.push(
|
|
281
|
+
if (!localBans.some(u => u.toLowerCase() === cleanUser.toLowerCase())) {
|
|
282
|
+
localBans.push(cleanUser);
|
|
282
283
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
|
|
286
287
|
async unbanUser(username) {
|
|
288
|
+
if (!username) return;
|
|
289
|
+
const cleanUser = username.trim();
|
|
290
|
+
|
|
287
291
|
if (this.db) {
|
|
288
292
|
try {
|
|
289
|
-
await this.db.ref(`reaperBannedUsers/${
|
|
293
|
+
await this.db.ref(`reaperBannedUsers/${cleanUser}`).remove();
|
|
294
|
+
const snap = await this.db.ref('reaperBannedUsers').once('value');
|
|
295
|
+
if (snap.exists()) {
|
|
296
|
+
const bans = snap.val();
|
|
297
|
+
for (const k of Object.keys(bans)) {
|
|
298
|
+
if (k.toLowerCase() === cleanUser.toLowerCase()) {
|
|
299
|
+
await this.db.ref(`reaperBannedUsers/${k}`).remove();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
290
303
|
} catch (e) {
|
|
291
304
|
console.warn("Error unbanning user on Firebase:", e);
|
|
292
305
|
}
|
|
293
306
|
}
|
|
294
|
-
|
|
307
|
+
|
|
308
|
+
const localBans = JSON.parse(localStorage.getItem('reaper_banned_users') || '[]').filter(u => u.toLowerCase() !== cleanUser.toLowerCase());
|
|
295
309
|
localStorage.setItem('reaper_banned_users', JSON.stringify(localBans));
|
|
296
310
|
}
|
|
297
311
|
|