427 Commits
Author SHA1 Message Date
e961fdb131 ci(e2e): make backend stubs embeddable and keep vitest scoped
The dashboard embed pattern ignores hidden-only dist directories, so the CI backend stub must create visible index.html files. Keep the README in sync and exclude Playwright specs from Vitest so npm run test remains a unit-test command.

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 05:27:46 +00:00
naibaandcloudcode 84fac6d653 docs(e2e): describe how to run Playwright suite locally and read CI artifacts
Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:36:03 +00:00
naibaandcloudcode baec84bdc2 docs(e2e): describe how to run Playwright suite locally and read CI artifacts
Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:36:03 +00:00
naibaandcloudcode bb6abeb9a6 ci: run Playwright e2e against a real Go backend in GitHub Actions
Boot a fresh dashboard from nezhahq/nezha master inside the runner:

- Checkout admin-frontend and the backend repo into two paths.
- Generate the two embed stubs and swag docs so cmd/dashboard builds.
- Inject NZ_JWTSECRETKEY (env-first config story) and start the
  backend on 127.0.0.1:8008 with a tmp SQLite db.
- Wait on /api/v1/setting before letting Playwright launch.
- Playwright config brings up Vite dev which proxies /api to 8008.
- Upload playwright-report and dashboard.log on failure for triage.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:34:43 +00:00
naibaandcloudcode 52f67d22ba ci: run Playwright e2e against a real Go backend in GitHub Actions
Boot a fresh dashboard from nezhahq/nezha master inside the runner:

- Checkout admin-frontend and the backend repo into two paths.
- Generate the two embed stubs and swag docs so cmd/dashboard builds.
- Inject NZ_JWTSECRETKEY (env-first config story) and start the
  backend on 127.0.0.1:8008 with a tmp SQLite db.
- Wait on /api/v1/setting before letting Playwright launch.
- Playwright config brings up Vite dev which proxies /api to 8008.
- Upload playwright-report and dashboard.log on failure for triage.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:34:43 +00:00
naibaandcloudcode 22da4d74b8 test(e2e): add Playwright suite for auth + CSRF + visibility fixes
Covers the security fixes that landed across both repos:

- auth.spec.ts: login persists nz-jwt cookie and getProfile succeeds;
  password change bumps TokenVersion + revokes the old cookie so the
  pre-change JWT can no longer auth (regression guard for the
  keyId+session backend rewrite).
- cron-csrf.spec.ts: POST /api/v1/cron/:id/manual succeeds while GET
  is no longer routable (regression guard for the cron CSRF fix).
- fm-csrf.spec.ts: POST /api/v1/file is reachable while GET is no
  longer routable (regression guard for the FM CSRF fix).
- visibility.spec.ts: an anonymous caller cannot see a server-group
  that contains zero guest-visible servers (regression guard for the
  server-group leak fix).

Fixtures wrap the noisy login + cleanup boilerplate. tsconfig is
scoped to tests/e2e so the suite stays out of the production tsc
project graph.

Playwright config starts the Vite dev server (npm run dev) and
expects a backend reachable at the URL Vite proxies to. CI workflow
follow-up commit wires the backend up.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:34:43 +00:00
naibaandcloudcode dc0cfd0ecb test(e2e): add Playwright suite for auth + CSRF + visibility fixes
Covers the security fixes that landed across both repos:

- auth.spec.ts: login persists nz-jwt cookie and getProfile succeeds;
  password change bumps TokenVersion + revokes the old cookie so the
  pre-change JWT can no longer auth (regression guard for the
  keyId+session backend rewrite).
- cron-csrf.spec.ts: POST /api/v1/cron/:id/manual succeeds while GET
  is no longer routable (regression guard for the cron CSRF fix).
- fm-csrf.spec.ts: POST /api/v1/file is reachable while GET is no
  longer routable (regression guard for the FM CSRF fix).
- visibility.spec.ts: an anonymous caller cannot see a server-group
  that contains zero guest-visible servers (regression guard for the
  server-group leak fix).

Fixtures wrap the noisy login + cleanup boilerplate. tsconfig is
scoped to tests/e2e so the suite stays out of the production tsc
project graph.

