| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(deploy): finish rename to KNOWFORGE_ env vars and migrate old data dir Complete the rebrand for runtime configuration: rename the INFO_SPHERE_* environment variables (INFO_SPHERE_DATA, _PORT, _WEB_PORT, _STATIC_ROOT, _API_URL, _UPGRADE, _UPSTREAM_REPO, _TRUSTED_PROXIES, _SITE_URL, _ENV_FILE) to KNOWFORGE_* across code, tests, deploy unit/env, Docker and docs, and the deploy secret to KNOWFORGE_ENV_FILE. The upgrade failed because the server still wrote to /var/lib/infosphere (from the old env value) while systemd only allowed /var/lib/knowforge, which is read-only under ProtectSystem=strict. Deploy now copies an existing /var/lib/infosphere into /var/lib/knowforge on first renamed release, and disables the old infosphere-* units to avoid port conflicts. | 1 个月前 | |
feat(leaderboards): turn leaderboards into a plugin with more boards Ranking used to be a single XP board inside the growth plugin. Boards are now registered through plugincore and ranked, paged and filtered by a dedicated leaderboards plugin. - add creators, most viewed, most liked and most saved boards - move the XP board into the registry and add followers and book follows - let admins toggle and reorder boards, keeping the old XP switch as default - serve all boards from /leaderboards and redirect the old growth page | 11 天前 | |
feat(payment): isolated payment plugin with offline, Alipay, WeChat Pay and Stripe Adds a neutral commerce hook to plugincore (product providers resolve a SKU into a priced product and fulfil paid orders idempotently). The payment plugin sells any registered product: offline transfer with admin confirmation, Alipay page/wap pay (RSA2), WeChat Pay APIv3 Native (public key mode, AES-GCM callbacks) and Stripe Checkout (HMAC webhooks). Callbacks verify signature, amount, currency and channel; pending online orders are re-queried while the order page polls. Secrets are write-only. The membership plugin registers its prices as products, so plans can be bought or renewed online; neither plugin imports the other. | 1 个月前 | |
feat(security): two-factor auth (TOTP) with per-operation step-up Users enable TOTP (authenticator app) and choose which operations require a second factor: login, credentials (password/email), delete (book/document/ trash purge), unbind_export (OAuth unbind / data export). Backend (pquerna/otp): setup (QR + secret), enable (returns one-time backup codes), disable, per-op config, verify (grants a 5-min step-up window), regenerate backup codes. Protected handlers call requireStepUp(op) → 403 TWO_FACTOR_REQUIRED unless recently verified; login validates the TOTP/backup code inline. Secret + hashed backup codes stored per user. Frontend: security-page 2FA section (QR setup, op toggles, backup codes, disable), login 2FA code step, and a global StepUpModal wired into api.ts that prompts + verifies + auto-retries any request that returns TWO_FACTOR_REQUIRED. | 1 个月前 | |
chore: rename project InfoSphere to KnowForge Rename the project throughout the codebase: brand strings InfoSphere -> KnowForge and identifiers infosphere -> knowforge. This includes the Go module path (infosphere/server -> knowforge/server) and all imports, the auth cookie name (infosphere_token -> knowforge_token; existing sessions must re-login), package names, deploy unit/env/sudoers filenames, the Android package org.devlive.knowforge, and external repo/registry/domain references. Generated build artifacts and lockfiles are left untouched. The logo and favicon assets were replaced separately. | 1 个月前 |