MCPcopy Create free account
hub / github.com/netlify/gotrue / processInvite

Method processInvite

api/external.go:221–273  ·  view source on GitHub ↗
(ctx context.Context, tx *storage.Connection, userData *provider.UserProvidedData, instanceID uuid.UUID, inviteToken, providerType string)

Source from the content-addressed store, hash-verified

219}
220
221func (a *API) processInvite(ctx context.Context, tx *storage.Connection, userData *provider.UserProvidedData, instanceID uuid.UUID, inviteToken, providerType string) (*models.User, error) {
222 config := a.getConfig(ctx)
223 user, err := models.FindUserByConfirmationToken(tx, inviteToken)
224 if err != nil {
225 if models.IsNotFoundError(err) {
226 return nil, notFoundError(err.Error())
227 }
228 return nil, internalServerError("Database error finding user").WithInternalError(err)
229 }
230
231 var emailData *provider.Email
232 var emails []string
233 for _, e := range userData.Emails {
234 emails = append(emails, e.Email)
235 if user.Email == e.Email {
236 emailData = &e
237 break
238 }
239 }
240
241 if emailData == nil {
242 return nil, badRequestError("Invited email does not match emails from external provider").WithInternalMessage("invited=%s external=%s", user.Email, strings.Join(emails, ", "))
243 }
244
245 if err := user.UpdateAppMetaData(tx, map[string]interface{}{
246 "provider": providerType,
247 }); err != nil {
248 return nil, internalServerError("Database error updating user").WithInternalError(err)
249 }
250
251 updates := make(map[string]interface{})
252 for k, v := range userData.Metadata {
253 if v != "" {
254 updates[k] = v
255 }
256 }
257 if err := user.UpdateUserMetaData(tx, updates); err != nil {
258 return nil, internalServerError("Database error updating user").WithInternalError(err)
259 }
260
261 if err := models.NewAuditLogEntry(tx, instanceID, user, models.InviteAcceptedAction, nil); err != nil {
262 return nil, err
263 }
264 if err := triggerEventHooks(ctx, tx, SignupEvent, user, instanceID, config); err != nil {
265 return nil, err
266 }
267
268 // confirm because they were able to respond to invite email
269 if err := user.Confirm(tx); err != nil {
270 return nil, err
271 }
272 return user, nil
273}
274
275func (a *API) loadExternalState(ctx context.Context, state string) (context.Context, error) {
276 claims := ExternalProviderClaims{}

Callers 1

Calls 14

getConfigMethod · 0.95
IsNotFoundErrorFunction · 0.92
NewAuditLogEntryFunction · 0.92
notFoundErrorFunction · 0.85
internalServerErrorFunction · 0.85
badRequestErrorFunction · 0.85
triggerEventHooksFunction · 0.85
UpdateAppMetaDataMethod · 0.80
UpdateUserMetaDataMethod · 0.80
ConfirmMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected