From 282a631b9ceee9a634ee1d93751a5254ed37ccef Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期二, 18 三月 2025 10:10:48 +0800
Subject: [PATCH] 首页知识库对话-rg

---
 app/task/sync_account_token.py |   76 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 72 insertions(+), 4 deletions(-)

diff --git a/app/task/sync_account_token.py b/app/task/sync_account_token.py
index 9d2ee32..55b1893 100644
--- a/app/task/sync_account_token.py
+++ b/app/task/sync_account_token.py
@@ -1,13 +1,81 @@
+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, RG_PING, DF_PING
+from app.config.config import settings
+from app.config.const import chat_server, workflow_server, http_200
+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, "ping_url": f"{settings.fwr_base_url}{RG_PING}",
+                 "token": "{}"},
+                {"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
+                 , "ping_url": f"{settings.dify_base_url}{DF_PING}", "token": "Bearer {}"}]
+
+    async def sync_token_chat(token_id, url, data, is_crypt, ping_url, token):
+        db = SessionLocal()
+        # pdb = PostgresqlSessionLocal()
+        current_time = datetime.now() - timedelta(hours=24)
+        try:
+            user_token = db.query(UserTokenModel).filter(UserTokenModel.id == token_id).first()
+            chat = ChatBaseApply()
+            if user_token and (user_token.updated_at < current_time or not user_token.access_token or await chat.chat_ping(ping_url, {}, await chat.get_chat_headers(token.format(user_token.access_token))) != http_200):
+
+                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"], app["ping_url"], app["token"])))
+    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