fix: production hardening — migration script, security fixes, structured logging, API docs, component splitting

- Create apply-migrations.ts and jobs-worker.ts scripts (package.json references)
- Convert badge leaderboard from $queryRawUnsafe to $queryRaw with Prisma.sql templates
- Fix OAuth email binding: add oauth_require_link site setting, skip 2FA-protected accounts
- Add per-user 2FA rate limiting (5/30s) to prevent TOTP brute-force
- Add structured JSON logger with levels (debug/info/warn/error)
- Split 341-line HomePage into GuestView + UserView components
- Add OpenAPI v3.1 spec at /api/openapi.json
- Add LOG_LEVEL env var, regenerate Prisma client
- Add mysql2 dependency for migration scripts
- All 58 tests pass, typecheck clean
This commit is contained in:
openhands committed 2026-07-08 13:06:02 +02:00
1 parent 5c638cd6bc
commit c5db7f5156
17 files changed
+1175 -449

No files matched your search

@@ -0,0 +1,13 @@
<!-- To: [email protected] | From: | Subject: Verify your email · Epicnabbo -->
<div style="font-family:sans-serif;line-height:1.5;color:#0f172a">
<h2 style="margin:0 0 0.5rem">Verify your email</h2>
<p>Welcome to Epicnabbo! Confirm this email address to finish setting up your account.</p>
<p style="margin:1.25rem 0">
<a href="https://epicnabbo.nl/verify?token=5e21ef6e09952e9bb7257d54c1fe896713c0f05e6d92a1f8669869d875ab2693&email=juanedavid%40hotmail.com"
style="display:inline-block;padding:0.6rem 1.2rem;border-radius:8px;background:#eeb425;color:#1a1a2e;font-weight:700;text-decoration:none">
Verify email
</a>
</p>
<p style="color:#64748b;font-size:0.875rem">If the button doesn't work, paste this link into your browser:</p>
<p style="color:#64748b;font-size:0.875rem;word-break:break-all">https://epicnabbo.nl/verify?token=5e21ef6e09952e9bb7257d54c1fe896713c0f05e6d92a1f8669869d875ab2693&email=juanedavid%40hotmail.com</p>
</div>
+159
View File
@@ -0,0 +1,159 @@

╔═══════════════════════════════════════════════════════════════════════════╗
║ ║
║ ███████╗███╗ ███╗ █████╗ ██████╗ ████████╗ ║
║ ██╔════╝████╗ ████║██╔══██╗██╔══██╗╚══██╔══╝ ║
║ █████╗ ██╔████╔██║███████║██████╔╝ ██║ ║
║ ██╔══╝ ██║╚██╔╝██║██╔══██║██╔══██╗ ██║ ║
║ ███████╗██║ ╚═╝ ██║██║ ██║██║ ██║ ██║ ║
║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║
║ ║
╠═══════════════════════════════════════════════════════════════════════════╣
║  Emulator / Nitro-V3 / Nitro-V3-Render ║
║  Updater by Remco — epicnabbo.nl ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ Branch: main (2 detected) │ 11:27 ║
╚═══════════════════════════════════════════════════════════════════════════╝

 UPDATE 
1) 🚀 Quick Update — branch: main
2) ⚡ Full Update (choose branch)
3) ⚙ Emulator Only
4) ⚙ Nitro-V3 Client Only
5) ⚙ Renderer Only
6) ⚙ Configs Only
 TOOLS 
7) 🔀 Switch Branch
8) 🗄 Database
9) 🛡 Backup / Restore
10) 🔧 Services
11) 📊 Status
12) ♥ Health Check
13) 🧹 Clean
14) 👁 Logs
15) ⚙ Config
 ADVANCED 
16) 🖥 Git Log
17) 🌐 Compare Branches
18) ⏱ Cron Scheduler
0) Exit
Select [0-18]:
Update: Full
1) Dev
2) main (current)
3) Custom
Branch [1-3]:
Branch: main Mode: Full
➜ Start update? [Y/n]
➜ Site: https://epicnabbo.nl | Branch: main | Mode: full
[2026-07-08 11:27:55] [INFO] Site: https://epicnabbo.nl | Branch: main | Mode: full
➜ Log: /var/www/atom-nexst/storage/logs/update-20260708-112735.log
[2026-07-08 11:27:55] [INFO] Log: /var/www/atom-nexst/storage/logs/update-20260708-112735.log
 Step 1/8 — System Diagnostics 
✔ All commands available
[2026-07-08 11:27:55] [OK] All commands available
✔ All directories exist
[2026-07-08 11:27:55] [OK] All directories exist
✔ 128GB disk available
[2026-07-08 11:27:55] [OK] 128GB disk available
✔ Database connected
[2026-07-08 11:27:55] [OK] Database connected
 Step 2/8 — Update & Build Emulator 
