Commit Graph

45 Commits

Author SHA1 Message Date
jxxghp
4955b7b9ea fix: harden backend isolation and execution safety 2026-10-16 09:11:28 +08:00
jxxghp
bd1e6eb899 fix(agent): separate public API queries from bound user operations 2026-10-12 07:30:35 +08:00
InfinityPacer
25aaf3a32b feat(plugin): add agent pet extension contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 04:08:15 +08:00
freeman
2165475dd0 fix(security): throttle password login after repeated failures
The access-token endpoint accepted unlimited password attempts; the
only existing rate limiters are single-instance helpers for outbound
site requests. Add app/application/security/throttle.py, an in-memory
LoginThrottle keyed by (client address, normalized username) that locks
for 30s after five consecutive failures and doubles the lockout up to
15 minutes. The endpoint answers 429 with Retry-After while locked,
counts only real credential failures (an MFA challenge after a correct
password does not count), and clears the record on success.

X-Forwarded-For is deliberately not trusted because there is no
trusted-proxy setting; behind the bundled nginx all requests share one
address, so the key degrades to per-username throttling, which is the
dimension brute-force protection needs. Sync the dependency snapshot
and architecture metrics for the new module.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 12:01:04 +08:00
jxxghp
e51fd44964 fix(agent): resolve alternative QQ and Feishu user bindings
Keep strict binding lookup as the default and explicitly match alternative channel identifiers for the Agent API gateway. Reject ambiguous active-user matches and cover single-field bindings with database-backed tests.

Refs #6905
2026-10-07 09:16:33 +08:00
jxxghp
b4175a4f88 fix(image): cache site allowlist and include custom image hosts 2026-09-30 01:09:32 +08:00
InfinityPacer
313f894052 perf(memory): import storage and passkey SDKs on demand
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 03:46:22 +08:00
jxxghp
bbaec9d6b3 fix: preserve v3 architecture complexity budget 2026-09-23 18:49:00 +08:00
LS
c68288e897 feat(security): 图片代理自动信任已启用的媒体服务器主机 (#6769)
在局域网部署 Emby/Jellyfin/Plex 的用户,此前需要手动维护
SECURITY_IMAGE_DOMAINS(整表覆盖,会随版本默认值漂移)和
IMAGE_PROXY_ALLOWED_PRIVATE_RANGES,未签名的媒体服务器图片 URL
才能通过图片代理。

- is_safe_image_url_async 新增可选参数 trusted_hosts:URL 的 netloc
  (含端口)或 hostname 精确命中时直接放行,不受私网拦截限制;
  默认 None,现有调用方行为不变。
- fetch_image(覆盖 /img 与 /cache/image)从已启用媒体服务器的
  host / play_host 计算受信主机;读取配置失败时返回空集合,不影响代理。

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 16:34:25 +08:00
jxxghp
8072b7d78f Refactor application architecture and compatibility boundaries 2026-09-13 12:53:00 +08:00
jxxghp
ed6439bf2e fix(architecture): close mypy ratchet regressions 2026-09-11 15:24:46 +08:00
jxxghp
a3b78fe8c8 refactor(cookie): keep login helper complexity within budget 2026-09-11 15:00:24 +08:00
jxxghp
06ed22c584 feat(agent): improve browser-assisted site cookie login 2026-09-11 14:31:01 +08:00
jxxghp
82652add91 fix(auth): fix passkey deletion password verification 2026-09-06 10:05:40 +08:00
jxxghp
478e7ee0a4 fix(auth): restore API token compatibility 2026-09-02 20:22:57 +08:00
jxxghp
d512f528be refactor(api): make collection pagination explicit 2026-09-01 09:13:56 +08:00
jxxghp
fdba2c7d64 refactor(agent): unify tools behind API gateway and provider skills 2026-08-31 16:57:54 +08:00
InfinityPacer
5c70757a81 fix(auth): align v3 authentication contracts
按已确认的 V3 AUTH-001 交付门禁合并:后端认证与用户资料契约已完成本地前后端联调,Architecture、Coverage、单测分片和 Pylint 全部通过。
2026-08-31 04:57:34 +08:00
jxxghp
9146c75941 feat(auth): add first-run administrator initialization 2026-08-30 09:05:23 +08:00
jxxghp
5202c04dee refactor(application): unify sync async decisions 2026-08-29 19:54:08 +08:00
jxxghp
808f2439ef refactor(startup): add provider reset contracts 2026-08-29 17:57:01 +08:00
jxxghp
d2a860d89a refactor(startup): govern composition lifecycle ownership 2026-08-29 16:57:53 +08:00
jxxghp
2fe39d856c refactor(architecture): invert application adapter boundaries 2026-08-28 18:45:47 +08:00
jxxghp
9bff18739d refactor(runtime): own lifecycle and adapter boundaries 2026-08-28 18:18:07 +08:00
jxxghp
aa8751f775 refactor: close transactional boundary debt batch 2026-08-28 10:36:12 +08:00
jxxghp
3f8d5990e7 refactor(user): freeze host user query ports 2026-08-28 08:44:35 +08:00
jxxghp
ea58c245dd fix: restore quality gates after module renames 2026-08-27 21:05:36 +08:00
jxxghp
f888aab2c9 refactor: 统一插件迁移与 Passkey 模块命名 2026-08-27 20:38:55 +08:00
jxxghp
49ea278436 fix(site): satisfy login fallback type ratchet 2026-08-27 14:10:46 +08:00
jxxghp
ff355cbe5d fix(site): follow tracker login page for cookie refresh (#6473) 2026-08-27 13:52:37 +08:00
jxxghp
e768eb46fe refactor: own coalescer flush lifecycle 2026-08-24 03:11:49 +08:00
InfinityPacer
3d7fb44dc7 refactor(database): isolate configuration transactions 2026-08-23 02:29:22 +08:00
jxxghp
7846b24f6c refactor: inject URL signing runtime configuration 2026-08-23 01:26:09 +08:00
jxxghp
690ebe0c02 refactor: inject token runtime configuration 2026-08-23 01:14:12 +08:00
jxxghp
56cb7294eb refactor: extract cache network and compatibility entrypoints 2026-08-22 23:13:59 +08:00
jxxghp
a380cf6d49 refactor: migrate auth runtime configuration 2026-08-22 20:53:53 +08:00
jxxghp
8d0a694816 refactor: migrate passkey runtime configuration 2026-08-22 20:35:27 +08:00
jxxghp
be18cace1f refactor: finish transactional runtime migration 2026-08-22 15:18:16 +08:00
jxxghp
97d2dcd7fb fix(ci): align architecture and pylint gates 2026-08-22 08:50:25 +08:00
jxxghp
8472bcff43 refactor: 收口 V3 分层架构与插件兼容边界 2026-08-18 13:22:02 +08:00
jxxghp
5128ae9e1e refactor: 推进后端分层架构治理 2026-08-18 00:29:14 +08:00
InfinityPacer
ca99af10f1 fix(auth): preserve bcrypt password compatibility (#6339) 2026-08-17 06:13:18 +08:00
jxxghp
96118e73e7 refactor(string): split utilities by responsibility 2026-08-15 08:03:55 +08:00
Aqr-K
8a11214a43 refactor(db): 修复异步连接池无界增长,并完成 SQLAlchemy 2.0 迁移与分层归位 (#6320) 2026-08-15 06:58:38 +08:00
jxxghp
369d7d6448 refactor: reorganize backend module boundaries 2026-08-14 19:53:33 +08:00