|
7 | 7 | from aiohttp import web |
8 | 8 |
|
9 | 9 | from slack_bolt.app.async_server import AsyncSlackAppServer |
| 10 | +from slack_bolt.listener.async_builtins import AsyncTokenRevocationListeners |
10 | 11 | from slack_bolt.listener.async_listener_completion_handler import ( |
11 | 12 | AsyncDefaultListenerCompletionHandler, |
12 | 13 | ) |
|
49 | 50 | warning_bot_only_conflicts, |
50 | 51 | debug_return_listener_middleware_response, |
51 | 52 | info_default_oauth_settings_loaded, |
| 53 | + error_installation_store_required_for_builtin_listeners, |
52 | 54 | ) |
53 | 55 | from slack_bolt.lazy_listener.asyncio_runner import AsyncioLazyListenerRunner |
54 | 56 | from slack_bolt.listener.async_listener import AsyncListener, AsyncCustomListener |
@@ -275,6 +277,14 @@ async def message_hello(message, say): # async function |
275 | 277 | ) |
276 | 278 | self._async_authorize.bot_only = app_bot_only |
277 | 279 |
|
| 280 | + self._async_tokens_revocation_listeners: Optional[ |
| 281 | + AsyncTokenRevocationListeners |
| 282 | + ] = None |
| 283 | + if self._async_installation_store is not None: |
| 284 | + self._async_tokens_revocation_listeners = AsyncTokenRevocationListeners( |
| 285 | + self._async_installation_store |
| 286 | + ) |
| 287 | + |
278 | 288 | # -------------------------------------- |
279 | 289 | # Middleware Initialization |
280 | 290 | # -------------------------------------- |
@@ -1151,6 +1161,27 @@ def __call__(*args, **kwargs): |
1151 | 1161 |
|
1152 | 1162 | return __call__ |
1153 | 1163 |
|
| 1164 | + # ------------------------- |
| 1165 | + # built-in listener functions |
| 1166 | + |
| 1167 | + def default_tokens_revoked_event_listener( |
| 1168 | + self, |
| 1169 | + ) -> Callable[..., Awaitable[Optional[BoltResponse]]]: |
| 1170 | + if self._async_tokens_revocation_listeners is None: |
| 1171 | + raise BoltError(error_installation_store_required_for_builtin_listeners()) |
| 1172 | + return self._async_tokens_revocation_listeners.handle_tokens_revoked_events |
| 1173 | + |
| 1174 | + def default_app_uninstalled_event_listener( |
| 1175 | + self, |
| 1176 | + ) -> Callable[..., Awaitable[Optional[BoltResponse]]]: |
| 1177 | + if self._async_tokens_revocation_listeners is None: |
| 1178 | + raise BoltError(error_installation_store_required_for_builtin_listeners()) |
| 1179 | + return self._async_tokens_revocation_listeners.handle_app_uninstalled_events |
| 1180 | + |
| 1181 | + def enable_token_revocation_listeners(self) -> None: |
| 1182 | + self.event("tokens_revoked")(self.default_tokens_revoked_event_listener()) |
| 1183 | + self.event("app_uninstalled")(self.default_app_uninstalled_event_listener()) |
| 1184 | + |
1154 | 1185 | # ------------------------- |
1155 | 1186 |
|
1156 | 1187 | def _init_context(self, req: AsyncBoltRequest): |
|
0 commit comments