filters.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. from typing import Annotated, TYPE_CHECKING
  2. import strawberry
  3. import strawberry_django
  4. from strawberry.scalars import ID
  5. from strawberry_django import FilterLookup
  6. from core.graphql.filter_mixins import BaseObjectTypeFilterMixin, ChangeLogFilterMixin
  7. from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin
  8. from netbox.graphql.filter_mixins import NetBoxModelFilterMixin, OrganizationalModelFilterMixin, PrimaryModelFilterMixin
  9. from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
  10. from vpn import models
  11. if TYPE_CHECKING:
  12. from core.graphql.filters import ContentTypeFilter
  13. from ipam.graphql.filters import IPAddressFilter, RouteTargetFilter
  14. from netbox.graphql.filter_lookups import IntegerLookup
  15. from .enums import *
  16. __all__ = (
  17. 'TunnelGroupFilter',
  18. 'TunnelTerminationFilter',
  19. 'TunnelFilter',
  20. 'IKEProposalFilter',
  21. 'IKEPolicyFilter',
  22. 'IPSecProposalFilter',
  23. 'IPSecPolicyFilter',
  24. 'IPSecProfileFilter',
  25. 'L2VPNFilter',
  26. 'L2VPNTerminationFilter',
  27. )
  28. @strawberry_django.filter(models.TunnelGroup, lookups=True)
  29. class TunnelGroupFilter(OrganizationalModelFilterMixin):
  30. pass
  31. @strawberry_django.filter(models.TunnelTermination, lookups=True)
  32. class TunnelTerminationFilter(
  33. BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin
  34. ):
  35. tunnel: Annotated['TunnelFilter', strawberry.lazy('vpn.graphql.filters')] | None = strawberry_django.filter_field()
  36. tunnel_id: ID | None = strawberry_django.filter_field()
  37. role: Annotated['TunnelTerminationRoleEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  38. strawberry_django.filter_field()
  39. )
  40. termination_type: Annotated['TunnelTerminationTypeEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  41. strawberry_django.filter_field()
  42. )
  43. termination_type_id: ID | None = strawberry_django.filter_field()
  44. termination_id: ID | None = strawberry_django.filter_field()
  45. outside_ip: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  46. strawberry_django.filter_field()
  47. )
  48. outside_ip_id: ID | None = strawberry_django.filter_field()
  49. @strawberry_django.filter(models.Tunnel, lookups=True)
  50. class TunnelFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
  51. name: FilterLookup[str] | None = strawberry_django.filter_field()
  52. status: Annotated['TunnelStatusEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  53. strawberry_django.filter_field()
  54. )
  55. group: Annotated['TunnelGroupFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  56. strawberry_django.filter_field()
  57. )
  58. group_id: ID | None = strawberry_django.filter_field()
  59. encapsulation: Annotated['TunnelEncapsulationEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  60. strawberry_django.filter_field()
  61. )
  62. ipsec_profile: Annotated['IPSecProfileFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  63. strawberry_django.filter_field()
  64. )
  65. tunnel_id: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  66. strawberry_django.filter_field()
  67. )
  68. terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  69. strawberry_django.filter_field()
  70. )
  71. @strawberry_django.filter(models.IKEProposal, lookups=True)
  72. class IKEProposalFilter(PrimaryModelFilterMixin):
  73. name: FilterLookup[str] | None = strawberry_django.filter_field()
  74. authentication_method: Annotated['AuthenticationMethodEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  75. strawberry_django.filter_field()
  76. )
  77. encryption_algorithm: Annotated['EncryptionAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  78. strawberry_django.filter_field()
  79. )
  80. authentication_algorithm: Annotated['AuthenticationAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  81. strawberry_django.filter_field()
  82. )
  83. group: Annotated['DHGroupEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  84. sa_lifetime: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  85. strawberry_django.filter_field()
  86. )
  87. ike_policies: Annotated['IKEPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  88. strawberry_django.filter_field()
  89. )
  90. @strawberry_django.filter(models.IKEPolicy, lookups=True)
  91. class IKEPolicyFilter(PrimaryModelFilterMixin):
  92. name: FilterLookup[str] | None = strawberry_django.filter_field()
  93. version: Annotated['IKEVersionEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  94. mode: Annotated['IKEModeEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  95. proposals: Annotated['IKEProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  96. strawberry_django.filter_field()
  97. )
  98. preshared_key: FilterLookup[str] | None = strawberry_django.filter_field()
  99. @strawberry_django.filter(models.IPSecProposal, lookups=True)
  100. class IPSecProposalFilter(PrimaryModelFilterMixin):
  101. name: FilterLookup[str] | None = strawberry_django.filter_field()
  102. encryption_algorithm: Annotated['EncryptionAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  103. strawberry_django.filter_field()
  104. )
  105. authentication_algorithm: Annotated['AuthenticationAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')] | None = (
  106. strawberry_django.filter_field()
  107. )
  108. sa_lifetime_seconds: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  109. strawberry_django.filter_field()
  110. )
  111. sa_lifetime_data: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  112. strawberry_django.filter_field()
  113. )
  114. ipsec_policies: Annotated['IPSecPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  115. strawberry_django.filter_field()
  116. )
  117. @strawberry_django.filter(models.IPSecPolicy, lookups=True)
  118. class IPSecPolicyFilter(PrimaryModelFilterMixin):
  119. name: FilterLookup[str] | None = strawberry_django.filter_field()
  120. proposals: Annotated['IPSecProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  121. strawberry_django.filter_field()
  122. )
  123. pfs_group: Annotated['DHGroupEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  124. @strawberry_django.filter(models.IPSecProfile, lookups=True)
  125. class IPSecProfileFilter(PrimaryModelFilterMixin):
  126. name: FilterLookup[str] | None = strawberry_django.filter_field()
  127. mode: Annotated['IPSecModeEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  128. ike_policy: Annotated['IKEPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  129. strawberry_django.filter_field()
  130. )
  131. ike_policy_id: ID | None = strawberry_django.filter_field()
  132. ipsec_policy: Annotated['IPSecPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  133. strawberry_django.filter_field()
  134. )
  135. ipsec_policy_id: ID | None = strawberry_django.filter_field()
  136. @strawberry_django.filter(models.L2VPN, lookups=True)
  137. class L2VPNFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
  138. name: FilterLookup[str] | None = strawberry_django.filter_field()
  139. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  140. type: Annotated['L2VPNTypeEnum', strawberry.lazy('vpn.graphql.enums')] | None = strawberry_django.filter_field()
  141. identifier: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  142. strawberry_django.filter_field()
  143. )
  144. import_targets: Annotated['RouteTargetFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  145. strawberry_django.filter_field()
  146. )
  147. export_targets: Annotated['RouteTargetFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  148. strawberry_django.filter_field()
  149. )
  150. terminations: Annotated['L2VPNTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  151. strawberry_django.filter_field()
  152. )
  153. @strawberry_django.filter(models.L2VPNTermination, lookups=True)
  154. class L2VPNTerminationFilter(NetBoxModelFilterMixin):
  155. l2vpn: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = strawberry_django.filter_field()
  156. l2vpn_id: ID | None = strawberry_django.filter_field()
  157. assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  158. strawberry_django.filter_field()
  159. )
  160. assigned_object_id: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  161. strawberry_django.filter_field()
  162. )