|
@@ -6,6 +6,7 @@ import requests
|
|
|
from flask import current_app, redirect, request
|
|
|
from flask_restful import Resource
|
|
|
|
|
|
+from configs import dify_config
|
|
|
from constants.languages import languages
|
|
|
from extensions.ext_database import db
|
|
|
from libs.helper import get_remote_ip
|
|
@@ -18,22 +19,24 @@ from .. import api
|
|
|
|
|
|
def get_oauth_providers():
|
|
|
with current_app.app_context():
|
|
|
- github_oauth = GitHubOAuth(client_id=current_app.config.get('GITHUB_CLIENT_ID'),
|
|
|
- client_secret=current_app.config.get(
|
|
|
- 'GITHUB_CLIENT_SECRET'),
|
|
|
- redirect_uri=current_app.config.get(
|
|
|
- 'CONSOLE_API_URL') + '/console/api/oauth/authorize/github')
|
|
|
-
|
|
|
- google_oauth = GoogleOAuth(client_id=current_app.config.get('GOOGLE_CLIENT_ID'),
|
|
|
- client_secret=current_app.config.get(
|
|
|
- 'GOOGLE_CLIENT_SECRET'),
|
|
|
- redirect_uri=current_app.config.get(
|
|
|
- 'CONSOLE_API_URL') + '/console/api/oauth/authorize/google')
|
|
|
-
|
|
|
- OAUTH_PROVIDERS = {
|
|
|
- 'github': github_oauth,
|
|
|
- 'google': google_oauth
|
|
|
- }
|
|
|
+ if not dify_config.GITHUB_CLIENT_ID or not dify_config.GITHUB_CLIENT_SECRET:
|
|
|
+ github_oauth = None
|
|
|
+ else:
|
|
|
+ github_oauth = GitHubOAuth(
|
|
|
+ client_id=dify_config.GITHUB_CLIENT_ID,
|
|
|
+ client_secret=dify_config.GITHUB_CLIENT_SECRET,
|
|
|
+ redirect_uri=dify_config.CONSOLE_API_URL + '/console/api/oauth/authorize/github',
|
|
|
+ )
|
|
|
+ if not dify_config.GOOGLE_CLIENT_ID or not dify_config.GOOGLE_CLIENT_SECRET:
|
|
|
+ google_oauth = None
|
|
|
+ else:
|
|
|
+ google_oauth = GoogleOAuth(
|
|
|
+ client_id=dify_config.GOOGLE_CLIENT_ID,
|
|
|
+ client_secret=dify_config.GOOGLE_CLIENT_SECRET,
|
|
|
+ redirect_uri=dify_config.CONSOLE_API_URL + '/console/api/oauth/authorize/google',
|
|
|
+ )
|
|
|
+
|
|
|
+ OAUTH_PROVIDERS = {'github': github_oauth, 'google': google_oauth}
|
|
|
return OAUTH_PROVIDERS
|
|
|
|
|
|
|
|
@@ -63,8 +66,7 @@ class OAuthCallback(Resource):
|
|
|
token = oauth_provider.get_access_token(code)
|
|
|
user_info = oauth_provider.get_user_info(token)
|
|
|
except requests.exceptions.HTTPError as e:
|
|
|
- logging.exception(
|
|
|
- f"An error occurred during the OAuth process with {provider}: {e.response.text}")
|
|
|
+ logging.exception(f'An error occurred during the OAuth process with {provider}: {e.response.text}')
|
|
|
return {'error': 'OAuth process failed'}, 400
|
|
|
|
|
|
account = _generate_account(provider, user_info)
|
|
@@ -81,7 +83,7 @@ class OAuthCallback(Resource):
|
|
|
|
|
|
token = AccountService.login(account, ip_address=get_remote_ip(request))
|
|
|
|
|
|
- return redirect(f'{current_app.config.get("CONSOLE_WEB_URL")}?console_token={token}')
|
|
|
+ return redirect(f'{dify_config.CONSOLE_WEB_URL}?console_token={token}')
|
|
|
|
|
|
|
|
|
def _get_account_by_openid_or_email(provider: str, user_info: OAuthUserInfo) -> Optional[Account]:
|
|
@@ -101,11 +103,7 @@ def _generate_account(provider: str, user_info: OAuthUserInfo):
|
|
|
# Create account
|
|
|
account_name = user_info.name if user_info.name else 'Dify'
|
|
|
account = RegisterService.register(
|
|
|
- email=user_info.email,
|
|
|
- name=account_name,
|
|
|
- password=None,
|
|
|
- open_id=user_info.id,
|
|
|
- provider=provider
|
|
|
+ email=user_info.email, name=account_name, password=None, open_id=user_info.id, provider=provider
|
|
|
)
|
|
|
|
|
|
# Set interface language
|