[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