Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVilém Duha <vilda.novak@gmail.com>2019-07-26 13:01:43 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-07-29 15:16:43 +0300
commita28aa2127b07937ae92c3a83eb43fbfe4e64be6c (patch)
treebfaba56cbc53fb85575798f3899211fc9c0bb644
parent4998c392f904eba67f3182aa9cc4f065d5d858d4 (diff)
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.
-rw-r--r--blenderkit/bkit_oauth.py20
-rw-r--r--blenderkit/oauth.py7
-rw-r--r--blenderkit/ui_panels.py16
-rw-r--r--blenderkit/utils.py2
4 files changed, 31 insertions, 14 deletions
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)