|
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