Skip to content

Commit 39d32b5

Browse files
committed
Added support for v2 authid with cli tokens
1 parent 4e58e68 commit 39d32b5

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

cli-token.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ <h1>{{appname}} for {{service}}</h1>
2525
<p>Type in the CLI token</p>
2626
<form action="/cli-token-login" method="POST">
2727
<input type="hidden" id="id" name="id" value="{{id}}" />
28+
<input type="hidden" id="tokenversion" name="tokenversion" value="{{tokenversion}}" />
2829
<input class="form-control" type="text" id="token" name="token" required />
2930
<br/>
3031
<br/>

main.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ def get(self):
172172
if self.request.get('token', None) is not None:
173173
link += '&token=' + self.request.get('token')
174174

175-
if tokenversion is not None:
176-
link += '&tokenversion=' + str(tokenversion)
175+
if tokenversion is not None:
176+
link += '&tokenversion=' + str(tokenversion)
177177

178178
notes = ''
179179
if n.has_key('notes'):
@@ -396,7 +396,8 @@ def get(self):
396396
'service': provider['display'],
397397
'appname': settings.APP_NAME,
398398
'longappname': settings.SERVICE_DISPLAYNAME,
399-
'id': provider['id']
399+
'id': provider['id'],
400+
'tokenversion': self.request.get('tokenversion', '')
400401
}
401402

402403
template = JINJA_ENVIRONMENT.get_template('cli-token.html')
@@ -414,6 +415,12 @@ def post(self):
414415
provider, service = find_provider_and_service(id)
415416
display = provider['display']
416417

418+
tokenversion = None
419+
try:
420+
tokenversion = int(self.request.POST.get('tokenversion'))
421+
except:
422+
pass
423+
417424
try:
418425
data = self.request.POST.get('token')
419426
content = base64.urlsafe_b64decode(str(data) + '=' * (-len(data) % 4))
@@ -444,6 +451,28 @@ def post(self):
444451

445452
resp = json.loads(content)
446453

454+
# v2 tokens are just the provider name and the refresh token
455+
# and they have no stored state on the server
456+
if tokenversion == 2:
457+
authid = 'v2:' + id + ':' + resp['refresh_token']
458+
fetchtoken = dbmodel.create_fetch_token(resp)
459+
dbmodel.update_fetch_token(fetchtoken, authid)
460+
461+
# Report results to the user
462+
template_values = {
463+
'service': display,
464+
'appname': settings.APP_NAME,
465+
'longappname': settings.SERVICE_DISPLAYNAME,
466+
'authid': authid,
467+
'fetchtoken': fetchtoken
468+
}
469+
470+
template = JINJA_ENVIRONMENT.get_template('logged-in.html')
471+
self.response.write(template.render(template_values))
472+
473+
logging.info('Returned refresh token for service %s', id)
474+
return
475+
447476
keyid, authid = create_authtoken(id, resp)
448477

449478
fetchtoken = dbmodel.create_fetch_token(resp)

0 commit comments

Comments
 (0)