@@ -272,12 +272,13 @@ func (api *API) scimPatchUser(rw http.ResponseWriter, r *http.Request) {
272
272
}
273
273
274
274
auditor := * api .AGPL .Auditor .Load ()
275
- aReq , commitAudit := audit .InitRequest [database.User ](rw , & audit.RequestParams {
275
+ aReq , commitAudit , cancelAudit := audit .InitRequestWithCancel [database.User ](rw , & audit.RequestParams {
276
276
Audit : auditor ,
277
277
Log : api .Logger ,
278
278
Request : r ,
279
279
Action : database .AuditActionWrite ,
280
280
})
281
+
281
282
defer commitAudit ()
282
283
283
284
id := chi .URLParam (r , "id" )
@@ -323,17 +324,23 @@ func (api *API) scimPatchUser(rw http.ResponseWriter, r *http.Request) {
323
324
status = database .UserStatusSuspended
324
325
}
325
326
326
- //nolint:gocritic // needed for SCIM
327
- userNew , err := api .Database .UpdateUserStatus (dbauthz .AsSystemRestricted (r .Context ()), database.UpdateUserStatusParams {
328
- ID : dbUser .ID ,
329
- Status : status ,
330
- UpdatedAt : dbtime .Now (),
331
- })
332
- if err != nil {
333
- _ = handlerutil .WriteError (rw , err )
334
- return
327
+ if dbUser .Status != status {
328
+ //nolint:gocritic // needed for SCIM
329
+ userNew , err := api .Database .UpdateUserStatus (dbauthz .AsSystemRestricted (r .Context ()), database.UpdateUserStatusParams {
330
+ ID : dbUser .ID ,
331
+ Status : status ,
332
+ UpdatedAt : dbtime .Now (),
333
+ })
334
+ if err != nil {
335
+ _ = handlerutil .WriteError (rw , err )
336
+ return
337
+ }
338
+ dbUser = userNew
339
+ } else {
340
+ // Do not push an audit log if there is no change.
341
+ cancelAudit ()
335
342
}
336
- aReq .New = userNew
337
343
344
+ aReq .New = dbUser
338
345
httpapi .Write (ctx , rw , http .StatusOK , sUser )
339
346
}
0 commit comments