filters.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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 BaseFilterLookup, 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_type(models.TunnelGroup, lookups=True)
  29. class TunnelGroupFilter(OrganizationalModelFilterMixin):
  30. pass
  31. @strawberry_django.filter_type(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: BaseFilterLookup[Annotated['TunnelTerminationRoleEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  38. strawberry_django.filter_field()
  39. )
  40. termination_type: (
  41. BaseFilterLookup[Annotated['TunnelTerminationTypeEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  42. ) = (
  43. strawberry_django.filter_field()
  44. )
  45. termination_type_id: ID | None = strawberry_django.filter_field()
  46. termination_id: ID | None = strawberry_django.filter_field()
  47. outside_ip: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  48. strawberry_django.filter_field()
  49. )
  50. outside_ip_id: ID | None = strawberry_django.filter_field()
  51. @strawberry_django.filter_type(models.Tunnel, lookups=True)
  52. class TunnelFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
  53. name: FilterLookup[str] | None = strawberry_django.filter_field()
  54. status: BaseFilterLookup[Annotated['TunnelStatusEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  55. strawberry_django.filter_field()
  56. )
  57. group: Annotated['TunnelGroupFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  58. strawberry_django.filter_field()
  59. )
  60. group_id: ID | None = strawberry_django.filter_field()
  61. encapsulation: (
  62. BaseFilterLookup[Annotated['TunnelEncapsulationEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  63. ) = (
  64. strawberry_django.filter_field()
  65. )
  66. ipsec_profile: Annotated['IPSecProfileFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  67. strawberry_django.filter_field()
  68. )
  69. tunnel_id: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  70. strawberry_django.filter_field()
  71. )
  72. terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  73. strawberry_django.filter_field()
  74. )
  75. @strawberry_django.filter_type(models.IKEProposal, lookups=True)
  76. class IKEProposalFilter(PrimaryModelFilterMixin):
  77. name: FilterLookup[str] | None = strawberry_django.filter_field()
  78. authentication_method: (
  79. BaseFilterLookup[Annotated['AuthenticationMethodEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  80. ) = (
  81. strawberry_django.filter_field()
  82. )
  83. encryption_algorithm: (
  84. BaseFilterLookup[Annotated['EncryptionAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  85. ) = (
  86. strawberry_django.filter_field()
  87. )
  88. authentication_algorithm: (
  89. BaseFilterLookup[Annotated['AuthenticationAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  90. ) = (
  91. strawberry_django.filter_field()
  92. )
  93. group: BaseFilterLookup[Annotated['DHGroupEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  94. strawberry_django.filter_field()
  95. )
  96. sa_lifetime: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  97. strawberry_django.filter_field()
  98. )
  99. ike_policies: Annotated['IKEPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  100. strawberry_django.filter_field()
  101. )
  102. @strawberry_django.filter_type(models.IKEPolicy, lookups=True)
  103. class IKEPolicyFilter(PrimaryModelFilterMixin):
  104. name: FilterLookup[str] | None = strawberry_django.filter_field()
  105. version: BaseFilterLookup[Annotated['IKEVersionEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  106. strawberry_django.filter_field()
  107. )
  108. mode: BaseFilterLookup[Annotated['IKEModeEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  109. strawberry_django.filter_field()
  110. )
  111. proposals: Annotated['IKEProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  112. strawberry_django.filter_field()
  113. )
  114. preshared_key: FilterLookup[str] | None = strawberry_django.filter_field()
  115. @strawberry_django.filter_type(models.IPSecProposal, lookups=True)
  116. class IPSecProposalFilter(PrimaryModelFilterMixin):
  117. name: FilterLookup[str] | None = strawberry_django.filter_field()
  118. encryption_algorithm: (
  119. BaseFilterLookup[Annotated['EncryptionAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')]] | None
  120. ) = (
  121. strawberry_django.filter_field()
  122. )
  123. authentication_algorithm: (
  124. BaseFilterLookup[
  125. BaseFilterLookup[Annotated['AuthenticationAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')]]
  126. ] | None
  127. ) = (
  128. strawberry_django.filter_field()
  129. )
  130. sa_lifetime_seconds: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  131. strawberry_django.filter_field()
  132. )
  133. sa_lifetime_data: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  134. strawberry_django.filter_field()
  135. )
  136. ipsec_policies: Annotated['IPSecPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  137. strawberry_django.filter_field()
  138. )
  139. @strawberry_django.filter_type(models.IPSecPolicy, lookups=True)
  140. class IPSecPolicyFilter(PrimaryModelFilterMixin):
  141. name: FilterLookup[str] | None = strawberry_django.filter_field()
  142. proposals: Annotated['IPSecProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  143. strawberry_django.filter_field()
  144. )
  145. pfs_group: BaseFilterLookup[Annotated['DHGroupEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  146. strawberry_django.filter_field()
  147. )
  148. @strawberry_django.filter_type(models.IPSecProfile, lookups=True)
  149. class IPSecProfileFilter(PrimaryModelFilterMixin):
  150. name: FilterLookup[str] | None = strawberry_django.filter_field()
  151. mode: BaseFilterLookup[Annotated['IPSecModeEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  152. strawberry_django.filter_field()
  153. )
  154. ike_policy: Annotated['IKEPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  155. strawberry_django.filter_field()
  156. )
  157. ike_policy_id: ID | None = strawberry_django.filter_field()
  158. ipsec_policy: Annotated['IPSecPolicyFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  159. strawberry_django.filter_field()
  160. )
  161. ipsec_policy_id: ID | None = strawberry_django.filter_field()
  162. @strawberry_django.filter_type(models.L2VPN, lookups=True)
  163. class L2VPNFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
  164. name: FilterLookup[str] | None = strawberry_django.filter_field()
  165. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  166. type: BaseFilterLookup[Annotated['L2VPNTypeEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  167. strawberry_django.filter_field()
  168. )
  169. identifier: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  170. strawberry_django.filter_field()
  171. )
  172. import_targets: Annotated['RouteTargetFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  173. strawberry_django.filter_field()
  174. )
  175. export_targets: Annotated['RouteTargetFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  176. strawberry_django.filter_field()
  177. )
  178. terminations: Annotated['L2VPNTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  179. strawberry_django.filter_field()
  180. )
  181. status: BaseFilterLookup[Annotated['L2VPNStatusEnum', strawberry.lazy('vpn.graphql.enums')]] | None = (
  182. strawberry_django.filter_field()
  183. )
  184. @strawberry_django.filter_type(models.L2VPNTermination, lookups=True)
  185. class L2VPNTerminationFilter(NetBoxModelFilterMixin):
  186. l2vpn: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = strawberry_django.filter_field()
  187. l2vpn_id: ID | None = strawberry_django.filter_field()
  188. assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  189. strawberry_django.filter_field()
  190. )
  191. assigned_object_id: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  192. strawberry_django.filter_field()
  193. )