data_source_bearer_auth.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from flask_login import current_user
  2. from flask_restful import Resource, reqparse
  3. from werkzeug.exceptions import Forbidden
  4. from controllers.console import api
  5. from controllers.console.auth.error import ApiKeyAuthFailedError
  6. from libs.login import login_required
  7. from services.auth.api_key_auth_service import ApiKeyAuthService
  8. from ..setup import setup_required
  9. from ..wraps import account_initialization_required
  10. class ApiKeyAuthDataSource(Resource):
  11. @setup_required
  12. @login_required
  13. @account_initialization_required
  14. def get(self):
  15. data_source_api_key_bindings = ApiKeyAuthService.get_provider_auth_list(current_user.current_tenant_id)
  16. if data_source_api_key_bindings:
  17. return {
  18. "sources": [
  19. {
  20. "id": data_source_api_key_binding.id,
  21. "category": data_source_api_key_binding.category,
  22. "provider": data_source_api_key_binding.provider,
  23. "disabled": data_source_api_key_binding.disabled,
  24. "created_at": int(data_source_api_key_binding.created_at.timestamp()),
  25. "updated_at": int(data_source_api_key_binding.updated_at.timestamp()),
  26. }
  27. for data_source_api_key_binding in data_source_api_key_bindings
  28. ]
  29. }
  30. return {"sources": []}
  31. class ApiKeyAuthDataSourceBinding(Resource):
  32. @setup_required
  33. @login_required
  34. @account_initialization_required
  35. def post(self):
  36. # The role of the current user in the table must be admin or owner
  37. if not current_user.is_admin_or_owner:
  38. raise Forbidden()
  39. parser = reqparse.RequestParser()
  40. parser.add_argument("category", type=str, required=True, nullable=False, location="json")
  41. parser.add_argument("provider", type=str, required=True, nullable=False, location="json")
  42. parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json")
  43. args = parser.parse_args()
  44. ApiKeyAuthService.validate_api_key_auth_args(args)
  45. try:
  46. ApiKeyAuthService.create_provider_auth(current_user.current_tenant_id, args)
  47. except Exception as e:
  48. raise ApiKeyAuthFailedError(str(e))
  49. return {"result": "success"}, 200
  50. class ApiKeyAuthDataSourceBindingDelete(Resource):
  51. @setup_required
  52. @login_required
  53. @account_initialization_required
  54. def delete(self, binding_id):
  55. # The role of the current user in the table must be admin or owner
  56. if not current_user.is_admin_or_owner:
  57. raise Forbidden()
  58. ApiKeyAuthService.delete_provider_auth(current_user.current_tenant_id, binding_id)
  59. return {"result": "success"}, 200
  60. api.add_resource(ApiKeyAuthDataSource, "/api-key-auth/data-source")
  61. api.add_resource(ApiKeyAuthDataSourceBinding, "/api-key-auth/data-source/binding")
  62. api.add_resource(ApiKeyAuthDataSourceBindingDelete, "/api-key-auth/data-source/<uuid:binding_id>")