[Bf-extensions-cvs] [a28aa212] blender-v2.80-release: BlenderKit: fix oauth failing on some connections. This updates the oauth script to last version, and also ensures the login attempt can be properly canceled when it hangs.
Vilém Duha
noreply at git.blender.org
Mon Jul 29 16:06:30 CEST 2019
Commit: a28aa2127b07937ae92c3a83eb43fbfe4e64be6c
Author: Vilém Duha
Date: Fri Jul 26 12:01:43 2019 +0200
Branches: blender-v2.80-release
https://developer.blender.org/rBAa28aa2127b07937ae92c3a83eb43fbfe4e64be6c
BlenderKit: fix oauth failing on some connections. This updates the oauth script to last version, and also ensures the login attempt can be properly canceled when it hangs.
===================================================================
M blenderkit/bkit_oauth.py
M blenderkit/oauth.py
M blenderkit/ui_panels.py
M blenderkit/utils.py
===================================================================
diff --git a/blenderkit/bkit_oauth.py b/blenderkit/bkit_oauth.py
index 0dc23a9c..cb0e7586 100644
--- a/blenderkit/bkit_oauth.py
+++ b/blenderkit/bkit_oauth.py
@@ -32,6 +32,8 @@ else:
import bpy
import threading
+import requests
+
from bpy.props import (
BoolProperty,
@@ -40,16 +42,20 @@ from bpy.props import (
CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F"
PORTS = [62485, 65425, 55428, 49452]
+active_authenticator = None
def login_thread(signup=False):
+ global active_authenticator
r_url = paths.get_oauth_landing_url()
url = paths.get_bkit_url()
- thread = threading.Thread(target=login, args=([signup, url, r_url]), daemon=True)
+ authenticator = oauth.SimpleOAuthAuthenticator(server_url=url, client_id=CLIENT_ID, ports=PORTS)
+ #we store authenticator globally to be able to ping the server if connection fails.
+ active_authenticator = authenticator
+ thread = threading.Thread(target=login, args=([signup, url, r_url, authenticator]), daemon=True)
thread.start()
-def login(signup, url, r_url):
- authenticator = oauth.SimpleOAuthAuthenticator(server_url=url, client_id=CLIENT_ID, ports=PORTS)
+def login(signup, url, r_url, authenticator):
auth_token, refresh_token = authenticator.get_new_token(register=signup, redirect_url=r_url)
utils.p('tokens retrieved')
tasks_queue.add_task((write_tokens, (auth_token, refresh_token)))
@@ -140,8 +146,16 @@ class CancelLoginOnline(bpy.types.Operator):
return True
def execute(self, context):
+ global active_authenticator
preferences = bpy.context.preferences.addons['blenderkit'].preferences
preferences.login_attempt = False
+ try:
+ if active_authenticator is not None:
+ requests.get(active_authenticator.redirect_uri)
+ active_authenticator = None
+ except Exception as e:
+ print('stopped login attempt')
+ print(e)
return {'FINISHED'}
diff --git a/blenderkit/oauth.py b/blenderkit/oauth.py
index 3a37318a..bd237953 100644
--- a/blenderkit/oauth.py
+++ b/blenderkit/oauth.py
@@ -38,6 +38,8 @@ class SimpleOAuthAuthenticator(object):
"client_id": self.client_id,
"scopes": "read write",
}
+ if hasattr(self, 'redirect_uri'):
+ data["redirect_uri"] = self.redirect_uri
if authorization_code:
data['code'] = authorization_code
if refresh_token:
@@ -48,6 +50,8 @@ class SimpleOAuthAuthenticator(object):
data=data
)
if response.status_code != 200:
+ print("error retrieving refresh tokens %s" % response.status_code)
+ print(response.content)
return None, None
refresh_token = json.loads(response.content)['refresh_token']
access_token = json.loads(response.content)['access_token']
@@ -82,9 +86,10 @@ class SimpleOAuthAuthenticator(object):
except OSError:
continue
break
+ self.redirect_uri = "http://localhost:%s/consumer/exchange/" % port
authorize_url = (
"/o/authorize?client_id=%s&state=random_state_string&response_type=code&"
- "redirect_uri=http://localhost:%s/consumer/exchange/" % (self.client_id, port)
+ "redirect_uri=%s" % (self.client_id, self.redirect_uri)
)
if register:
authorize_url = "%s/accounts/register/?next=%s" % (self.server_url, urlquote(authorize_url))
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 615dcc09..9cd37db4 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -386,6 +386,10 @@ class VIEW3D_PT_blenderkit_model_properties(Panel):
layout.operator('object.blenderkit_bring_to_scene', text='Bring to scene')
# layout.operator('object.blenderkit_color_corrector')
+def draw_login_progress(layout):
+ layout.label(text='Login through browser')
+ layout.label(text='in progress.')
+ layout.operator("wm.blenderkit_login_cancel", text="Cancel", icon='CANCEL')
class VIEW3D_PT_blenderkit_profile(Panel):
bl_category = "BlenderKit"
@@ -405,9 +409,7 @@ class VIEW3D_PT_blenderkit_profile(Panel):
user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
if user_preferences.login_attempt:
- layout.label(text='Login through browser')
- layout.label(text='in progress.')
- layout.operator("wm.blenderkit_login_cancel", text="Cancel", icon='CANCEL')
+ draw_login_progress(layout)
return
if user_preferences.enable_oauth:
@@ -548,9 +550,7 @@ def draw_login_buttons(layout):
user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
if user_preferences.login_attempt:
- layout.label(text='Login through browser')
- layout.label(text='in progress.')
- layout.operator("wm.blenderkit_login_cancel", text="Cancel", icon='CANCEL')
+ draw_login_progress(layout)
else:
if user_preferences.api_key == '':
layout.operator("wm.blenderkit_login", text="Login",
@@ -596,9 +596,7 @@ class VIEW3D_PT_blenderkit_unified(Panel):
w = context.region.width
if user_preferences.login_attempt:
- layout.label(text='Login through browser')
- layout.label(text='in progress.')
- layout.operator("wm.blenderkit_login_cancel", text="Cancel", icon='CANCEL')
+ draw_login_progress(layout)
return
if len(user_preferences.api_key) < 20 and user_preferences.asset_counter > 20:
diff --git a/blenderkit/utils.py b/blenderkit/utils.py
index cb18ec7d..b6e93e1d 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -263,7 +263,7 @@ def get_brush_props(context):
def p(text, text1='', text2='', text3='', text4='', text5=''):
'''debug printing depending on blender's debug value'''
- if bpy.app.debug_value > 0:
+ if bpy.app.debug_value != 0:
print(text, text1, text2, text3, text4, text5)
More information about the Bf-extensions-cvs
mailing list