Skip to content

RC v0.1.0#185

Open
jeroenrinzema wants to merge 472 commits into
release/v0.1.0-rcfrom
main
Open

RC v0.1.0#185
jeroenrinzema wants to merge 472 commits into
release/v0.1.0-rcfrom
main

Conversation

@jeroenrinzema

@jeroenrinzema jeroenrinzema commented Mar 4, 2026

Copy link
Copy Markdown
Contributor

🚧 WIP, but almost there!

First release candidate for Lunogram is taking shape. Feedback welcome.

@github-actions

github-actions Bot commented Mar 19, 2026

Copy link
Copy Markdown

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@jeroenrinzema jeroenrinzema force-pushed the main branch 2 times, most recently from 67b54c7 to f1f4c61 Compare March 22, 2026 10:01
@IamKirbki

Copy link
Copy Markdown
Contributor

I have read the CLA Document and I hereby sign the CLA

@IamKirbki

Copy link
Copy Markdown
Contributor

recheck

signbot9000 Bot added a commit to lunogram/cla that referenced this pull request Mar 23, 2026
RickieeeDev and others added 5 commits March 23, 2026 11:31
The destination argument was missing (&positive) and the query
returned an interval instead of a boolean, causing GetContext to
always error and the function to reject every interval.
Public API keys were removed (see the access-policies series): keys are now
always private (sk_, backend-only) and rejected on browser-originated requests.
- Settings → Access: drop the public/secret scope table; API keys are private,
  client-side uses a trusted issuer or a session; reframe the use-case cards.
- SDK / quick-start: browser SDKs authenticate as a verified end user (a session
  or trusted-issuer token), not an embedded key; server Client uses an sk_ key.
- replace pk_ examples across the reference docs with sk_ (server) or a session
  token (browser).
Replace the project-level client-event allow-list section with the
per-grant create-constraint model (configurable under Settings → Access),
and align the console comment with the backend's grant_constraints map.
Replace the flat EntranceStepData (a trigger discriminator plus optional
fields whose validity depended on the trigger) with a oneOf: `trigger`
selects the kind and exactly the matching sub-object (event, scheduled,
list) carries its own fields, so the requirements live in the type system
rather than in a doc comment. Adds the `none` (API/manual) trigger to the
union. Field names lose the stutter: event.name, scheduled.name,
scheduled.offset_id, list.id.

Draft-save stays lenient so partially configured entrances can be saved
while still being built; the union invariant is enforced strictly at
publish via EntranceStepData.Validate.

Updates every entrance consumer through new EntranceRule/MemberRule
accessors, the OpenAPI spec and regenerated client types, and the console
entrance editor (event/scheduled/list) to produce and consume the nested
shape (clearing sibling blocks on trigger switch).
…-schemas

The rules.RuleSet x-go-type overlay targeted EntranceStepData.rule and
.user_rule, which moved into the EntranceEventTrigger and
EntranceScheduledTrigger sub-schemas. Update the selectors so the strict
overlay apply (and `make generate`) succeeds.
…as instances

Move a method's create-name allow-list off the parallel top-level
grant_constraints map and onto the grant itself: a PermissionGrant gains an
optional instances list scoping that grant to those named instances. The
constraint's dependency on a grant is now structural — it cannot exist apart
from the grant that enforces it — which removes the orphan-constraint class of
bug and unifies two parallel structures. Scope stays create-only for now.

- oapi: add PermissionGrant.instances; delete the GrantConstraints schema and
  the grant_constraints property from Create/Update/AuthMethod. Regenerate Go
  bindings and console types.
- migration 1764116042: add auth_method_grants.instances JSONB; drop
  auth_methods.grant_constraints. Down reverses both.
- store: Grant carries Instances; insertGrants and the grant read aggregate
  carry instances; replace the GrantConstraints type/Permits/store method with
  CreateGrantInstances, preserving fail-closed-on-deleted-method.
- controller: map instances through create/update/response; fold the constraint
  validation into validateGrants (instances only on a create grant for a
  constrainable resource).
- enforcement: CreateConstraints.Enforce reads CreateGrantInstances and rejects
  any name off a restricted allow-list, keeping the existing fail-closed paths.
Cover the session verification middleware (WithSession) and the
CreateSession controller, plus the PKCS#8 / non-EC branches of
parseECPrivateKey that the SEC1-only signer tests never exercised.
feat(auth): normalized auth_methods schema + RBAC foundation
feat(store): AuthMethod store over the normalized tables
feat(http): client API transport hardening (scope, CORS, rate limiting)
feat(management): auth-methods CRUD API
feat(jwks): two-tier JWKS cache for trusted-issuer verification
feat(auth): Lunogram-signed client sessions
feat(client): bind end-user requests to their verified subject (own data)
feat(auth-methods): per-grant create constraints
test(auth): trusted-issuer middleware coverage (from #250)
fix(auth): security-review hardening for the client-access auth rework
feat(console): unified Settings → Access page (replaces API Keys)
docs: document the auth-methods model (Access)
feat(journeys): add list entry/leave trigger
ci(release): publish OpenAPI specs as release assets
…sts on main (#266)

Two PR merges collided in the v1/client test package, breaking `make lint`
and `make test` on main (the build failure masked the second issue):

- `capturingPublisher` was declared in both inbox_idor_test.go and
  ownscope_helpers_test.go. Drop the duplicate (simpler) copy from
  inbox_idor_test.go and adapt publishedIdentifiers to the canonical
  captured()/capturedMessage API in ownscope_helpers_test.go.

- ownDataActor/allDataActor built actors with a random UUID and no
  auth-method row. After per-grant create-constraint enforcement landed
  (#261), CreateConstraints.Enforce looks the method up by the actor id
  and fails closed on a missing row (sql.ErrNoRows -> 500), breaking every
  PostUserEvents own/all-data test. Provision a real, unconstrained auth
  method and use its id as the actor identity, mirroring actorContext.

go vet ./... and the full v1/client suite pass.
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.

3 participants