[Bf-extensions-cvs] [1bbae3ea] master: BlenderKit: split oauth into the original library and it's usage in blenderkit. (the lib is on Github as a new project)
Vilem Duha
noreply at git.blender.org
Mon May 20 23:09:40 CEST 2019
Commit: 1bbae3eaf89ad91b55355a303f043b7488e28d21
Author: Vilem Duha
Date: Mon May 20 11:19:48 2019 +0200
Branches: master
https://developer.blender.org/rBA1bbae3eaf89ad91b55355a303f043b7488e28d21
BlenderKit: split oauth into the original library and it's usage in blenderkit. (the lib is on Github as a new project)
===================================================================
M blenderkit/__init__.py
A blenderkit/bkit_oauth.py
M blenderkit/oauth.py
M blenderkit/search.py
M blenderkit/utils.py
===================================================================
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 4fabd97f..80a4746b 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -41,11 +41,11 @@ if "bpy" in locals():
importlib.reload(bg_blender)
importlib.reload(paths)
importlib.reload(utils)
- importlib.reload(oauth)
+ importlib.reload(bkit_oauth)
importlib.reload(tasks_queue)
else:
from blenderkit import asset_inspector, search, download, upload, ratings, autothumb, ui, bg_blender, paths, utils, \
- overrides, ui_panels, categories, oauth, tasks_queue
+ overrides, ui_panels, categories, bkit_oauth, tasks_queue
import os
import math
@@ -1418,7 +1418,7 @@ def register():
bg_blender.register()
utils.load_prefs()
overrides.register_overrides()
- oauth.register()
+ bkit_oauth.register()
tasks_queue.register()
bpy.app.handlers.load_post.append(scene_load)
@@ -1435,7 +1435,7 @@ def unregister():
ui_panels.unregister_ui_panels()
bg_blender.unregister()
overrides.unregister_overrides()
- oauth.unregister()
+ bkit_oauth.unregister()
tasks_queue.unregister()
del bpy.types.Scene.blenderkit_models
diff --git a/blenderkit/oauth.py b/blenderkit/bkit_oauth.py
similarity index 58%
copy from blenderkit/oauth.py
copy to blenderkit/bkit_oauth.py
index c5d1932a..14274b04 100644
--- a/blenderkit/oauth.py
+++ b/blenderkit/bkit_oauth.py
@@ -18,87 +18,20 @@
import bpy
-import json
-import webbrowser
-from http.server import BaseHTTPRequestHandler, HTTPServer
-from urllib.parse import parse_qs, urlparse
-
-import requests
import threading
import blenderkit
-from blenderkit import tasks_queue, utils, paths, search, categories
+from blenderkit import tasks_queue, utils, paths, search, categories, oauth
CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F"
PORTS = [62485, 1234]
-
-class SimpleOAuthAuthenticator(object):
- def __init__(self, server_url, client_id, ports):
- self.server_url = server_url
- self.client_id = client_id
- self.ports = ports
-
- def _get_tokens(self, authorization_code=None, refresh_token=None, grant_type="authorization_code"):
- data = {
- "grant_type": grant_type,
- "state": "random_state_string",
- "client_id": self.client_id,
- "scopes": "read write",
- }
- if authorization_code:
- data['code'] = authorization_code
- if refresh_token:
- data['refresh_token'] = refresh_token
-
- response = requests.post(
- '%s/o/token/' % self.server_url,
- data=data
- )
- if response.status_code != 200:
- return None, None
- refresh_token = json.loads(response.content)['refresh_token']
- access_token = json.loads(response.content)['access_token']
- return access_token, refresh_token
-
- def get_new_token(self):
- class HTTPServerHandler(BaseHTTPRequestHandler):
- def do_GET(self):
- self.send_response(200)
- self.send_header('Content-type', 'text/html')
- self.end_headers()
- if 'code' in self.path:
- self.auth_code = self.path.split('=')[1]
- # Display to the user that they no longer need the browser window
- self.wfile.write(bytes('<html><h1>You may now close this window.</h1></html>', 'utf-8'))
- qs = parse_qs(urlparse(self.path).query)
- self.server.authorization_code = qs['code'][0]
-
- for port in self.ports:
- try:
- httpServer = HTTPServer(('localhost', port), HTTPServerHandler)
- except OSError:
- continue
- break
- webbrowser.open_new(
- "%s/o/authorize?client_id=%s&state=random_state_string&response_type=code&"
- "redirect_uri=http://localhost:%s/consumer/exchange/" % (self.server_url, self.client_id, port),
- )
-
- httpServer.handle_request()
- authorization_code = httpServer.authorization_code
- return self._get_tokens(authorization_code=authorization_code)
-
- def get_refreshed_token(self, refresh_token):
- return self._get_tokens(refresh_token=refresh_token, grant_type="refresh_token")
-
-
def login_thread():
thread = threading.Thread(target=login, args=([]), daemon=True)
thread.start()
def login():
- authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
+ authenticator = oauth.SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
auth_token, refresh_token = authenticator.get_new_token()
utils.p('tokens retrieved')
tasks_queue.add_task((write_tokens , (auth_token, refresh_token)))
@@ -112,7 +45,7 @@ def refresh_token_thread():
def refresh_token(api_key_refresh):
- authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
+ authenticator = oauth.SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
auth_token, refresh_token = authenticator.get_refreshed_token(api_key_refresh)
if auth_token is not None and refresh_token is not None:
tasks_queue.add_task((blenderkit.oauth.write_tokens , (auth_token, refresh_token)))
diff --git a/blenderkit/oauth.py b/blenderkit/oauth.py
index c5d1932a..61d6a7e8 100644
--- a/blenderkit/oauth.py
+++ b/blenderkit/oauth.py
@@ -16,7 +16,6 @@
#
# ##### END GPL LICENSE BLOCK #####
-import bpy
import json
import webbrowser
@@ -24,12 +23,6 @@ from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs, urlparse
import requests
-import threading
-import blenderkit
-from blenderkit import tasks_queue, utils, paths, search, categories
-
-CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F"
-PORTS = [62485, 1234]
class SimpleOAuthAuthenticator(object):
@@ -90,111 +83,3 @@ class SimpleOAuthAuthenticator(object):
def get_refreshed_token(self, refresh_token):
return self._get_tokens(refresh_token=refresh_token, grant_type="refresh_token")
-
-
-def login_thread():
- thread = threading.Thread(target=login, args=([]), daemon=True)
- thread.start()
-
-
-def login():
- authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
- auth_token, refresh_token = authenticator.get_new_token()
- utils.p('tokens retrieved')
- tasks_queue.add_task((write_tokens , (auth_token, refresh_token)))
-
-
-def refresh_token_thread():
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if len(preferences.api_key_refresh) > 0:
- thread = threading.Thread(target=refresh_token, args=([preferences.api_key_refresh]), daemon=True)
- thread.start()
-
-
-def refresh_token(api_key_refresh):
- authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
- auth_token, refresh_token = authenticator.get_refreshed_token(api_key_refresh)
- if auth_token is not None and refresh_token is not None:
- tasks_queue.add_task((blenderkit.oauth.write_tokens , (auth_token, refresh_token)))
-
-
-def write_tokens(auth_token, refresh_token):
- utils.p('writing tokens')
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- preferences.api_key_refresh = refresh_token
- preferences.api_key = auth_token
- preferences.login_attempt = False
- props = utils.get_search_props()
- props.report = 'Login success!'
- search.get_profile()
- categories.fetch_categories_thread(auth_token)
-
-
-class RegisterLoginOnline(bpy.types.Operator):
- """Bring linked object hierarchy to scene and make it editable."""
-
- bl_idname = "wm.blenderkit_login"
- bl_label = "BlenderKit login or signup"
- bl_options = {'REGISTER', 'UNDO'}
-
- @classmethod
- def poll(cls, context):
- return True
-
- def execute(self, context):
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- preferences.login_attempt = True
- login_thread()
- return {'FINISHED'}
-
-
-class Logout(bpy.types.Operator):
- """Bring linked object hierarchy to scene and make it editable."""
-
- bl_idname = "wm.blenderkit_logout"
- bl_label = "BlenderKit logout"
- bl_options = {'REGISTER', 'UNDO'}
-
- @classmethod
- def poll(cls, context):
- return True
-
- def execute(self, context):
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- preferences.login_attempt = False
- preferences.api_key_refresh = ''
- preferences.api_key = ''
- return {'FINISHED'}
-
-
-class CancelLoginOnline(bpy.types.Operator):
- """Cancel login attempt."""
-
- bl_idname = "wm.blenderkit_login_cancel"
- bl_label = "BlenderKit login cancel"
- bl_options = {'REGISTER', 'UNDO'}
-
- @classmethod
- def poll(cls, context):
- return True
-
- def execute(self, context):
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- preferences.login_attempt = False
- return {'FINISHED'}
-
-classess = (
- RegisterLoginOnline,
- CancelLoginOnline,
- Logout,
-)
-
-
-def register():
- for c in classess:
- bpy.utils.register_class(c)
-
-
-def unregister():
- for c in classess:
- bpy.utils.unregister_class(c)
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 84069467..306434a1 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -24,10 +24,10 @@ if "bpy" in locals():
imp.reload(categories)
imp.reload(ui)
imp.reload(version_checker)
- imp.reload(oauth)
+ imp.reload(bkit_oauth)
imp.reload(tasks_queue)
else:
- from blenderkit import paths, utils, categories, ui, oauth, version_checker, tasks_queue
+ from blenderkit import paths, utils, categories, ui, bkit_oauth, version_checker, tasks_queue
import blenderkit
from bpy.app.handlers import persistent
@@ -64,7
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list