Playwright config starts the Vite dev server (npm run dev) and
expects a backend reachable at the URL Vite proxies to. CI workflow
follow-up commit wires the backend up.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:34:43 +00:00
naibaandcloudcode 266cd7d150 fix(fm): switch createFM to POST to match backend CSRF fix
Backend moves /api/v1/file from GET to POST so SameSite=Lax cookies
can no longer expose this state-changing endpoint to cross-site
CSRF. Update createFM() accordingly.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:07:52 +00:00
naibaandcloudcode c80899a753 fix(fm): switch createFM to POST to match backend CSRF fix
Backend moves /api/v1/file from GET to POST so SameSite=Lax cookies
can no longer expose this state-changing endpoint to cross-site
CSRF. Update createFM() accordingly.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:07:52 +00:00
naibaandcloudcode b10d655d6e fix(cron): switch manual trigger to POST to match backend CSRF fix
Backend GHSA-8qhj-4f8c-j8qg moves /api/v1/cron/:id/manual from GET to
POST so SameSite=Lax cookies no longer expose this state-changing
endpoint to cross-site CSRF. Update runCron() accordingly.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:00:15 +00:00
naibaandcloudcode f2fea38e10 fix(cron): switch manual trigger to POST to match backend CSRF fix
Backend GHSA-8qhj-4f8c-j8qg moves /api/v1/cron/:id/manual from GET to
POST so SameSite=Lax cookies no longer expose this state-changing
endpoint to cross-site CSRF. Update runCron() accordingly.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-26 04:00:15 +00:00
naiba 849d131382 feat: server transfer rotation 2026-05-25 10:15:24 +00:00
naiba b23a6c0be1 feat: server transfer rotation 2026-05-25 10:15:24 +00:00
naibaandnaiba/CloudCode 2010d80914 fix: hide admin settings tabs for members
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-05-16 00:46:15 +08:00
naibaandnaiba/CloudCode 142fc19469 fix: hide admin settings tabs for members
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-05-16 00:46:15 +08:00
Bot 340fb61a61 feat: improve notification settings and interactive TG bot 2026-05-13 00:52:29 +08:00
Bot bc242ab64b feat: use self-hosted install scripts and pass dashboard URL 2026-05-11 17:39:41 +08:00
Bot ec38164aff feat: optimize server management and fix visual config sync 2026-05-11 17:35:06 +08:00
Bot 2da8565e47 fix: stabilize admin frontend and resolve TS build errors 2026-05-01 13:55:01 +08:00
Bot 9720bc258f feat: refactor notification UI and remove background image 2026-04-28 00:04:16 +08:00
Bot 1e4fae5306 fix: resolve domain.ts type errors and SWR fetching bugs; fix vps config unmarshal issue 2026-04-26 22:07:27 +08:00
Bot 825bcb08f4 feat: add Sync WHOIS button and API integration 2026-04-16 23:08:56 +08:00
Bot cd3b8fdf91 fix: relax URL validation to allow Bot Tokens and SMTP hosts 2026-04-16 21:56:56 +08:00
Bot 48ccde053b feat: specialized UI labels for Telegram notification type 2026-04-16 21:43:50 +08:00
Bot d9ec7c362c feat: add billing UI, SMTP support and expiry settings 2026-04-16 21:36:55 +08:00
Bot 53cb369e4a feat: add inputs for custom branding and background images in Settings 2026-04-16 17:18:49 +08:00
Bot 0f8e9e25fe fix: bypass react-hook-form type mismatches with any casts in ServerCard 2026-04-16 16:47:33 +08:00
Bot 06762437fa fix: correct nzcfg.html URL to /dashboard prefix for proper backend routing 2026-04-16 16:39:39 +08:00
Bot b81d0fe9fc Integrate interactive visual configuration generator (nzcfg) into Server public note form 2026-04-16 16:21:47 +08:00
Bot 8733070cf1 Fix ts configuration and missing fragment in server route after terminal removal 2026-04-16 16:21:40 +08:00
Bot a4dc173fcc Remove SSH terminal functionality for security reasons 2026-04-16 16:21:35 +08:00
Buriburizaemon e848a34fe7 Merge upstream/main 2026-04-16 11:52:58 +08:00
Weblate (bot)andArif Budiman f4696421ec Translated using Weblate (Indonesian) (#156)
Currently translated at 100.0% (245 of 245 strings)


Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/id/
Translation: Nezha/Admin frontend

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
2026-04-05 09:58:43 +08:00
Weblate (bot)andArif Budiman 3912315f56 Translated using Weblate (Indonesian) (#156)
Currently translated at 100.0% (245 of 245 strings)


Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/id/
Translation: Nezha/Admin frontend

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
2026-04-05 09:58:43 +08:00
naibaandnaiba/CloudCode 341a6fa666 fix: use Combobox for notification group selection in settings page
Settings page used a plain number input for ip_change_notification_group_id,
requiring users to manually enter a group ID. Replace it with a searchable
Combobox component (consistent with alert-rule/service/cron pages) and wrap
the settings route with NotificationProvider to load notification group data.

Closes nezhahq/nezha#1174

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-03-01 01:11:37 +00:00
naibaandnaiba/CloudCode b77ac7af93 fix: use Combobox for notification group selection in settings page
Settings page used a plain number input for ip_change_notification_group_id,
requiring users to manually enter a group ID. Replace it with a searchable
Combobox component (consistent with alert-rule/service/cron pages) and wrap
the settings route with NotificationProvider to load notification group data.

Closes nezhahq/nezha#1174

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-03-01 01:11:37 +00:00
Weblate (bot)andРуслан Пузич 4f6e6d1a21 Translated using Weblate (Ukrainian) (#155)
Currently translated at 49.7% (122 of 245 strings)


Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/uk/
Translation: Nezha/Admin frontend

Co-authored-by: Руслан Пузич <visp80@gmail.com>
2026-02-22 21:45:21 +08:00
Weblate (bot)andРуслан Пузич d276c6843a Translated using Weblate (Ukrainian) (#155)
Currently translated at 49.7% (122 of 245 strings)


Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/uk/
Translation: Nezha/Admin frontend

Co-authored-by: Руслан Пузич <visp80@gmail.com>
2026-02-22 21:45:21 +08:00
Weblate (bot)andnlimeres 0bdb63cb20 Translated using Weblate (Galician) (#153)
Currently translated at 7.7% (19 of 245 strings)

Added translation using Weblate (Galician)

Translated using Weblate (Spanish)

Currently translated at 100.0% (244 of 244 strings)



Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/es/
Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/gl/
Translation: Nezha/Admin frontend

Co-authored-by: nlimeres <dynosaurioprogramador@gmail.com>
2026-02-19 14:34:50 +08:00
Weblate (bot)andnlimeres 56b00f19ce Translated using Weblate (Galician) (#153)
Currently translated at 7.7% (19 of 245 strings)

Added translation using Weblate (Galician)

Translated using Weblate (Spanish)

Currently translated at 100.0% (244 of 244 strings)



Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/es/
Translate-URL: https://hosted.weblate.org/projects/nezha/admin-frontend/gl/
Translation: Nezha/Admin frontend

Co-authored-by: nlimeres <dynosaurioprogramador@gmail.com>
2026-02-19 14:34:50 +08:00
奶爸andnaiba d04c4a1784 fix: public_note validation rejects non-object JSON values, preventing second edit (#154)
Co-authored-by: naiba <naiba@users.noreply.github.com>
2026-02-19 14:30:10 +08:00
奶爸andnaiba 6ddcd0eaea fix: public_note validation rejects non-object JSON values, preventing second edit (#154)
Co-authored-by: naiba <naiba@users.noreply.github.com>
2026-02-19 14:30:10 +08:00
UUBulb 2fe19adb96 fix: downgrade tailwindcss to v3 (#151)
* fix: downgrade tailwindcss to v3

* chore: auto-fix linting and formatting issues
2026-02-14 18:06:12 +08:00
UUBulb 76663b8d91 fix: downgrade tailwindcss to v3 (#151)
* fix: downgrade tailwindcss to v3

* chore: auto-fix linting and formatting issues
2026-02-14 18:06:12 +08:00
naiba 84ba33dac3 fix: server edit dialog submit button unresponsive after first save (#1132)
Upgrade react-hook-form 7.63→7.71 to fix form.reset() race condition
that silently broke zod validation on subsequent submissions.

Reset form and public-note state (publicNoteObj/Raw/Mode/Errors)
from latest data when the edit dialog opens, preventing stale state
from a previous edit session.
2026-02-14 12:11:47 +08:00
naiba 1b9c82ca5a fix: server edit dialog submit button unresponsive after first save (#1132)
Upgrade react-hook-form 7.63→7.71 to fix form.reset() race condition
that silently broke zod validation on subsequent submissions.

Reset form and public-note state (publicNoteObj/Raw/Mode/Errors)
from latest data when the edit dialog opens, preventing stale state
from a previous edit session.
2026-02-14 12:11:47 +08:00
胡说丷刂andhuYang ff231da753 service 增加权重 (#150)
* 服务增加权重

* 避免显示成 undefined

---------

Co-authored-by: huYang <306061454@qq.com>
2026-02-14 10:10:24 +08:00
胡说丷刂andhuYang 63338eee67 service 增加权重 (#150)
* 服务增加权重

* 避免显示成 undefined

---------

Co-authored-by: huYang <306061454@qq.com>
2026-02-14 10:10:24 +08:00
UUBulb 78c63bce33 fix: variable not renamed (#148) 2026-01-10 20:22:13 +08:00
UUBulb 5031b8469b fix: variable not renamed (#148) 2026-01-10 20:22:13 +08:00