data_source_bearer_auth.py 3.0 KB

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