data_source_bearer_auth.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. '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
  27. data_source_api_key_bindings]
  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>')