service_token.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from Log import logger
  2. from app.config.config import settings
  3. from app.config.const import BISHENG, RAGFLOW, DIFY, chat_server
  4. from app.models import UserModel, UserAppModel, UserTokenModel
  5. from app.models.token_model import TokenModel
  6. from app.service.auth import UserAppDao
  7. from app.service.bisheng import BishengService
  8. from app.service.difyService import DifyService
  9. from app.service.ragflow import RagflowService
  10. from app.task.fetch_agent import update_ragflow_user_tenant
  11. async def get_bisheng_token(db, user_id: int):
  12. token = db.query(TokenModel).filter(TokenModel.user_id == user_id).first()
  13. if not token:
  14. token = await UserAppDao(db).get_data_by_id(user_id, BISHENG)
  15. if not token:
  16. return None
  17. return token.access_token
  18. else:
  19. return token.bisheng_token
  20. async def get_ragflow_token(db, user_id: int):
  21. # token = await UserAppDao(db).get_data_by_id(user_id, RAGFLOW)
  22. token = db.query(TokenModel).filter(TokenModel.user_id == user_id).first()
  23. token = db.query(UserTokenModel).filter(UserTokenModel.id == chat_server).first()
  24. if not token:
  25. token = await UserAppDao(db).get_data_by_id(user_id, RAGFLOW)
  26. if not token:
  27. return None
  28. return token.access_token
  29. else:
  30. return token.access_token
  31. async def get_dify_token(db, user_id: int):
  32. token = await UserAppDao(db).get_data_by_id(user_id, DIFY)
  33. if not token:
  34. return None
  35. return token.access_token
  36. async def get_new_token(db, user_id: int, app_type):
  37. # user = db.query(UserModel).filter(UserModel.id == user_id).first()
  38. user = db.query(UserAppModel).filter(UserAppModel.user_id == user_id, UserAppModel.app_type==app_type).first()
  39. if not user:
  40. return None
  41. pwd = user.password
  42. if app_type == RAGFLOW:
  43. ragflow_service = RagflowService(settings.fwr_base_url)
  44. # 登录到ragflow
  45. try:
  46. ragflow_token = await ragflow_service.login(user.username, user.decrypted_password(pwd))
  47. return ragflow_token
  48. except Exception as e:
  49. logger.error(e)
  50. # return Response(code=500, msg=f"Failed to login with Ragflow: {str(e)}")
  51. return None
  52. elif app_type == BISHENG:
  53. bisheng_service = BishengService(settings.sgb_base_url)
  54. # 登录到毕昇
  55. try:
  56. bisheng_token = await bisheng_service.login(user.username, user.decrypted_password(pwd))
  57. return bisheng_token
  58. except Exception as e:
  59. logger.error(e)
  60. # return Response(code=500, msg=f"Failed to login with Ragflow: {str(e)}")
  61. return None
  62. elif app_type == DIFY:
  63. dify_service = DifyService(settings.dify_base_url)
  64. # 登录到毕昇
  65. try:
  66. dify_token = await dify_service.login(user.username, user.decrypted_password(pwd))
  67. return dify_token
  68. except Exception as e:
  69. logger.error(e)
  70. # return Response(code=500, msg=f"Failed to login with Ragflow: {str(e)}")
  71. return None
  72. else:
  73. logger.error("错误的应用类型{}".format(app_type))
  74. async def get_token(db, user_id: int):
  75. res = {i.app_type.replace("app", "token"): i.access_token for i in await UserAppDao(db).get_user_datas(user_id)}
  76. if not res:
  77. token = db.query(TokenModel).filter_by(user_id=user_id).first()
  78. res = {"ragflow_token": token.ragflow_token, "bisheng_token": token.bisheng_token}
  79. return res
  80. async def update_user_group(db, sync_flag):
  81. admin_user = db.query(UserModel).filter(UserModel.permission == "admin").first()
  82. sync_user = db.query(UserModel).filter(UserModel.sync_flag == sync_flag).first()
  83. if not admin_user or not sync_user:
  84. logger.error("注册用户失败!--------")
  85. return False
  86. token = await get_new_token(db, admin_user.id, RAGFLOW)
  87. # print(token)
  88. if not token:
  89. logger.error("注册用户获取token失败!")
  90. return False
  91. user_list = db.query(UserAppModel).filter(UserAppModel.app_type==RAGFLOW).all()
  92. user = db.query(UserAppModel).filter(UserAppModel.user_id==sync_user.id, UserAppModel.app_type == RAGFLOW).first()
  93. if not user:
  94. logger.error("注册用户获取信息失败!")
  95. return False
  96. ragflow_service = RagflowService(settings.fwr_base_url)
  97. for u in user_list:
  98. if u.id and user.id != u.id:
  99. # print(user.id, u.id)
  100. await ragflow_service.add_user_tenant(token,u.app_id,
  101. user.email,
  102. user.app_id)
  103. await ragflow_service.add_user_tenant(token, user.app_id,
  104. u.email,
  105. u.app_id)
  106. update_ragflow_user_tenant(user.app_id)