diff options
author | Vilém Duha <vilda.novak@gmail.com> | 2019-07-26 13:01:43 +0300 |
---|---|---|
committer | Vilém Duha <vilda.novak@gmail.com> | 2019-07-26 13:51:28 +0300 |
commit | 92830c7e43ae5f701b47bcd07199ca3a7e489377 (patch) | |
tree | d8ce3558b9f9d529b89c42b61e2db0a61c53a514 /blenderkit | |
parent | 7ecccf12b8ff140d331ef3d45842f8bb0759e03e (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.
Diffstat (limited to 'blenderkit')
-rw-r--r-- | blenderkit/bkit_oauth.py | 20 | ||||
-rw-r--r-- | blenderkit/oauth.py | 7 | ||||
-rw-r--r-- | blenderkit/ui_panels.py | 16 | ||||
-rw-r--r-- | blenderkit/utils.py | 2 |
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) |