Skip to content
Snippets Groups Projects
Commit e64faa67 authored by Gunnar Schaefer's avatar Gunnar Schaefer Committed by Renzo Frigato
Browse files

Fail gracefully on uninitialized DB

parent fb9a61a1
No related branches found
No related tags found
No related merge requests found
......@@ -34,6 +34,10 @@ class RequestHandler(webapp2.RequestHandler):
access_token = self.request.headers.get('Authorization', None)
drone_secret = self.request.headers.get('X-SciTran-Auth', None)
site_id = config.site_id()
if site_id is None:
self.abort(503, 'Database not initialized')
# User (oAuth) authentication
if access_token and self.app.config['oauth2_id_endpoint']:
cached_token = self.app.db.authtokens.find_one({'_id': access_token})
......@@ -63,7 +67,7 @@ class RequestHandler(webapp2.RequestHandler):
u = u._replace(query=urllib.urlencode(query, True))
provider_avatar = urlparse.urlunparse(u)
else:
headers = {'WWW-Authenticate': 'Bearer realm="%s", error="invalid_token", error_description="Invalid OAuth2 token."' % config.site_id()}
headers = {'WWW-Authenticate': 'Bearer realm="%s", error="invalid_token", error_description="Invalid OAuth2 token."' % site_id}
self.abort(401, 'invalid oauth2 token', headers=headers)
# 'Debug' (insecure) setting: allow request to act as requested user
......@@ -87,7 +91,7 @@ class RequestHandler(webapp2.RequestHandler):
self.abort(402, remote_instance + ' is not an authorized remote instance')
else:
self.abort(401, 'no valid SSL client certificate')
self.user_site = self.source_site or config.site_id()
self.user_site = self.source_site or site_id
self.public_request = not drone_request and not self.uid
......
......@@ -10,7 +10,7 @@ def _get_item(item):
global last_update, latest_config
now = datetime.datetime.utcnow()
if now - last_update > datetime.timedelta(seconds=120) or latest_config is None:
latest_config = mongo.db.config.find_one({'latest': True})
latest_config = mongo.db.config.find_one({'latest': True}) or {}
last_update = now
return latest_config.get(item)
......
......@@ -4,4 +4,4 @@ db = None
def configure_db(db_uri):
global db
db = pymongo.MongoClient(db_uri, j=True).get_default_database()
db = pymongo.MongoClient(db_uri, j=True, connectTimeoutMS=2000, serverSelectionTimeoutMS=3000).get_default_database()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment