email_setting.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # coding=utf-8
  2. """
  3. @project: maxkb
  4. @Author:虎
  5. @file: system_setting.py
  6. @date:2024/3/19 16:01
  7. @desc:
  8. """
  9. from drf_spectacular.utils import extend_schema
  10. from rest_framework.request import Request
  11. from rest_framework.views import APIView
  12. from common.auth import TokenAuth
  13. from common.auth.authentication import has_permissions
  14. from common.constants.permission_constants import PermissionConstants, RoleConstants
  15. from django.utils.translation import gettext_lazy as _
  16. from common.log.log import log
  17. from common.result import result
  18. from common.utils.common import encryption
  19. from models_provider.api.model import DefaultModelResponse
  20. from system_manage.api.email_setting import EmailSettingAPI
  21. from system_manage.serializers.email_setting import EmailSettingSerializer
  22. def encryption_str(_value):
  23. if isinstance(_value, str):
  24. return encryption(_value)
  25. return _value
  26. def get_email_details(request):
  27. path = request.path
  28. body = request.data
  29. query = request.query_params
  30. email_host_password = body.get('email_host_password', '')
  31. return {
  32. 'path': path,
  33. 'body': {**body, 'email_host_password': encryption_str(email_host_password)},
  34. 'query': query
  35. }
  36. class SystemSetting(APIView):
  37. class Email(APIView):
  38. authentication_classes = [TokenAuth]
  39. @extend_schema(methods=['PUT'],
  40. summary=_('Create or update email settings'),
  41. description=_('Create or update email settings'),
  42. operation_id=_('Create or update email settings'), # type: ignore
  43. request=EmailSettingAPI.get_request(),
  44. responses=EmailSettingAPI.get_response(),
  45. tags=[_('Email Settings')]) # type: ignore
  46. @log(menu='Email settings', operate='Create or update email settings',
  47. get_details=get_email_details)
  48. @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT, RoleConstants.ADMIN)
  49. def put(self, request: Request):
  50. return result.success(
  51. EmailSettingSerializer.Create(
  52. data=request.data).update_or_save())
  53. @extend_schema(
  54. methods=['POST'],
  55. summary=_('Test email settings'),
  56. operation_id=_('Test email settings'), # type: ignore
  57. request=EmailSettingAPI.get_request(),
  58. responses=DefaultModelResponse.get_response(),
  59. tags=[_('Email Settings')] # type: ignore
  60. )
  61. @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT, RoleConstants.ADMIN)
  62. @log(menu='Email settings', operate='Test email settings',
  63. get_details=get_email_details
  64. )
  65. def post(self, request: Request):
  66. return result.success(
  67. EmailSettingSerializer.Create(
  68. data=request.data).is_valid())
  69. @extend_schema(methods=['GET'],
  70. summary=_('Get email settings'),
  71. description=_('Get email settings'),
  72. operation_id=_('Get email settings'), # type: ignore
  73. responses=DefaultModelResponse.get_response(),
  74. tags=[_('Email Settings')]) # type: ignore
  75. @has_permissions(PermissionConstants.EMAIL_SETTING_READ, RoleConstants.ADMIN)
  76. def get(self, request: Request):
  77. return result.success(
  78. EmailSettingSerializer.one())