|
3 | 3 | import json |
4 | 4 | import logging |
5 | 5 | import os |
| 6 | +import threading |
6 | 7 | import time |
7 | 8 | from datetime import datetime |
8 | 9 | from functools import cmp_to_key |
@@ -507,34 +508,35 @@ def update(self): |
507 | 508 | :return: True if update was ok or False if we encountered an error during update. |
508 | 509 | """ |
509 | 510 | if self.source: |
510 | | - _old_keys = self._keys # just in case |
| 511 | + with threading.Lock(): |
| 512 | + _old_keys = self._keys # just in case |
511 | 513 |
|
512 | | - # reread everything |
513 | | - self._keys = [] |
514 | | - updated = None |
| 514 | + # reread everything |
| 515 | + self._keys = [] |
| 516 | + updated = None |
515 | 517 |
|
516 | | - try: |
517 | | - if self.local: |
518 | | - if self.fileformat in ["jwks", "jwk"]: |
519 | | - updated = self.do_local_jwk(self.source) |
520 | | - elif self.fileformat == "der": |
521 | | - updated = self.do_local_der(self.source, self.keytype, self.keyusage) |
522 | | - elif self.remote: |
523 | | - updated = self.do_remote() |
524 | | - except Exception as err: |
525 | | - LOGGER.error("Key bundle update failed: %s", err) |
526 | | - self._keys = _old_keys # restore |
527 | | - return False |
528 | | - |
529 | | - if updated: |
530 | | - now = time.time() |
531 | | - for _key in _old_keys: |
532 | | - if _key not in self._keys: |
533 | | - if not _key.inactive_since: # If already marked don't mess |
534 | | - _key.inactive_since = now |
535 | | - self._keys.append(_key) |
536 | | - else: |
537 | | - self._keys = _old_keys |
| 518 | + try: |
| 519 | + if self.local: |
| 520 | + if self.fileformat in ["jwks", "jwk"]: |
| 521 | + updated = self.do_local_jwk(self.source) |
| 522 | + elif self.fileformat == "der": |
| 523 | + updated = self.do_local_der(self.source, self.keytype, self.keyusage) |
| 524 | + elif self.remote: |
| 525 | + updated = self.do_remote() |
| 526 | + except Exception as err: |
| 527 | + LOGGER.error("Key bundle update failed: %s", err) |
| 528 | + self._keys = _old_keys # restore |
| 529 | + return False |
| 530 | + |
| 531 | + if updated: |
| 532 | + now = time.time() |
| 533 | + for _key in _old_keys: |
| 534 | + if _key not in self._keys: |
| 535 | + if not _key.inactive_since: # If already marked don't mess |
| 536 | + _key.inactive_since = now |
| 537 | + self._keys.append(_key) |
| 538 | + else: |
| 539 | + self._keys = _old_keys |
538 | 540 |
|
539 | 541 | return True |
540 | 542 |
|
|
0 commit comments