Files
dify-plus/api/controllers/console/app/ding_talk_extend.py
T
2026-01-26 00:25:06 +08:00

62 lines
2.0 KiB
Python

from flask import redirect, request
from flask_restx import Resource
from controllers.console.app.error_extend import DingTalkNotExist
from controllers.console.wraps import setup_required
from libs.token import (
set_access_token_to_cookie,
set_csrf_token_to_cookie,
set_refresh_token_to_cookie,
)
from services.ding_talk_extend import DingTalkService
from .. import api
class DingTalk(Resource):
@setup_required
def get(self):
"""
DingTalk login
"""
code = request.args.get("code", "")
if not (0 < len(code) < 500):
raise DingTalkNotExist
token_pair, redirect_url, err = DingTalkService.get_user_info(code)
if len(err) > 0:
raise DingTalkNotExist(err)
if token_pair is None:
raise DingTalkNotExist("Failed to get token pair")
response = redirect(redirect_url)
set_access_token_to_cookie(request, response, token_pair.access_token)
set_refresh_token_to_cookie(request, response, token_pair.refresh_token)
set_csrf_token_to_cookie(request, response, token_pair.csrf_token)
return response
class DingTalkThirdParty(Resource):
@setup_required
def get(self):
"""
DingTalk login
"""
code = request.args.get("authCode", "")
if not (0 < len(code) < 500):
raise DingTalkNotExist
token_pair, redirect_url, err = DingTalkService.user_third_party(code)
if len(err) > 0:
raise DingTalkNotExist(err)
if token_pair is None:
raise DingTalkNotExist("Failed to get token pair")
response = redirect(redirect_url)
set_access_token_to_cookie(request, response, token_pair.access_token)
set_refresh_token_to_cookie(request, response, token_pair.refresh_token)
set_csrf_token_to_cookie(request, response, token_pair.csrf_token)
return response
api.add_resource(DingTalk, "/ding-talk/login")
api.add_resource(DingTalkThirdParty, "/ding-talk/third-party/login")