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:
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>
|
||||
@@ -0,0 +1,159 @@
|
||||
[H[2J[3J[1;36m
|
||||
|
||||
╔═══════════════════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ ███████╗███╗ ███╗ █████╗ ██████╗ ████████╗ ║
|
||||
║ ██╔════╝████╗ ████║██╔══██╗██╔══██╗╚══██╔══╝ ║
|
||||
║ █████╗ ██╔████╔██║███████║██████╔╝ ██║ ║
|
||||
║ ██╔══╝ ██║╚██╔╝██║██╔══██║██╔══██╗ ██║ ║
|
||||
║ ███████╗██║ ╚═╝ ██║██║ ██║██║ ██║ ██║ ║
|
||||
║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║
|
||||
║ ║
|
||||
╠═══════════════════════════════════════════════════════════════════════════╣
|
||||
║ [38;5;220m[1m Emulator / Nitro-V3 / Nitro-V3-Render[1;36m ║
|
||||
║ [1;37m[1m Updater by Remco — epicnabbo.nl[1;36m ║
|
||||
╠═══════════════════════════════════════════════════════════════════════════╣
|
||||
║ [2mBranch: [1;36mmain[2m (2 detected) │ 11:27[1;36m ║
|
||||
╚═══════════════════════════════════════════════════════════════════════════╝
|
||||
[0m
|
||||
[42m[1;37m[1m UPDATE [0m
|
||||
[1;32m[1m1)[0m 🚀 Quick Update — branch: [1;36mmain[0m
|
||||
[1;32m[1m2)[0m ⚡ Full Update (choose branch)
|
||||
[1;32m[1m3)[0m ⚙ Emulator Only
|
||||
[1;32m[1m4)[0m ⚙ Nitro-V3 Client Only
|
||||
[1;32m[1m5)[0m ⚙ Renderer Only
|
||||
[1;32m[1m6)[0m ⚙ Configs Only
|
||||
|
||||
[45m[1;37m[1m TOOLS [0m
|
||||
[1;35m[1m7)[0m 🔀 Switch Branch
|
||||
[1;33m[1m8)[0m 🗄 Database
|
||||
[1;33m[1m9)[0m 🛡 Backup / Restore
|
||||
[1;33m[1m10)[0m 🔧 Services
|
||||
[1;33m[1m11)[0m 📊 Status
|
||||
[1;33m[1m12)[0m ♥ Health Check
|
||||
[1;33m[1m13)[0m 🧹 Clean
|
||||
[1;33m[1m14)[0m 👁 Logs
|
||||
[1;33m[1m15)[0m ⚙ Config
|
||||
|
||||
[44m[1;37m[1m ADVANCED [0m
|
||||
[1;34m[1m16)[0m 🖥 Git Log
|
||||
[1;34m[1m17)[0m 🌐 Compare Branches
|
||||
[1;34m[1m18)[0m ⏱ Cron Scheduler
|
||||
|
||||
[1;31m[1m0)[0m Exit
|
||||
|
||||
[1;36m[1mSelect [0-18][0m:
|
||||
[1m[1;36mUpdate: [1;32mFull[0m
|
||||
|
||||
[1;32m[1m1)[0m [1;36mDev[0m
|
||||
[1;32m[1m2)[0m [1;36mmain[0m [1;32m(current)[0m
|
||||
[1;32m[1m3)[0m Custom
|
||||
|
||||
Branch [1-3]:
|
||||
Branch: [1;36m[1mmain[0m Mode: [1;32mFull[0m
|
||||
[1;33m➜[0m [1mStart update?[0m [Y/n]
|
||||
[1;34m➜[0m Site: https://epicnabbo.nl | Branch: main | Mode: full
|
||||
[2026-07-08 11:27:55] [INFO] Site: https://epicnabbo.nl | Branch: main | Mode: full
|
||||
[1;34m➜[0m 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
|
||||
|
||||
[46m[1;37m[1m Step 1/8 — System Diagnostics [0m
|
||||
|
||||
[1;32m✔[0m All commands available
|
||||
[2026-07-08 11:27:55] [OK] All commands available
|
||||
[1;32m✔[0m All directories exist
|
||||
[2026-07-08 11:27:55] [OK] All directories exist
|
||||
[1;32m✔[0m 128GB disk available
|
||||
[2026-07-08 11:27:55] [OK] 128GB disk available
|
||||
[1;32m✔[0m Database connected
|
||||
[2026-07-08 11:27:55] [OK] Database connected
|
||||
|
||||
[46m[1;37m[1m Step 2/8 — Update & Build Emulator [0m
|
||||
|
||||
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␍ [1;36m⠋[0m Backing up database... ␍ [1;36m⠙[0m Backing up database... ␍ [1;36m⠹[0m Backing up database... ␍ [1;36m⠸[0m Backing up database... ␍ [1;36m⠼[0m Backing up database... ␍ [1;36m⠴[0m Backing up database... ␍ [1;36m⠦[0m Backing up database... ␍ [1;36m⠧[0m Backing up database... ␍ [1;36m⠇[0m Backing up database... ␍ [1;36m⠏[0m Backing up database... ␍ [1;36m⠋[0m Backing up database... ␍ [1;36m⠙[0m Backing up database... ␍[K[?12l[?25h␍ [1;32m✔[0m Done
|
||||
[1;32m✔[0m Backup: 35M
|
||||
[2026-07-08 11:28:29] [OK] Backup: 35M
|
||||
[?25l
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m Building emulator...
[1;36m⠇[0m Building emulator...
[1;36m⠏[0m Building emulator...
[1;36m⠋[0m Building emulator...
[1;36m⠙[0m Building emulator...
[1;36m⠹[0m Building emulator...
[1;36m⠸[0m Building emulator...
[1;36m⠼[0m Building emulator...
[1;36m⠴[0m Building emulator...
[1;36m⠦[0m Building emulator...
[1;36m⠧[0m 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
|
||||
␍[K[?12l[?25h␍ [1;32m✔[0m Done
|
||||
[1;32m✔[0m 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
|
||||
[1;32m✔[0m Launch script updated
|
||||
[2026-07-08 11:28:51] [OK] Launch script updated
|
||||
|
||||
[46m[1;37m[1m Step 3/8 — Update Nitro_Render_V3 [0m
|
||||
|
||||
No local changes to save
|
||||
Your branch is up to date with 'origin/main'.
|
||||
Already up to date.
|
||||
[1;34m➜[0m Renderer: already up to date
|
||||
[2026-07-08 11:29:11] [INFO] Renderer: already up to date
|
||||
|
||||
[46m[1;37m[1m Step 4/8 — Update & Build Nitro-V3 [0m
|
||||
|
||||
No local changes to save
|
||||
Your branch is up to date with 'origin/main'.
|
||||
Already up to date.
|
||||
[1;34m➜[0m Nitro-V3: already up to date
|
||||
[2026-07-08 11:29:32] [INFO] Nitro-V3: already up to date
|
||||
|
||||
[46m[1;37m[1m Step 5/8 — Sync Configurations [0m
|
||||
|
||||
[1;32m✔[0m 18 config file(s) synced
|
||||
[2026-07-08 11:29:33] [OK] 18 config file(s) synced
|
||||
[1;34m➜[0m 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
|
||||
[1;32m✔[0m All config URLs synced
|
||||
[2026-07-08 11:29:33] [OK] All config URLs synced
|
||||
|
||||
[46m[1;37m[1m Step 6/8 — Cleanup [0m
|
||||
|
||||
yarn cache v1.22.22
|
||||
success Cleared cache.
|
||||
Done in 0.05s.
|
||||
[1;32m✔[0m Cleanup done (0 logs removed)
|
||||
[2026-07-08 11:29:33] [OK] Cleanup done (0 logs removed)
|
||||
|
||||
[46m[1;37m[1m Step 7/8 — Set Permissions [0m
|
||||
|
||||
[1;32m✔[0m Permissions set
|
||||
[2026-07-08 11:29:35] [OK] Permissions set
|
||||
|
||||
[46m[1;37m[1m Step 8/8 — Restart Services [0m
|
||||
|
||||
[1;32m✔[0m emulator restarted
|
||||
[2026-07-08 11:29:35] [OK] emulator restarted
|
||||
[1;32m✔[0m Nginx reloaded
|
||||
[2026-07-08 11:29:36] [OK] Nginx reloaded
|
||||
OK
|
||||
[1;32m✔[0m Redis flushed
|
||||
[2026-07-08 11:29:36] [OK] Redis flushed
|
||||
|
||||
[1;36m╔══════════════════════════════════════════════════════════════════╗[0m
|
||||
[1;36m║[0m [1;32m[1m✔ UPDATE COMPLETED SUCCESSFULLY[0m [1;36m║[0m
|
||||
[1;36m╠══════════════════════════════════════════════════════════════════╣[0m
|
||||
[1;36m║[0m Duration: 2m 1s [1;36m║[0m
|
||||
[1;36m║[0m Updates: Yes [1;36m║[0m
|
||||
[1;36m║[0m Nitro build: No [1;36m║[0m
|
||||
[1;36m║[0m Warnings: 0 [1;36m║[0m
|
||||
[1;36m║[0m Repos: Emulator [1;36m║[0m
|
||||
[1;36m╚══════════════════════════════════════════════════════════════════╝[0m
|
||||
|
||||
|
||||
[2mPress Enter to continue...[0m./update-Nitrov3.sh: line 929: read: 0: read error: Input/output error
|
||||
Reference in new issue
Block a user