From 4c305543edbb30abe83aa8174a02f12a2a278203 Mon Sep 17 00:00:00 2001
From: Gunnar Schaefer <gsfr@stanford.edu>
Date: Thu, 20 Nov 2014 14:31:15 -0800
Subject: [PATCH] return 401 for bad tokens

---
 base.py | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/base.py b/base.py
index bc16fafe..d6a88384 100644
--- a/base.py
+++ b/base.py
@@ -84,7 +84,6 @@ class RequestHandler(webapp2.RequestHandler):
 
     def __init__(self, request=None, response=None):
         self.initialize(request, response)
-        self.access_token = self.request.headers.get('Authorization', None)
         self.debug = self.app.config['insecure']
 
         # CORS header
@@ -94,16 +93,14 @@ class RequestHandler(webapp2.RequestHandler):
         # set uid, source_site, public_request, and superuser
         self.uid = None
         self.source_site = None
-        if self.access_token and self.app.config['oauth2_id_endpoint']:
-            r = requests.get(self.app.config['oauth2_id_endpoint'], headers={'Authorization': 'Bearer ' + self.access_token})
+        access_token = self.request.headers.get('Authorization', None)
+        if access_token and self.app.config['oauth2_id_endpoint']:
+            r = requests.get(self.app.config['oauth2_id_endpoint'], headers={'Authorization': 'Bearer ' + access_token})
             if r.status_code == 200:
                 self.uid = json.loads(r.content)['email']
             else:
-                # TODO: add handlers for bad tokens
-                # inform app of expired token, app will try to get new token, or ask user to log in again
-                # requst should probably return here
-                self.uid = None # should not be needed if the above is done
-                log.debug('ERR: ' + str(r.status_code) + ' ' + r.reason + ': bad token')
+                headers = {'WWW-Authenticate': 'Bearer realm="%s", error="invalid_token", error_description="Invalid OAuth2 token."' % self.app.config['site_id']}
+                self.abort(401, 'invalid oauth2 token', headers=headers)
         elif self.debug and self.request.get('user'):
             self.uid = self.request.get('user')
         elif self.request.user_agent.startswith('NIMS Instance'):
-- 
GitLab