@@ -408,21 +408,35 @@ def action_refresh_metadata_from_url(self):
408
408
)
409
409
if not providers :
410
410
return False
411
+
412
+ providers_to_update = {}
413
+ for provider in providers :
414
+ document = requests .get (provider .idp_metadata_url , timeout = 5 )
415
+ if document .status_code != 200 :
416
+ raise UserError (
417
+ f"Unable to download the metadata for { provider .name } : { document .reason } "
418
+ )
419
+ if document .text != provider .idp_metadata :
420
+ providers_to_update [provider .id ] = document .text
421
+
422
+ if not providers_to_update :
423
+ return False
424
+
411
425
# lock the records we might update, so that multiple simultaneous login
412
426
# attempts will not cause concurrent updates
427
+ provider_ids = tuple (providers_to_update .keys ())
413
428
self .env .cr .execute (
414
429
"SELECT id FROM auth_saml_provider WHERE id in %s FOR UPDATE" ,
415
- (tuple (providers . ids ),),
430
+ (tuple (provider_ids ),),
416
431
)
417
432
updated = False
418
433
for provider in providers :
419
- document = requests .get (provider .idp_metadata_url )
420
- if document .status_code != 200 :
421
- raise UserError (
422
- f"Unable to download the metadata for { provider .name } : { document .reason } "
434
+ if provider .id in providers_to_update :
435
+ provider .idp_metadata = providers_to_update [provider .id ]
436
+ _logger .info (
437
+ "Updated metadata for provider %s from %s" ,
438
+ provider .name ,
423
439
)
424
- if document .text != provider .idp_metadata :
425
- provider .idp_metadata = document .text
426
- _logger .info ("Updated provider metadata for %s" , provider .name )
427
440
updated = True
441
+
428
442
return updated
0 commit comments