From bcc63761bdc4c1604c9275a3c5cdf8a483ad5611 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 06 二月 2025 16:37:09 +0800 Subject: [PATCH] TOKEN同步功能 --- app/task/sync_account_token.py | 73 ++++++++++++++++++++++++++++++++++-- 1 files changed, 69 insertions(+), 4 deletions(-) diff --git a/app/task/sync_account_token.py b/app/task/sync_account_token.py index 1e7747c..b7c2e5f 100644 --- a/app/task/sync_account_token.py +++ b/app/task/sync_account_token.py @@ -1,14 +1,79 @@ +import asyncio +import json +import time +from datetime import datetime, timedelta + +from sqlalchemy.future import select + +from app.config.agent_base_url import RG_USER_LOGIN, DF_USER_LOGIN +from app.config.config import settings +from app.config.const import chat_server, workflow_server +from app.models import UserTokenModel +from app.models.app_token_model import AppToken +from app.models.base_model import SessionLocal +from app.models.postgresql_base_model import get_pdb, PostgresqlSessionLocal +from app.service.ragflow import RagflowService +from app.service.v2.app_driver.chat_data import ChatBaseApply +from app.utils.password_handle import password_decrypted - -def sync_token(): +async def sync_token(): """ 1.鑾峰彇鍒皍ser_token琛ㄤ腑鐨勮处鍙� - 2.鍒ゆ柇鏄惁瓒呰繃12灏忔椂锛屽惁鍒欒幏鍙栨柊鐨則oken + 2.鍒ゆ柇鏄惁瓒呰繃12灏忔椂锛岃秴杩囧垯鑾峰彇鏂扮殑token 3.鏈秴杩�12灏忔椂锛屽垯娴嬭瘯token鏈夋晥鎬э紝chat_ping鎺ュ彛锛岃繑鍥�401锛屽垯閲嶆柊鑾峰彇token 4.token鑾峰彇锛歭ogin df:/console/api/workspaces rg:/v1/system/version 5.璺熸柊鏈湴token鍜宬ong缃戝叧token :return: - """ \ No newline at end of file + """ + app_data = [{"token_id": chat_server, "url": f"{settings.fwr_base_url}{RG_USER_LOGIN}", + "data": {"email": "", "password": ""}, "is_crypt": True}, + {"token_id": workflow_server, "url": f"{settings.dify_base_url}{DF_USER_LOGIN}", + "data": {"email": "", "password": "", "remember_me": True, "language": "zh-Hans"}, "is_crypt": False}] + + async def sync_token_chat(token_id, url, data, is_crypt): + db = SessionLocal() + # pdb = PostgresqlSessionLocal() + current_time = datetime.now() - timedelta(hours=12) + try: + user_token = db.query(UserTokenModel).filter(UserTokenModel.id == token_id).first() + + if user_token and (user_token.updated_at < current_time or not user_token.access_token): + chat = ChatBaseApply() + data["email"] = user_token.account + if is_crypt: + data["password"] = await chat.password_encrypt(await password_decrypted(user_token.password)) + else: + data["password"] = await password_decrypted(user_token.password) + res = await chat.chat_login(url, data, {'Content-Type': 'application/json'}) + if res: + access_token = res["data"]["access_token"] + user_token.access_token = access_token + user_token.updated_at = datetime.now() + db.commit() + except Exception as e: + print(e) + finally: + db.close() + # await pdb.close() + + tasks = [] + for app in app_data: + tasks.append(asyncio.create_task(sync_token_chat(app["token_id"], app["url"], app["data"], app["is_crypt"]))) + done, pending = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED) + + + +def start_sync_token_task(): + asyncio.run(sync_token()) + + +if __name__ == "__main__": + + + + start_sync_token_task() + + -- Gitblit v1.8.0