Skip to content

Commit 2622423

Browse files
committed
Refactor API auth
1 parent ba290b9 commit 2622423

4 files changed

Lines changed: 20 additions & 11 deletions

File tree

pybot/endpoints/slack/utils/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
slack_configs = {
2121
"token": os.environ.get("BOT_OATH_TOKEN"),
22-
"signing_secret": os.environ.get("SLACK_SIGNING_SECRET"),
22+
"signing_secret": os.environ.get("SLACK_BOT_SIGNING_SECRET"),
2323
"verify": os.environ.get("VERIFICATION_TOKEN"),
2424
"bot_id": os.environ.get("SLACK_BOT_ID"),
2525
"bot_user_id": os.environ.get("SLACK_BOT_ID"),

pybot/plugins/api/endpoints.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44

55
from aiohttp.web_response import Response
66

7-
from pybot.plugins.api.request import SlackApiRequest
7+
from pybot.plugins.api.request import SlackApiRequest, FailedVerification
88

99
logger = logging.getLogger(__name__)
1010

1111

1212
async def slack_api(request):
1313
api_plugin = request.app.plugins["api"]
14-
slack_request = SlackApiRequest.from_request(request)
1514

16-
if not slack_request.authorized:
17-
logger.info(
18-
f"Received unauthorized request Request: {slack_request} Token: {slack_request.token}"
19-
)
20-
return Response(status=403)
15+
try:
16+
slack_request = SlackApiRequest.from_request(request)
17+
except FailedVerification:
18+
return Response(status=401)
2119

2220
futures = list(_dispatch(api_plugin.routers["slack"], slack_request, request.app))
2321

pybot/plugins/api/request.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import copy
2-
import json
32
import os
43
from typing import MutableMapping
54

@@ -26,6 +25,9 @@ def __init__(self, raw_request, resource, query):
2625
self.query = query
2726
self.token = self.__get_token(raw_request)
2827

28+
if not self.authorized:
29+
raise FailedVerification(self.token)
30+
2931
@property
3032
def authorized(self):
3133
return self.token is not None and self.token in self.auth_tokens
@@ -75,3 +77,12 @@ def clone(self) -> "SlackApiRequest":
7577
copy.deepcopy(self.resource),
7678
copy.deepcopy(self.query),
7779
)
80+
81+
82+
class FailedVerification(Exception):
83+
"""
84+
Raised when incoming API request fails verification
85+
"""
86+
87+
def __init__(self, token: str) -> None:
88+
self.token = token

tests/endpoints/api/test_slack_api_endpoint.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
"headers, status",
1818
[
1919
({"Authorization": "Bearer devBackendToken"}, 200),
20-
({"Authorization": "Bearer abc"}, 403),
21-
(None, 403),
20+
({"Authorization": "Bearer abc"}, 401),
21+
(None, 401),
2222
],
2323
)
2424
async def test_detect_credentials(bot: SirBot, aiohttp_client, headers, status):

0 commit comments

Comments
 (0)