Skip to content

Commit 7a11a49

Browse files
authored
Moved token into Authorization header (#264)
* Moved auth token from param into header * Added auth header test * Allow token override
1 parent 3f41edc commit 7a11a49

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

slackclient/slackrequest.py

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22

33
import requests
4-
import six
4+
import six # noqa: F401
55

66
import sys
77
import platform
@@ -60,26 +60,33 @@ def do(self, token, request="?", post_data=None, domain="slack.com", timeout=Non
6060
than slack.com
6161
"""
6262

63+
url = 'https://{0}/api/{1}'.format(domain, request)
64+
65+
# Override token header if token is passed in form params
66+
if post_data is not None and "token" in post_data:
67+
token = post_data['token']
68+
69+
headers = {
70+
'user-agent': self.get_user_agent(),
71+
'Content-Type': 'application/json',
72+
'Authorization': 'Bearer {}'.format(token)
73+
}
74+
6375
# Pull file out so it isn't JSON encoded like normal fields.
6476
# Only do this for requests that are UPLOADING files; downloading files
6577
# use the 'file' argument to point to a File ID.
6678
post_data = post_data or {}
6779
upload_requests = ['files.upload']
80+
6881
files = None
6982
if request in upload_requests:
7083
files = {'file': post_data.pop('file')} if 'file' in post_data else None
7184

72-
for k, v in six.iteritems(post_data):
73-
if not isinstance(v, six.string_types):
74-
post_data[k] = json.dumps(v)
75-
76-
url = 'https://{0}/api/{1}'.format(domain, request)
77-
post_data['token'] = token
78-
headers = {'user-agent': self.get_user_agent()}
79-
80-
return requests.post(url,
81-
headers=headers,
82-
data=post_data,
83-
files=files,
84-
timeout=timeout,
85-
proxies=self.proxies)
85+
return requests.post(
86+
url,
87+
headers=headers,
88+
data=json.dumps(post_data),
89+
files=files,
90+
timeout=timeout,
91+
proxies=self.proxies
92+
)

tests/test_slackrequest.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ def test_custom_user_agent(mocker):
3232
assert "baragent:2/0.2" in kwargs['headers']['user-agent']
3333

3434

35+
def test_auth_header(mocker):
36+
requests = mocker.patch('slackclient.slackrequest.requests')
37+
request = SlackRequest()
38+
39+
request.do('xoxb-123', 'chat.postMessage', {'text': 'test', 'channel': '#general'})
40+
args, kwargs = requests.post.call_args
41+
42+
assert "Bearer xoxb-123" in kwargs['headers']['Authorization']
43+
44+
3545
def test_post_file(mocker):
3646
requests = mocker.patch('slackclient.slackrequest.requests')
3747
request = SlackRequest()
@@ -44,8 +54,7 @@ def test_post_file(mocker):
4454

4555
assert requests.post.call_count == 1
4656
assert 'https://slack.com/api/files.upload' == args[0]
47-
assert {'filename': 'slack_logo.png',
48-
'token': 'xoxb-123'} == kwargs['data']
57+
assert {'filename': 'slack_logo.png'} == json.loads(kwargs['data'])
4958
assert kwargs['files'] is not None
5059

5160

@@ -58,8 +67,7 @@ def test_get_file(mocker):
5867

5968
assert requests.post.call_count == 1
6069
assert 'https://slack.com/api/files.info' == args[0]
61-
assert {'file': "myFavoriteFileID",
62-
'token': 'xoxb-123'} == kwargs['data']
70+
assert {'file': "myFavoriteFileID"} == json.loads(kwargs['data'])
6371
assert kwargs['files'] is None
6472

6573

@@ -74,6 +82,5 @@ def test_post_attachements(mocker):
7482

7583
assert requests.post.call_count == 1
7684
assert 'https://slack.com/api/chat.postMessage' == args[0]
77-
assert {'attachments': json.dumps([{'title': 'hello'}]),
78-
'token': 'xoxb-123'} == kwargs['data']
85+
assert {'attachments': [{'title': 'hello'}]} == json.loads(kwargs['data'])
7986
assert kwargs['files'] is None

0 commit comments

Comments
 (0)