Merge lp:~roadmr/canonical-identity-provider/openid-token-reaper into lp:canonical-identity-provider/release

Proposed by Daniel Manrique
Status: Rejected
Rejected by: Daniel Manrique
Proposed branch: lp:~roadmr/canonical-identity-provider/openid-token-reaper
Merge into: lp:canonical-identity-provider/release
Diff against target: 29 lines (+12/-0)
1 file modified
src/identityprovider/views/server.py (+12/-0)
To merge this branch: bzr merge lp:~roadmr/canonical-identity-provider/openid-token-reaper
Reviewer Review Type Date Requested Status
Ubuntu One hackers Pending
Review via email: mp+349080@code.launchpad.net

Commit message

track openid token creation time and reap tokens (and payloads) over 1 day old to prevent sessions from growing boundlessly

Description of the change

track openid token creation time and reap tokens (and payloads) over 1 day old to prevent sessions from growing boundlessly

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/identityprovider/views/server.py'
2--- src/identityprovider/views/server.py 2018-05-28 19:44:56 +0000
3+++ src/identityprovider/views/server.py 2018-07-11 22:22:36 +0000
4@@ -4,6 +4,7 @@
5
6 import logging
7 import re
8+import time
9 import urllib
10 import urlparse
11 from datetime import timedelta
12@@ -225,6 +226,17 @@
13 token = generate_random_string(16)
14 request.session[token] = signed.dumps(orequest,
15 settings.SECRET_KEY)
16+ # Ensure session has expirations
17+ if 'token_expirations' not in request.session:
18+ request.session['token_expirations'] = {}
19+ now_timestamp = int(time.time())
20+ # Remove expired tokens
21+ tokex = request.session['token_expirations']
22+ [request.session.pop(token, None) and tokex.pop(token, None)
23+ for token, expiration in tokex.items()
24+ if now_timestamp > expiration]
25+ # All new tokens get an expiration 24 hours into the future
26+ tokex[token] = now_timestamp + 86400 # seconds
27 response = HttpResponseRedirect(
28 reverse('server-decide', kwargs=dict(token=token)))
29 referer = request.META.get('HTTP_REFERER')