a6a548b1ce
fix: identity bind row layout - select stole full width, inputs invisible
...
Root cause: .form-group select global width:100% inherited inside flex row,
pushing the two text inputs to zero width. Fix: fixed 92px select
(flex:0 0 92px), inputs flex:1 1 30% with min-width:0 + width:auto,
button flex:0 0 auto, no wrap.
2026-08-17 01:52:20 +08:00
25a766591e
feat: admin user management supports multi-identity bind/unbind
...
- users list: identity_count column (backend subquery)
- user detail: returns identities array
- POST /users/:id/identities, DELETE /users/:id/identities/:identityId
(owner protection, dup checks, keep >=1, audit logs)
- users page: identity column in table + manage section in edit modal
- API docs updated
2026-08-17 01:34:20 +08:00
559970c5b7
feat: one account can bind both netease + skin identities
...
- db: user_identities table (UNIQUE user_id+source), migrate backfill from users
- auth: GET/POST/DELETE /api/auth/identities - bind/unbind/list identities
(netease requires UID, one per source, name uniqueness, keep >=1)
- register/external/plugin/admin-created users auto-write primary identity
- tickets: submit uses selected identity (validated belongs to user)
- dashboard: 我的身份 card with bind/unbind UI
- ticket-create: identity selector when >1 identity
2026-08-17 01:17:09 +08:00
a5019f1b11
fix: invalid API key after install - force page reload to pick up injected key
2026-08-16 23:01:31 +08:00
6e9101a506
fix: deploy crash + multiple bug fixes + cleanup
...
- server.js: fix getSiteName() returning string when not installed causing
'getSiteName(...).then is not a function' crash on homepage (deploy blocker)
- server.js: auto-load business routes after install completes (no restart needed),
HTML cache keyed by api_key
- install: validate db name/email/password, trigger route loading after complete
- app.js: fix forgot/reset/verify pages rendering HomePage (missing page mapping)
- verify.js: support URL token auto-verification for external registration links
- auth: new email_code template for 6-digit code, reset_password template
(forgot-password was using verify_email template)
- upload.js: fix MP4 magic-bytes check using undefined buf variable
- tickets.js: status enum validation, anonymous submission rate limit
- security.js: XSS whitelist preserves email template HTML, strips scripts,
blocks javascript:/data: hrefs; CORS reject returns 403
- bans.js: allow clearing reason/duration, status enum validation
- users.js: fix req.user.role ReferenceError in create user modal
- home.js: tracking results now have detail view button
- .gitignore: ignore data/ (db credentials), logs, session files, temp scripts
2026-08-16 21:21:25 +08:00
7bc22dee0c
fix: add source field to dashboard ban form
2026-07-19 00:40:54 +08:00
19615cfa56
feat: edit ban entries with modal form
2026-07-18 01:53:24 +08:00
5cb17228a8
fix: missing duration dropdown in bans add form
2026-07-18 01:41:37 +08:00
dce812aa2f
feat: bans show account source + ban source (ticket/manual)
2026-07-18 01:35:30 +08:00
ce51abc127
fix: add source field to bans + display in list
2026-07-18 01:26:37 +08:00
d242786a3a
feat: bans sidebar page, public view with masked names
2026-07-18 01:17:40 +08:00
2e09dd2d3a
fix: pass bans to renderContent, restore exports wrapper
2026-07-18 01:14:43 +08:00
2a12e7b740
fix: ban duration >= not >, auto-prefill min duration
2026-07-18 01:11:41 +08:00
5ed109ec0e
feat: ban list with dashboard widget, owner add/edit bans
2026-07-18 00:52:33 +08:00
5497de9aac
feat: batch ticket operations (close/delete/change status)
2026-07-17 21:55:15 +08:00
6dfc6788e5
fix: show target UID when name is empty in ticket list
2026-07-17 19:25:39 +08:00
1e1e8282e6
style: add spacing between code input and submit button
2026-07-17 15:05:01 +08:00
771e28472e
fix: remove duplicate email field and extra send button
2026-07-17 14:57:33 +08:00
f21ea19789
fix: captcha input left, image right same row
2026-07-17 14:50:42 +08:00
96e55d8715
feat: anonymous ticket reply via tracking cookie
2026-07-17 14:16:21 +08:00
5e998b2201
fix: hide type tabs when embedded in home page
2026-07-17 13:41:29 +08:00
0892dd5f8e
fix: hide top bar on home page, tabs back in page content
2026-07-17 13:32:28 +08:00
d697ea1353
fix: add priority selector to ticket create form
2026-07-17 13:25:17 +08:00
9eb8aba371
fix: home page tabs in top bar, single nav layer
2026-07-17 13:21:30 +08:00
8f7c34dd86
fix: captcha full-width row, hide top-auth on anonymous submit page
2026-07-17 13:14:15 +08:00
fbd98ca801
fix: email back to original position, code+button after captcha
2026-07-17 01:51:40 +08:00
982437af06
fix: email after captcha, captcha required before sending code
2026-07-17 01:00:34 +08:00
292c863d95
style: register layout - email solo row, source+name together, code+captcha full width
2026-07-17 00:53:12 +08:00
3fdfb206cd
style: cleaner register UI with email+code on same line
2026-07-17 00:47:15 +08:00
926bcb626b
feat: send-code before register, dup game_name check, skin hides uid
2026-07-17 00:42:19 +08:00
511d5ab36f
fix: inline email verification after registration, no separate page
2026-07-17 00:35:50 +08:00
ead50beccd
feat: 6-digit email verification code, fix missing script+route includes
2026-07-17 00:34:47 +08:00
17bf5a611d
feat: type tabs on create form (report/suggestion/appeal)
2026-07-17 00:21:48 +08:00
c3cd97676e
fix: create user server toggle only shows for admin/owner, initial state correct
2026-07-17 00:07:58 +08:00
18bb8152ef
feat: multi-channel notifications (Discord/email/generic Webhook)
2026-07-16 23:51:09 +08:00
ab08b1a2a9
feat: feature discussion as separate detail page, not inline
2026-07-16 23:50:16 +08:00
e9ef425545
fix: simplify player ticket list - hide type/priority/tab filters
2026-07-16 23:47:24 +08:00
09f0d8f2aa
fix: 12 issues - admin permission scope, player sidebar nav, SMTP label, user create servers
2026-07-16 23:04:15 +08:00
e46dad9f95
fix: features page use .filter-bar class instead of inline style
2026-07-16 22:05:38 +08:00
547348d4fe
fix: placeholder examples, filter bar styling improvement
2026-07-16 22:00:23 +08:00
a417a1c376
style: features page CSS classes, onclick→data-action, site name hot-reload
2026-07-16 06:03:33 +08:00
abf747e3af
feat: dedicated server groups management page in sidebar
2026-07-16 03:56:09 +08:00
a8309aa456
refactor: use user_servers junction table instead of JSON column
2026-07-15 04:55:57 +08:00
a34314ac9d
feat: admin server assignment in user management
2026-07-15 04:53:27 +08:00
efe6b084be
sync: add source field to user list, create, edit, and external API
2026-07-15 04:43:30 +08:00
125b4f99fc
fix: only two sources (netease/skin), plugin uses skin
2026-07-15 04:36:01 +08:00
c493c1204b
feat: registration source selector (netease/skin/java)
2026-07-15 04:34:06 +08:00
021351d898
fix: restore from regex corruption, JS-bind modal close, data-action delegation
2026-07-15 03:53:16 +08:00
0f64af42a1
feat: password reset + data-action delegation for all onclick
2026-07-15 02:45:33 +08:00
f0e891b17c
fix: data-action delegation + convert onclick to event listeners, sidebar+logout+modals
2026-07-15 02:44:18 +08:00