Fix delete does not completly remove the record
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -296,10 +296,7 @@ func (s *Service) GetUser(
|
|||||||
) (scim.Resource, error) {
|
) (scim.Resource, error) {
|
||||||
scope := coredata.NewScopeFromObjectID(config.OrganizationID)
|
scope := coredata.NewScopeFromObjectID(config.OrganizationID)
|
||||||
|
|
||||||
var (
|
var profile *coredata.MembershipProfile
|
||||||
profile *coredata.MembershipProfile
|
|
||||||
membership *coredata.Membership
|
|
||||||
)
|
|
||||||
|
|
||||||
err := s.pg.WithConn(
|
err := s.pg.WithConn(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -309,24 +306,13 @@ func (s *Service) GetUser(
|
|||||||
if err == coredata.ErrResourceNotFound {
|
if err == coredata.ErrResourceNotFound {
|
||||||
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
||||||
}
|
}
|
||||||
return fmt.Errorf("cannot load membership: %w", err)
|
return fmt.Errorf("cannot load profile: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if profile.OrganizationID != config.OrganizationID {
|
if profile.OrganizationID != config.OrganizationID {
|
||||||
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
membership = &coredata.Membership{}
|
|
||||||
if err := membership.LoadByIdentityIDAndOrganizationID(
|
|
||||||
ctx,
|
|
||||||
conn,
|
|
||||||
scope,
|
|
||||||
profile.IdentityID,
|
|
||||||
profile.OrganizationID,
|
|
||||||
); err != nil {
|
|
||||||
return fmt.Errorf("cannot load membership: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -580,18 +566,37 @@ func (s *Service) DeleteUser(
|
|||||||
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invitations := &coredata.Invitations{}
|
||||||
|
onlyPending := coredata.NewInvitationFilter([]coredata.InvitationStatus{coredata.InvitationStatusPending})
|
||||||
|
if err := invitations.ExpireByUserID(
|
||||||
|
ctx,
|
||||||
|
tx,
|
||||||
|
scope,
|
||||||
|
profile.ID,
|
||||||
|
onlyPending,
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("cannot expire pending invitations: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
membership := &coredata.Membership{}
|
membership := &coredata.Membership{}
|
||||||
if err := membership.LoadByIdentityIDAndOrganizationID(
|
if err := membership.LoadByIdentityIDAndOrganizationID(
|
||||||
ctx, tx, scope, profile.IdentityID, config.OrganizationID,
|
ctx, tx, scope, profile.IdentityID, config.OrganizationID,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
if errors.Is(err, coredata.ErrResourceNotFound) {
|
if !errors.Is(err, coredata.ErrResourceNotFound) {
|
||||||
return scimerrors.ScimErrorResourceNotFound(profileID.String())
|
return fmt.Errorf("cannot load membership: %w", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := membership.Delete(ctx, tx, scope, membership.ID); err != nil {
|
||||||
|
return fmt.Errorf("cannot delete membership: %w", err)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("cannot load membership: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := membership.Delete(ctx, tx, scope, membership.ID); err != nil {
|
if err := profile.Delete(ctx, tx, scope, profile.ID); err != nil {
|
||||||
return fmt.Errorf("cannot delete membership: %w", err)
|
return fmt.Errorf("cannot delete profile: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := webhook.InsertData(ctx, tx, scope, config.OrganizationID, coredata.WebhookEventTypeUserDeleted, webhooktypes.NewUser(profile)); err != nil {
|
||||||
|
return fmt.Errorf("cannot insert webhook event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user