Skip to content

Commit 7681e2b

Browse files
cstocktonChris Stockton
authored andcommitted
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

19 files changed

+1097
-71
lines changed

internal/api/anonymous.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ func (a *API) SignupAnonymously(w http.ResponseWriter, r *http.Request) error {
3030
if err != nil {
3131
return err
3232
}
33+
if err := a.triggerBeforeUserCreated(r, db, newUser); err != nil {
34+
return err
35+
}
3336

3437
var grantParams models.GrantParams
3538
grantParams.FillGrantParams(r)

0 commit comments

Comments
 (0)