Commit 7681e2b
feat: hooks round 5 (Option 2) - add before-user-created hook (#2034)
## Hooks Round 5 - Option 2
This PR contains Option 1 for implementing the `before-user-created`
hook. See #2032 for option 1.
### Summary
This commit explores one possible implementation of this hook by:
- Adding a `triggerBeforeUserCreated` method to the `*API` object in
`internal/api/hooks.go`
- Adding a `triggerBeforeUserCreatedExternal` method to the `*API`
object in `internal/api/hooks.go`
- Updating callers of `signupNewUser` to first call
`triggerBeforeUserCreated` in:
- internal/api/anonymous.go
- internal/api/external.go
- internal/api/invite.go
- internal/api/mail.go
- internal/api/signup.go
- Updating callers of `signupNewUser` to first call
`triggerBeforeUserCreatedExternal` in:
- internal/api/external.go
- internal/api/samlacs.go
- internal/api/token_oidc.go
- internal/api/web3.go
- Add end to end tests in `internal/api/e2e_test.go`
This has the benefit of being outside the transaction, but is a bit more
complex. I make a best-effort to ensure I only trigger
before-user-created when the user doesn't exist, but being outside the
transaction there is a small chance for duplicate calls or calls that
happen when a user already has been created. The main thought here is
that we can document this behavior and the tradeoff is worth the
benefits.
### Depends on
[feat: hooks round 1](#2023) -
prepare package structure
* renamed pkg `internal/hooks/v0hooks/v0http` ->
`internal/hooks/hookshttp`
[8a398ab](8a398ab)
* renamed pkg `internal/hooks/v0hooks/v0pgfunc` ->
`internal/hooks/hookspgfunc`
[8a398ab](8a398ab)
* use pkg `internal/e2e` for test setup in:
* pkg `internal/hooks/hookspgfunc`
[4d60288](4d60288)
* pkg `internal/hooks/v0hooks`
[4a7432b](4a7432b)
[feat: hooks round 2](#2025) -
remove indirection and simplify error handling
* update pkg `internal/api` to:
* uses `internal/hooks/v0hooks.Manager` instead of
`internal/hooks/hooks.Manager`
[aec5995](aec5995)
* remove pkg `internal/hooks/hooks.Manager`
[062da5d](062da5d)
* add pkg `internal/hooks/hookserrors`
[7e80afc](7e80afc)
* use pkg `internal/hooks/hookserrors` in `internal/hooks/v0hooks`
[57744e8](57744e8)
* update pkg `internal/hooks/v0hooks` with an `Enabled` method
[16cc4c9](16cc4c9)
[feat: hooks round 3](#2028) -
begin adding the Before and After user created hooks
* update pkg `internal/conf`
[d5f5436](d5f5436)
* add `BeforeUserCreated` and `AfterUserCreated` to `HookConfiguration`
struct
* add test cases for `EmailValidationBlockedMX` to restore 100% test
coverage
* update pkg `internal/hooks/v0hooks`
[bd37fe2](bd37fe2)
* add `BeforeUserCreated` method to `v0hooks.Manager` struct
* add `AfterUserCreated` method to `v0hooks.Manager` struct
* add tests to reach 100% coverage
* add pkg `internal/e2e/e2ehooks`
[903e623](903e623)
* add `HookCall` to record calls to hooks
* add `Hook` struct to hold `[]*HookCall` for a given hook name
* add `HookRecorder` to hold one `Hook` object per hook name
* add `Instance` struct to hold the `httptest.Server` and `HookRecorder`
* add `AfterUserCreated` method to `v0hooks.Manager` struct
* add tests to reach 100% coverage in all `internal/e2e` packages
* update pkg `internal/hooks/v0hooks`
[829aec6](829aec6)
* fix struct and json tag to match to match the Metadata type
* update pkg `internal/hooks/v0hooks`
[ca67be0](ca67be0)
* remove `BeforeUserCreated` and `AfterUserCreated` methods
* add Before & After user created hooks in `InvokeHook`
* update pkg `internal/e2e/e2eapi`
[46c144e](46c144e)
* add comments in IOError tests involving `http.RoundTripper`
* update calls to `t.Fatal` to use `require`
[feat: hooks round 4](#2030) -
update tests to use require package
* use pkg `require` for tests in:
[f2b3600](f2b3600)
* pkg `internal/e2e/...`
* pkg `internal/hooks/...`
---------
Co-authored-by: Chris Stockton <chris.stockton@supabase.io>1 parent 68be4b7 commit 7681e2b
File tree
19 files changed
+1097
-71
lines changed- internal
- api
- e2e
- e2eapi
- e2ehooks
- hooks
- hookshttp
- hookspgfunc
- v0hooks
19 files changed
+1097
-71
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
33 | 36 | | |
34 | 37 | | |
35 | 38 | | |
| |||
0 commit comments