|
39 | 39 | class KeyStore(CacheInvalidationWorkerStore):
|
40 | 40 | """Persistence for signature verification keys"""
|
41 | 41 |
|
42 |
| - @cached() |
43 |
| - def _get_server_signature_key( |
44 |
| - self, server_name_and_key_id: Tuple[str, str] |
45 |
| - ) -> FetchKeyResult: |
46 |
| - raise NotImplementedError() |
47 |
| - |
48 |
| - @cachedList( |
49 |
| - cached_method_name="_get_server_signature_key", |
50 |
| - list_name="server_name_and_key_ids", |
51 |
| - ) |
52 |
| - async def get_server_signature_keys( |
53 |
| - self, server_name_and_key_ids: Iterable[Tuple[str, str]] |
54 |
| - ) -> Dict[Tuple[str, str], FetchKeyResult]: |
55 |
| - """ |
56 |
| - Args: |
57 |
| - server_name_and_key_ids: |
58 |
| - iterable of (server_name, key-id) tuples to fetch keys for |
59 |
| -
|
60 |
| - Returns: |
61 |
| - A map from (server_name, key_id) -> FetchKeyResult, or None if the |
62 |
| - key is unknown |
63 |
| - """ |
64 |
| - keys = {} |
65 |
| - |
66 |
| - def _get_keys(txn: Cursor, batch: Tuple[Tuple[str, str], ...]) -> None: |
67 |
| - """Processes a batch of keys to fetch, and adds the result to `keys`.""" |
68 |
| - |
69 |
| - # batch_iter always returns tuples so it's safe to do len(batch) |
70 |
| - sql = """ |
71 |
| - SELECT server_name, key_id, verify_key, ts_valid_until_ms |
72 |
| - FROM server_signature_keys WHERE 1=0 |
73 |
| - """ + " OR (server_name=? AND key_id=?)" * len( |
74 |
| - batch |
75 |
| - ) |
76 |
| - |
77 |
| - txn.execute(sql, tuple(itertools.chain.from_iterable(batch))) |
78 |
| - |
79 |
| - for row in txn: |
80 |
| - server_name, key_id, key_bytes, ts_valid_until_ms = row |
81 |
| - |
82 |
| - if ts_valid_until_ms is None: |
83 |
| - # Old keys may be stored with a ts_valid_until_ms of null, |
84 |
| - # in which case we treat this as if it was set to `0`, i.e. |
85 |
| - # it won't match key requests that define a minimum |
86 |
| - # `ts_valid_until_ms`. |
87 |
| - ts_valid_until_ms = 0 |
88 |
| - |
89 |
| - keys[(server_name, key_id)] = FetchKeyResult( |
90 |
| - verify_key=decode_verify_key_bytes(key_id, bytes(key_bytes)), |
91 |
| - valid_until_ts=ts_valid_until_ms, |
92 |
| - ) |
93 |
| - |
94 |
| - def _txn(txn: Cursor) -> Dict[Tuple[str, str], FetchKeyResult]: |
95 |
| - for batch in batch_iter(server_name_and_key_ids, 50): |
96 |
| - _get_keys(txn, batch) |
97 |
| - return keys |
98 |
| - |
99 |
| - return await self.db_pool.runInteraction("get_server_signature_keys", _txn) |
100 |
| - |
101 | 42 | async def store_server_keys_response(
|
102 | 43 | self,
|
103 | 44 | server_name: str,
|
@@ -173,9 +114,6 @@ def store_server_keys_response_txn(txn: LoggingTransaction) -> None:
|
173 | 114 | self._invalidate_cache_and_stream(
|
174 | 115 | txn, self.get_server_key_json_for_remote, (server_name, key_id)
|
175 | 116 | )
|
176 |
| - self._invalidate_cache_and_stream( |
177 |
| - txn, self._get_server_signature_key, ((server_name, key_id),) |
178 |
| - ) |
179 | 117 |
|
180 | 118 | await self.db_pool.runInteraction(
|
181 | 119 | "store_server_keys_response", store_server_keys_response_txn
|
|
0 commit comments