Skip to content

Commit 0007806

Browse files
committed
add SSO url generation
1 parent 6953878 commit 0007806

File tree

7 files changed

+34
-8
lines changed

7 files changed

+34
-8
lines changed

fixtures/create_user.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- !!python/tuple [Content-Type, application/json]
66
host: localhost
77
method: POST
8-
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
8+
path: /api/v1/users.json?client_secret=4441879b5e2a9c3271f5b1a4bc223b715f091e5ed20fe75d1352e1290c7a6dfb&auth_token=a-test-api-key&client_id=3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9
99
port: 3000
1010
protocol: http
1111
response:

fixtures/user.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- !!python/tuple [Content-Type, application/json]
66
host: localhost
77
method: GET
8-
path: /api/v1/users/12345.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
8+
path: /api/v1/users/12345.json?client_secret=4441879b5e2a9c3271f5b1a4bc223b715f091e5ed20fe75d1352e1290c7a6dfb&auth_token=a-test-api-key&client_id=3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9
99
port: 3000
1010
protocol: http
1111
response:

fixtures/users.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- !!python/tuple [Content-Type, application/json]
66
host: localhost
77
method: GET
8-
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
8+
path: /api/v1/users.json?client_secret=4441879b5e2a9c3271f5b1a4bc223b715f091e5ed20fe75d1352e1290c7a6dfb&auth_token=a-test-api-key&client_id=3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9
99
port: 3000
1010
protocol: http
1111
response:

fixtures/users_pagination.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- !!python/tuple [Content-Type, application/json]
66
host: localhost
77
method: GET
8-
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&page=2&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
8+
path: /api/v1/users.json?client_secret=4441879b5e2a9c3271f5b1a4bc223b715f091e5ed20fe75d1352e1290c7a6dfb&auth_token=a-test-api-key&page=2&client_id=3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9
99
port: 3000
1010
protocol: http
1111
response:

swiftype/swiftype.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import urllib
44
import urlparse
55
import base64
6-
import datetime
6+
import time
7+
import hashlib
78

89
from version import VERSION
910

@@ -143,6 +144,17 @@ def create_user(self):
143144
params = {'client_id': self.client_id, 'client_secret': self.client_secret}
144145
return self.conn._post(self.__users_path(), params)
145146

147+
def sso_url(self, user_id):
148+
timestamp = self._get_timestamp()
149+
params = {'user_id': user_id, 'client_id': self.client_id, 'timestamp': timestamp, 'token': self._sso_token(user_id, timestamp)}
150+
return urlparse.urlunparse(('https', 'swiftype.com', '/sso', '', urllib.urlencode(params), ''))
151+
152+
def _sso_token(self, user_id, timestamp):
153+
return hashlib.sha1('%s:%s:%s' % (user_id, self.client_secret, timestamp)).hexdigest()
154+
155+
def _get_timestamp(self):
156+
return int(time.time())
157+
146158
def __search_path(self, engine_id): return 'engines/%s/search' % (engine_id)
147159
def __suggest_path(self, engine_id): return 'engines/%s/suggest' % (engine_id)
148160
def __engines_path(self): return 'engines'

test_requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
nose==1.3.0
2-
vcrpy==0.5.0
2+
vcrpy==0.5.0
3+
mock>=1.0.1

tests/test_swiftype.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import time
44
import unittest
55
import vcr
6+
from mock import Mock
67

78
class TestClientFunctions(unittest.TestCase):
89

@@ -275,8 +276,8 @@ def setUp(self):
275276
except:
276277
api_key = "a-test-api-key"
277278

278-
client_id = 'bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf'
279-
client_secret = 'a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f'
279+
client_id = '3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9'
280+
client_secret = '4441879b5e2a9c3271f5b1a4bc223b715f091e5ed20fe75d1352e1290c7a6dfb'
280281
self.client = swiftype.Client(api_key=api_key, client_id=client_id, client_secret=client_secret, host='localhost:3000')
281282

282283
def test_users(self):
@@ -302,6 +303,18 @@ def test_create_user(self):
302303
response = self.client.create_user()
303304
self.assertEqual(response['status'], 200)
304305

306+
def test_sso_token(self):
307+
timestamp = 1379382520
308+
user_id = '5064a7de2ed960e715000276'
309+
token = self.client._sso_token(user_id, timestamp)
310+
self.assertEqual(token, '81033d182ad51f231cc9cda9fb24f2298a411437')
311+
312+
def test_sso_url(self):
313+
self.client._get_timestamp = Mock(return_value=1379382520)
314+
user_id = '5064a7de2ed960e715000276'
315+
url = self.client.sso_url(user_id)
316+
self.assertEqual(url, 'https://swiftype.com/sso?timestamp=1379382520&token=81033d182ad51f231cc9cda9fb24f2298a411437&user_id=5064a7de2ed960e715000276&client_id=3e4fd842fc99aecb4dc50e5b88a186c1e206ddd516cdd336da3622c4afd7e2e9')
317+
305318
class TestPlatformResources(unittest.TestCase):
306319

307320
def setUp(self):

0 commit comments

Comments
 (0)