Use BLENDER_ID_ENDPOINT to get roles from BlenderID
Also refactored some code.
This commit is contained in:
@@ -2,6 +2,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import httplib2 # used by the oauth2 package
|
import httplib2 # used by the oauth2 package
|
||||||
import requests
|
import requests
|
||||||
|
import urlparse
|
||||||
|
|
||||||
from flask import (abort, Blueprint, current_app, flash, redirect,
|
from flask import (abort, Blueprint, current_app, flash, redirect,
|
||||||
render_template, request, session, url_for)
|
render_template, request, session, url_for)
|
||||||
@@ -258,12 +259,9 @@ def user_roles_update(user_id):
|
|||||||
# subscription status once.
|
# subscription status once.
|
||||||
user = User.me(api=api)
|
user = User.me(api=api)
|
||||||
|
|
||||||
|
# Fetch user info from different sources.
|
||||||
store_user = subscriptions.fetch_user(user.email) or {}
|
store_user = subscriptions.fetch_user(user.email) or {}
|
||||||
try:
|
bid_user = fetch_blenderid_user()
|
||||||
bid_user = current_app.oauth_blender_id.get('/api/user').data or {}
|
|
||||||
except httplib2.HttpLib2Error:
|
|
||||||
log.exception('Error getting /api/user from BlenderID')
|
|
||||||
bid_user = {}
|
|
||||||
|
|
||||||
grant_subscriber = store_user.get('cloud_access', 0) == 1
|
grant_subscriber = store_user.get('cloud_access', 0) == 1
|
||||||
grant_demo = bid_user.get('roles', {}).get('cloud_demo', False)
|
grant_demo = bid_user.get('roles', {}).get('cloud_demo', False)
|
||||||
@@ -307,3 +305,32 @@ def user_roles_update(user_id):
|
|||||||
else:
|
else:
|
||||||
log.warning('Tried %i times to update user %s, and failed each time. Giving up.',
|
log.warning('Tried %i times to update user %s, and failed each time. Giving up.',
|
||||||
max_retry, user_id)
|
max_retry, user_id)
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_blenderid_user():
|
||||||
|
"""Returns the user info from BlenderID.
|
||||||
|
|
||||||
|
Returns an empty dict if communication fails.
|
||||||
|
|
||||||
|
:rtype: dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
bid_url = urlparse.urljoin(current_app.config['BLENDER_ID_ENDPOINT'], 'api/user')
|
||||||
|
log.debug('Fetching user info from %s', bid_url)
|
||||||
|
|
||||||
|
try:
|
||||||
|
bid_resp = current_app.oauth_blender_id.get(bid_url)
|
||||||
|
except httplib2.HttpLib2Error:
|
||||||
|
log.exception('Error getting %s from BlenderID', bid_url)
|
||||||
|
return {}
|
||||||
|
|
||||||
|
if bid_resp.status != 200:
|
||||||
|
log.warning('Error %i from BlenderID %s: %s', bid_resp.status, bid_url, bid_resp.data)
|
||||||
|
return {}
|
||||||
|
|
||||||
|
if not bid_resp.data:
|
||||||
|
log.warning('Empty data returned from BlenderID %s', bid_url)
|
||||||
|
return {}
|
||||||
|
|
||||||
|
log.debug('BlenderID returned %s', bid_resp.data)
|
||||||
|
return bid_resp.data
|
||||||
|
Reference in New Issue
Block a user