Skip to content

feat(web): URL actions, Many2One UX, and production security hardening - #37

Merged
ATRIwOX merged 2 commits into
mainfrom
dev
Sep 4, 2026
Merged

feat(web): URL actions, Many2One UX, and production security hardening#37
ATRIwOX merged 2 commits into
mainfrom
dev

Conversation

@ATRIwOX

@ATRIwOX ATRIwOX commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add sys.action.url end-to-end (parse, sync, resolve, workspace) and embed URL actions in an iframe workspace instead of falling back to Apps.
  • Unify falsy domain / Many2One false → SQL NULL semantics across ORM search and record rules.
  • Fix Many2One typing (local query buffer), select-style autocomplete with Create / Search more / SelectCreate, and the same pattern for Many2Many tags.
  • Harden trust boundaries: trusted_proxies for XFF, webhook SSRF checks, safe iframe URLs, confined module-icon paths, tighter API-key/reset ACL, form body limits, WS origin checks, and graceful SIGTERM shutdown.

Commits

  • fix(orm): compile Many2One false domains as NULL checks
  • fix(orm): unify falsy domain semantics across field types
  • feat(web): support sys.action.url and embed URL actions in workspace
  • fix(ci): type IframeView props and sync iframeUrl payload contract
  • fix(swc): restore Many2One search and select-style autocomplete UX
  • fix(security): harden trust boundaries and production HTTP lifecycle

Test plan

  • Invoice form: Partner/Currency/Journal — typing sticks, suggestions, caret, Create / Search more
  • Many2One looks like a single bordered select; Many2Many tags search/add/create work
  • Accounting URL/report menus open in workspace iframe (not Apps)
  • Without trusted_proxies, spoofed X-Forwarded-For: 127.0.0.1 does not pass setup localhost gate
  • webhook:http://127.0.0.1/... server actions are rejected; javascript: iframe URLs rejected
  • Non-admin cannot mint API keys for another user_id; reset-password requires system admin
  • SIGTERM shuts down HTTP cleanly; CI Go + SWC tests pass

Deploy notes

  • Set trusted_proxies (CIDRs of reverse proxies) when running behind a load balancer; empty means XFF is ignored.
  • Rebuild SWC assets after pull (make swc) — swc.js is gitignored.

Stop spoofable XFF without trusted_proxies, block webhook SSRF and unsafe
iframe URLs, confine module icon paths, tighten API-key/reset ACL, and add
graceful shutdown with bounded forms and safer WebSocket origins.
@ATRIwOX ATRIwOX self-assigned this Sep 4, 2026
Thread DDL through SyncRegistrySchemaContext, require setup_token when setup is not localhost-only, add webhook/CSRF/shutdown counters, and consolidate float coercion under orm.CoerceFloat64.
@ATRIwOX
ATRIwOX merged commit d83ecf8 into main Sep 4, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant