service_token.py 4.6 KB

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