diff --git a/automation/rest/eventTypes.gen.go b/automation/rest/eventTypes.gen.go index fa60ec189..9e008e47c 100644 --- a/automation/rest/eventTypes.gen.go +++ b/automation/rest/eventTypes.gen.go @@ -2553,6 +2553,35 @@ func getEventTypeDefinitions() []eventTypeDef { }, }, + { + ResourceType: "system:user", + EventType: "beforeSuspend", + Properties: []eventTypePropertyDef{ + + { + Name: "user", + Type: "User", + Immutable: false, + }, + + { + Name: "oldUser", + Type: "User", + Immutable: true, + }, + }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, + }, + { ResourceType: "system:user", EventType: "afterCreate", @@ -2639,5 +2668,34 @@ func getEventTypeDefinitions() []eventTypeDef { }, }, }, + + { + ResourceType: "system:user", + EventType: "afterSuspend", + Properties: []eventTypePropertyDef{ + + { + Name: "user", + Type: "User", + Immutable: false, + }, + + { + Name: "oldUser", + Type: "User", + Immutable: true, + }, + }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, + }, } } diff --git a/system/service/event/events.gen.go b/system/service/event/events.gen.go index dd8df6d7f..9540bc446 100644 --- a/system/service/event/events.gen.go +++ b/system/service/event/events.gen.go @@ -404,6 +404,13 @@ type ( *userBase } + // userBeforeSuspend + // + // This type is auto-generated. + userBeforeSuspend struct { + *userBase + } + // userAfterCreate // // This type is auto-generated. @@ -424,6 +431,13 @@ type ( userAfterDelete struct { *userBase } + + // userAfterSuspend + // + // This type is auto-generated. + userAfterSuspend struct { + *userBase + } ) // ResourceType returns "system" @@ -3047,6 +3061,13 @@ func (userBeforeDelete) EventType() string { return "beforeDelete" } +// EventType on userBeforeSuspend returns "beforeSuspend" +// +// This function is auto-generated. +func (userBeforeSuspend) EventType() string { + return "beforeSuspend" +} + // EventType on userAfterCreate returns "afterCreate" // // This function is auto-generated. @@ -3068,6 +3089,13 @@ func (userAfterDelete) EventType() string { return "afterDelete" } +// EventType on userAfterSuspend returns "afterSuspend" +// +// This function is auto-generated. +func (userAfterSuspend) EventType() string { + return "afterSuspend" +} + // UserOnManual creates onManual for system:user resource // // This function is auto-generated. @@ -3204,6 +3232,40 @@ func UserBeforeDeleteImmutable( } } +// UserBeforeSuspend creates beforeSuspend for system:user resource +// +// This function is auto-generated. +func UserBeforeSuspend( + argUser *types.User, + argOldUser *types.User, +) *userBeforeSuspend { + return &userBeforeSuspend{ + userBase: &userBase{ + immutable: false, + user: argUser, + oldUser: argOldUser, + }, + } +} + +// UserBeforeSuspendImmutable creates beforeSuspend for system:user resource +// +// None of the arguments will be mutable! +// +// This function is auto-generated. +func UserBeforeSuspendImmutable( + argUser *types.User, + argOldUser *types.User, +) *userBeforeSuspend { + return &userBeforeSuspend{ + userBase: &userBase{ + immutable: true, + user: argUser, + oldUser: argOldUser, + }, + } +} + // UserAfterCreate creates afterCreate for system:user resource // // This function is auto-generated. @@ -3306,6 +3368,40 @@ func UserAfterDeleteImmutable( } } +// UserAfterSuspend creates afterSuspend for system:user resource +// +// This function is auto-generated. +func UserAfterSuspend( + argUser *types.User, + argOldUser *types.User, +) *userAfterSuspend { + return &userAfterSuspend{ + userBase: &userBase{ + immutable: false, + user: argUser, + oldUser: argOldUser, + }, + } +} + +// UserAfterSuspendImmutable creates afterSuspend for system:user resource +// +// None of the arguments will be mutable! +// +// This function is auto-generated. +func UserAfterSuspendImmutable( + argUser *types.User, + argOldUser *types.User, +) *userAfterSuspend { + return &userAfterSuspend{ + userBase: &userBase{ + immutable: true, + user: argUser, + oldUser: argOldUser, + }, + } +} + // SetUser sets new user value // // This function is auto-generated. diff --git a/system/service/event/events.yaml b/system/service/event/events.yaml index d1bf033f9..5df61e15b 100644 --- a/system/service/event/events.yaml +++ b/system/service/event/events.yaml @@ -60,7 +60,7 @@ system:auth-client: system:user: on: ['manual'] - ba: ['create', 'update', 'delete'] + ba: ['create', 'update', 'delete', 'suspend'] props: - name: 'user' type: '*types.User' diff --git a/system/service/user.go b/system/service/user.go index 2581f8d80..7920d9fa8 100644 --- a/system/service/user.go +++ b/system/service/user.go @@ -594,11 +594,19 @@ func (svc user) Suspend(ctx context.Context, userID uint64) (err error) { return UserErrNotAllowedToSuspend() } + // Clone u to oldUser + oldUser := *u u.SuspendedAt = now() + + if err = svc.eventbus.WaitFor(ctx, event.UserBeforeSuspend(u, &oldUser)); err != nil { + return + } + if err = store.UpdateUser(ctx, svc.store, u); err != nil { return } + _ = svc.eventbus.WaitFor(ctx, event.UserAfterSuspend(u, &oldUser)) return nil }()