Saved working directory and index state WIP on main: 1a05d0ed 🆙 Bump version to 4.2.49 [skip ci]
Your branch is up to date with 'origin/main'.
Updating 1a05d0ed..5c2c8013
Fast-forward
Emulator/pom.xml | 4 +-
.../habbo/habbohotel/rooms/RoomCycleManager.java | 123 ++-------
.../com/eu/habbo/habbohotel/rooms/RoomUnit.java | 20 +-
.../eu/habbo/habbohotel/rooms/RoomUnitManager.java | 280 +--------------------
4 files changed, 39 insertions(+), 388 deletions(-)
[?25l␍ ⠋ Backing up database... ␍ ⠙ Backing up database... ␍ ⠹ Backing up database... ␍ ⠸ Backing up database... ␍ ⠼ Backing up database... ␍ ⠴ Backing up database... ␍ ⠦ Backing up database... ␍ ⠧ Backing up database... ␍ ⠇ Backing up database... ␍ ⠏ Backing up database... ␍ ⠋ Backing up database... ␍ ⠙ Backing up database... ␍[?12l[?25h␍ ✔ Done
✔ Backup: 35M
[2026-07-08 11:28:29] [OK] Backup: 35M
[?25l ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... Line truncated
11:28:42.663 WARN [main ] FurnidataReader | FurnidataReader: ignoring out-of-base file /tmp/junit-2680494782301105986/furnidata/core/../../secret.json
11:28:42.669 WARN [main ] FurnidataReader | FurnidataReader: /tmp/junit-4684459296101932112/FurnitureData.json is 292 bytes, over cap 8 — refusing
11:28:42.679 WARN [main ] FurnidataReader | FurnidataReader: /tmp/junit-4000087741262526872/furnidata/manifest.json is 1850 bytes, over cap 8 — refusing
11:28:43.087 INFO [main ] Version | HV000001: Hibernate Validator 9.1.2.Final
␍[?12l[?25h␍ ✔ Done
✔ Jar: Habbo-4.2.50-jar-with-dependencies.jar
[2026-07-08 11:28:51] [OK] Jar: Habbo-4.2.50-jar-with-dependencies.jar
✔ Launch script updated
[2026-07-08 11:28:51] [OK] Launch script updated
 Step 3/8 — Update Nitro_Render_V3 
No local changes to save
Your branch is up to date with 'origin/main'.
Already up to date.
➜ Renderer: already up to date
[2026-07-08 11:29:11] [INFO] Renderer: already up to date
 Step 4/8 — Update & Build Nitro-V3 
No local changes to save
Your branch is up to date with 'origin/main'.
Already up to date.
➜ Nitro-V3: already up to date
[2026-07-08 11:29:32] [INFO] Nitro-V3: already up to date
 Step 5/8 — Sync Configurations 
✔ 18 config file(s) synced
[2026-07-08 11:29:33] [OK] 18 config file(s) synced
➜ Applying critical config URLs...
[2026-07-08 11:29:33] [INFO] Applying critical config URLs...
[OK] Fixed: renderer-config.json
[OK] Fixed: renderer-config.json
[OK] Fixed: ui-config.json
[OK] Fixed: ui-config.json
✔ All config URLs synced
[2026-07-08 11:29:33] [OK] All config URLs synced
 Step 6/8 — Cleanup 
yarn cache v1.22.22
success Cleared cache.
Done in 0.05s.
✔ Cleanup done (0 logs removed)
[2026-07-08 11:29:33] [OK] Cleanup done (0 logs removed)
 Step 7/8 — Set Permissions 
✔ Permissions set
[2026-07-08 11:29:35] [OK] Permissions set
 Step 8/8 — Restart Services 
✔ emulator restarted
[2026-07-08 11:29:35] [OK] emulator restarted
✔ Nginx reloaded
[2026-07-08 11:29:36] [OK] Nginx reloaded
OK
✔ Redis flushed
[2026-07-08 11:29:36] [OK] Redis flushed
╔══════════════════════════════════════════════════════════════════╗
║ ✔ UPDATE COMPLETED SUCCESSFULLY ║
╠══════════════════════════════════════════════════════════════════╣
║ Duration: 2m 1s ║
║ Updates: Yes ║
║ Nitro build: No ║
║ Warnings: 0 ║
║ Repos: Emulator ║
╚══════════════════════════════════════════════════════════════════╝
Press Enter to continue..../update-Nitrov3.sh: line 929: read: 0: read error: Input/output error