application_api_key.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from django.db.models import QuerySet
  2. from django.utils.translation import gettext_lazy as _
  3. from drf_spectacular.utils import extend_schema
  4. from rest_framework.request import Request
  5. from rest_framework.views import APIView
  6. from application.api.application_api_key import ApplicationKeyAPI
  7. from application.models import Application
  8. from application.serializers.application_api_key import ApplicationKeySerializer
  9. from common.auth import TokenAuth
  10. from common.auth.authentication import has_permissions
  11. from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
  12. from common.log.log import log
  13. from common.result import result, DefaultResultSerializer
  14. def get_application_operation_object(application_id):
  15. application_model = QuerySet(model=Application).filter(id=application_id).first()
  16. if application_model is not None:
  17. return {
  18. "name": application_model.name
  19. }
  20. return {}
  21. class ApplicationKey(APIView):
  22. authentication_classes = [TokenAuth]
  23. @extend_schema(
  24. methods=['POST'],
  25. description=_('Create application ApiKey'),
  26. summary=_('Create application ApiKey'),
  27. operation_id=_('Create application ApiKey'), # type: ignore
  28. parameters=ApplicationKeyAPI.get_parameters(),
  29. request=None,
  30. responses=ApplicationKeyAPI.get_response(),
  31. tags=[_('Application Api Key')] # type: ignore
  32. )
  33. @log(menu='Application', operate="Add ApiKey",
  34. get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')),
  35. )
  36. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission(),
  37. PermissionConstants.APPLICATION_READ.get_workspace_permission_workspace_manage_role(),
  38. ViewPermission([RoleConstants.USER.get_workspace_role()],
  39. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  40. CompareConstants.AND),
  41. RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
  42. )
  43. def post(self, request: Request, workspace_id: str, application_id: str):
  44. return result.success(ApplicationKeySerializer(
  45. data={'application_id': application_id,
  46. 'workspace_id': workspace_id}).generate())
  47. class Page(APIView):
  48. authentication_classes = [TokenAuth]
  49. @extend_schema(
  50. methods=['GET'],
  51. description=_('GET application ApiKey List'),
  52. summary=_('Create application ApiKey List'),
  53. operation_id=_('Create application ApiKey List'), # type: ignore
  54. parameters=ApplicationKeyAPI.get_parameters(),
  55. responses=ApplicationKeyAPI.List.get_response(),
  56. tags=[_('Application Api Key')] # type: ignore
  57. )
  58. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission(),
  59. PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_permission_workspace_manage_role(),
  60. ViewPermission([RoleConstants.USER.get_workspace_role()],
  61. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  62. CompareConstants.AND),
  63. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  64. def get(self, request: Request, workspace_id: str, application_id: str, current_page: int, page_size: int):
  65. return result.success(ApplicationKeySerializer(
  66. data={'application_id': application_id,
  67. 'workspace_id': workspace_id,
  68. 'order_by': request.query_params.get('order_by')}).page(current_page, page_size))
  69. class Operate(APIView):
  70. authentication_classes = [TokenAuth]
  71. @extend_schema(
  72. methods=['PUT'],
  73. description=_('Modify application API_KEY'),
  74. summary=_('Modify application API_KEY'),
  75. operation_id=_('Modify application API_KEY'), # type: ignore
  76. parameters=ApplicationKeyAPI.Operate.get_parameters(),
  77. request=ApplicationKeyAPI.Operate.get_request(),
  78. responses=DefaultResultSerializer,
  79. tags=[_('Application Api Key')] # type: ignore
  80. )
  81. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission(),
  82. PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_permission_workspace_manage_role(),
  83. ViewPermission([RoleConstants.USER.get_workspace_role()],
  84. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  85. CompareConstants.AND),
  86. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  87. @log(menu='Application', operate="Modify application API_KEY",
  88. get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')),
  89. )
  90. def put(self, request: Request, workspace_id: str, application_id: str, api_key_id: str):
  91. return result.success(
  92. ApplicationKeySerializer.Operate(
  93. data={'workspace_id': workspace_id, 'application_id': application_id,
  94. 'api_key_id': api_key_id}).edit(
  95. request.data))
  96. @extend_schema(
  97. methods=['DELETE'],
  98. description=_('Delete Application API_KEY'),
  99. summary=_('Delete Application API_KEY'),
  100. operation_id=_('Delete Application API_KEY'), # type: ignore
  101. parameters=ApplicationKeyAPI.Operate.get_parameters(),
  102. request=ApplicationKeyAPI.Operate.get_request(),
  103. responses=DefaultResultSerializer,
  104. tags=[_('Application Api Key')] # type: ignore
  105. )
  106. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission(),
  107. PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_permission_workspace_manage_role(),
  108. ViewPermission([RoleConstants.USER.get_workspace_role()],
  109. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  110. CompareConstants.AND),
  111. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  112. @log(menu='Application', operate="Delete application API_KEY",
  113. get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')),
  114. )
  115. def delete(self, request: Request, workspace_id: str, application_id: str, api_key_id: str):
  116. return result.success(
  117. ApplicationKeySerializer.Operate(
  118. data={'workspace_id': workspace_id, 'application_id': application_id,
  119. 'api_key_id': api_key_id}).delete())