Scope device enrollment token deletes
Delete and DeleteExpired omitted Scoper, breaking the tenant-isolation pattern used elsewhere in coredata. Pass a tenant scope from ExchangeEnrollmentToken and NewNoScope from the ITAM GC so cross-tenant cleanup stays explicit. Signed-off-by: Ludovic Vielle <ludovic@probo.com>
This commit is contained in:
@@ -133,15 +133,22 @@ FOR UPDATE;
|
|||||||
func (t *DeviceEnrollmentToken) DeleteExpired(
|
func (t *DeviceEnrollmentToken) DeleteExpired(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
conn pg.Tx,
|
conn pg.Tx,
|
||||||
|
scope Scoper,
|
||||||
now time.Time,
|
now time.Time,
|
||||||
) (int64, error) {
|
) (int64, error) {
|
||||||
q := `
|
q := `
|
||||||
DELETE FROM device_enrollment_tokens
|
DELETE FROM device_enrollment_tokens
|
||||||
WHERE
|
WHERE
|
||||||
expires_at < @now
|
%s
|
||||||
|
AND expires_at < @now
|
||||||
`
|
`
|
||||||
|
|
||||||
result, err := conn.Exec(ctx, q, pgx.StrictNamedArgs{"now": now})
|
q = fmt.Sprintf(q, scope.SQLFragment())
|
||||||
|
|
||||||
|
args := pgx.StrictNamedArgs{"now": now}
|
||||||
|
maps.Copy(args, scope.SQLArguments())
|
||||||
|
|
||||||
|
result, err := conn.Exec(ctx, q, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("cannot delete expired device_enrollment_tokens: %w", err)
|
return 0, fmt.Errorf("cannot delete expired device_enrollment_tokens: %w", err)
|
||||||
}
|
}
|
||||||
@@ -152,14 +159,19 @@ WHERE
|
|||||||
func (t *DeviceEnrollmentToken) Delete(
|
func (t *DeviceEnrollmentToken) Delete(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
conn pg.Tx,
|
conn pg.Tx,
|
||||||
|
scope Scoper,
|
||||||
) error {
|
) error {
|
||||||
q := `
|
q := `
|
||||||
DELETE FROM device_enrollment_tokens
|
DELETE FROM device_enrollment_tokens
|
||||||
WHERE
|
WHERE
|
||||||
id = @id
|
%s
|
||||||
|
AND id = @id
|
||||||
`
|
`
|
||||||
|
|
||||||
|
q = fmt.Sprintf(q, scope.SQLFragment())
|
||||||
|
|
||||||
args := pgx.StrictNamedArgs{"id": t.ID}
|
args := pgx.StrictNamedArgs{"id": t.ID}
|
||||||
|
maps.Copy(args, scope.SQLArguments())
|
||||||
|
|
||||||
_, err := conn.Exec(ctx, q, args)
|
_, err := conn.Exec(ctx, q, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ func (h *gcHandler) cleanup(ctx context.Context) error {
|
|||||||
func(ctx context.Context, tx pg.Tx) error {
|
func(ctx context.Context, tx pg.Tx) error {
|
||||||
var token coredata.DeviceEnrollmentToken
|
var token coredata.DeviceEnrollmentToken
|
||||||
|
|
||||||
tokensDeleted, err := token.DeleteExpired(ctx, tx, now)
|
tokensDeleted, err := token.DeleteExpired(ctx, tx, coredata.NewNoScope(), now)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot delete expired device enrollment tokens: %w", err)
|
return fmt.Errorf("cannot delete expired device enrollment tokens: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,16 +324,16 @@ func (s *Service) ExchangeEnrollmentToken(
|
|||||||
return fmt.Errorf("cannot load device enrollment token: %w", err)
|
return fmt.Errorf("cannot load device enrollment token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scope := coredata.NewScope(token.TenantID)
|
||||||
|
|
||||||
if now.After(token.ExpiresAt) {
|
if now.After(token.ExpiresAt) {
|
||||||
if err := token.Delete(ctx, conn); err != nil {
|
if err := token.Delete(ctx, conn, scope); err != nil {
|
||||||
return fmt.Errorf("cannot delete expired device enrollment token: %w", err)
|
return fmt.Errorf("cannot delete expired device enrollment token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ErrEnrollmentTokenExpired
|
return ErrEnrollmentTokenExpired
|
||||||
}
|
}
|
||||||
|
|
||||||
scope := coredata.NewScope(token.TenantID)
|
|
||||||
|
|
||||||
device := &coredata.Device{}
|
device := &coredata.Device{}
|
||||||
if err := device.LoadByIDForUpdate(ctx, conn, scope, token.DeviceID); err != nil {
|
if err := device.LoadByIDForUpdate(ctx, conn, scope, token.DeviceID); err != nil {
|
||||||
return fmt.Errorf("cannot load device: %w", err)
|
return fmt.Errorf("cannot load device: %w", err)
|
||||||
@@ -361,7 +361,7 @@ func (s *Service) ExchangeEnrollmentToken(
|
|||||||
return fmt.Errorf("cannot set device api key hash: %w", err)
|
return fmt.Errorf("cannot set device api key hash: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := token.Delete(ctx, conn); err != nil {
|
if err := token.Delete(ctx, conn, scope); err != nil {
|
||||||
return fmt.Errorf("cannot delete device enrollment token: %w", err)
|
return fmt.Errorf("cannot delete device enrollment token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user