mirror of
https://github.com/fleetdm/fleet
synced 2026-05-23 17:08:53 +00:00
Fix update invite email conflict (#4751)
This commit is contained in:
parent
a6902cc083
commit
779623934c
3 changed files with 53 additions and 8 deletions
|
|
@ -191,16 +191,12 @@ func (svc *Service) UpdateInvite(ctx context.Context, id uint, payload fleet.Inv
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if err := fleet.ValidateRole(payload.GlobalRole.Ptr(), payload.Teams); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
invite, err := svc.ds.Invite(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if payload.Email != nil {
|
||||
if payload.Email != nil && *payload.Email != invite.Email {
|
||||
switch _, err := svc.ds.UserByEmail(ctx, *payload.Email); {
|
||||
case err == nil:
|
||||
return nil, ctxerr.Wrap(ctx, alreadyExistsError{})
|
||||
|
|
@ -230,8 +226,14 @@ func (svc *Service) UpdateInvite(ctx context.Context, id uint, payload fleet.Inv
|
|||
if payload.SSOEnabled != nil {
|
||||
invite.SSOEnabled = *payload.SSOEnabled
|
||||
}
|
||||
invite.GlobalRole = payload.GlobalRole
|
||||
invite.Teams = payload.Teams
|
||||
|
||||
if payload.GlobalRole.Valid || len(payload.Teams) > 0 {
|
||||
if err := fleet.ValidateRole(payload.GlobalRole.Ptr(), payload.Teams); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
invite.GlobalRole = payload.GlobalRole
|
||||
invite.Teams = payload.Teams
|
||||
}
|
||||
|
||||
return svc.ds.UpdateInvite(ctx, id, invite)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package service
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
|
@ -55,6 +56,48 @@ func TestInviteNewUserMock(t *testing.T) {
|
|||
require.NotNil(t, err, "should err if the user we're inviting already exists")
|
||||
}
|
||||
|
||||
func TestUpdateInvite(t *testing.T) {
|
||||
ms := new(mock.Store)
|
||||
ms.InviteFunc = func(ctx context.Context, id uint) (*fleet.Invite, error) {
|
||||
if id != 1 {
|
||||
return nil, sql.ErrNoRows
|
||||
}
|
||||
|
||||
return &fleet.Invite{
|
||||
ID: 1,
|
||||
Name: "John Appleseed",
|
||||
Email: "john_appleseed@example.com",
|
||||
GlobalRole: null.NewString("observer", true),
|
||||
}, nil
|
||||
}
|
||||
ms.UpdateInviteFunc = func(ctx context.Context, id uint, i *fleet.Invite) (*fleet.Invite, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
mailer := &mockMailService{SendEmailFn: func(e fleet.Email) error { return nil }}
|
||||
|
||||
svc := validationMiddleware{&Service{
|
||||
ds: ms,
|
||||
config: config.TestConfig(),
|
||||
mailService: mailer,
|
||||
clock: clock.NewMockClock(),
|
||||
authz: authz.Must(),
|
||||
}, ms, nil}
|
||||
|
||||
// email is the same
|
||||
payload := fleet.InvitePayload{
|
||||
Name: ptr.String("Johnny Appleseed"),
|
||||
Email: ptr.String("john_appleseed@example.com"),
|
||||
}
|
||||
|
||||
ctx := test.UserContext(test.UserAdmin)
|
||||
|
||||
// update the invite (email is the same)
|
||||
_, err := svc.UpdateInvite(ctx, 1, payload)
|
||||
require.NoError(t, err)
|
||||
require.True(t, ms.InviteFuncInvoked)
|
||||
}
|
||||
|
||||
func TestVerifyInvite(t *testing.T) {
|
||||
ms := new(mock.Store)
|
||||
svc := newTestService(t, ms, nil, nil)
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ var cpeSqliteRegex = regexp.MustCompile(`^cpe-.*\.sqlite\.gz$`)
|
|||
func GetLatestNVDRelease(client *http.Client) (*NVDRelease, error) {
|
||||
ghclient := github.NewClient(client)
|
||||
ctx := context.Background()
|
||||
releases, _, err := ghclient.Repositories.ListReleases(ctx, owner, repo, &github.ListOptions{Page: 0, PerPage: 1})
|
||||
releases, _, err := ghclient.Repositories.ListReleases(ctx, owner, repo, &github.ListOptions{Page: 0, PerPage: 10})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue