Skip to content

Commit

Permalink
Store userid to simplepush mapping (in a memory db for now). Fix 971993
Browse files Browse the repository at this point in the history
  • Loading branch information
almet committed Feb 18, 2014
1 parent 3033f1e commit a462e6f
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 4 deletions.
1 change: 1 addition & 0 deletions development.ini
@@ -1,5 +1,6 @@
[app:main]
token-secret = this is not a secret
storage = pants.storage.memory.MemoryStorage

use = egg:pants

Expand Down
8 changes: 6 additions & 2 deletions pants/__init__.py
Expand Up @@ -18,8 +18,12 @@ def main(global_config, **settings):
token_manager = TokenManager(secret=settings['token-secret'])
config.registry.token_manager = token_manager

def add_db_to_request(event):
backend_class = config.maybe_dotted(settings['storage'])
config.registry.storage = storage = backend_class(config)

def attach_services_to_request(event):
event.request.token_manager = token_manager
config.add_subscriber(add_db_to_request, NewRequest)
event.request.storage = storage
config.add_subscriber(attach_services_to_request, NewRequest)

return config.make_wsgi_app()
5 changes: 5 additions & 0 deletions pants/views.py
Expand Up @@ -33,6 +33,11 @@ def generate_callurl(request):
Generate a callurl based on user ID.
"""
userid = authenticated_userid(request)

# We need to try/except here in case the db fails.
request.storage.store_simplepush_url(
userid, request.validated['simple-push-url'])

token = request.token_manager.make_token({"userid": userid})
call_url = '{root}/call/{token}'.format(root=request.application_url,
token=token)
Expand Down
10 changes: 8 additions & 2 deletions tests/test_functional.py
Expand Up @@ -14,6 +14,7 @@ class FunctionalTest(unittest.TestCase):
def setUp(self):
self.app = webtest.TestApp("config:tests.ini", relative_to=__HERE__)
self.token_manager = self.app.app.registry.token_manager
self.storage = self.app.app.registry.storage
self.simple_push_url = 'https://token.services.mozilla.org'

# POST /call-url
Expand Down Expand Up @@ -62,8 +63,13 @@ def test_token_creation_requires_authn(self):
auth_header = resp.headers.get('WWW-Authenticate')
self.assertEquals(auth_header, 'Hawk', auth_header)

def test_token_creation_validates_authn(self):
pass
@sign_requests(user='n1k0')
def test_token_creation_stores_push_url(self):
self.app.post_json('/call-url', {
'simple-push-url': self.simple_push_url
}, status=200)
self.assertIn(self.simple_push_url,
self.storage.get_simplepush_urls('n1k0'))

# GET /call/<token>
def test_invalid_callurl_token_returns_400(self):
Expand Down
1 change: 1 addition & 0 deletions tests/tests.ini
@@ -1,5 +1,6 @@
[app:main]
token-secret = this is not a secret
storage = pants.storage.memory.MemoryStorage

use = egg:pants

Expand Down

0 comments on commit a462e6f

Please sign in to comment.