api/urls.py (158 lines of code) (raw):

from django.conf import settings from django.urls import URLPattern, URLResolver, include, path, register_converter from drf_spectacular.views import ( SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerSplitView, ) from rest_framework import routers from privaterelay.utils import enable_if_setting from .views.emails import ( DomainAddressViewSet, RelayAddressViewSet, first_forwarded_email, ) from .views.privaterelay import ( FlagViewSet, ProfileViewSet, UserViewSet, report_webcompat_issue, runtime_data, terms_accepted_user, ) class SwaggerFormatConverter: regex = r"\.(json|yaml)" def to_python(self, value): return value def to_url(self, value): return value register_converter(SwaggerFormatConverter, "swagger_format") api_router = routers.DefaultRouter() api_router.register(r"domainaddresses", DomainAddressViewSet, "domainaddress") api_router.register(r"relayaddresses", RelayAddressViewSet, "relayaddress") api_router.register(r"profiles", ProfileViewSet, "profiles") api_router.register(r"users", UserViewSet, "user") api_router.register(r"flags", FlagViewSet, "flag") urlpatterns: list[URLPattern | URLResolver] = [ path( "v1/runtime_data", runtime_data, name="runtime_data_deprecate_after_updating_clients", ), path("v1/runtime_data/", runtime_data, name="runtime_data"), path( "v1/report_webcompat_issue", report_webcompat_issue, name="report_webcompat_issue_deprecate_after_updating_clients", ), path( "v1/report_webcompat_issue/", report_webcompat_issue, name="report_webcompat_issue", ), path( "v1/terms-accepted-user/", terms_accepted_user, name="terms_accepted_user", ), path( "v1/schema/", enable_if_setting("API_DOCS_ENABLED")(SpectacularAPIView.as_view()), name="schema", ), path( "v1/docs/", enable_if_setting("API_DOCS_ENABLED")( SpectacularSwaggerSplitView.as_view(url_name="schema") ), name="schema-swagger-ui", ), path( "v1/docs/redoc/", enable_if_setting("API_DOCS_ENABLED")( SpectacularRedocView.as_view(url_name="schema") ), name="schema-redoc-ui", ), path( "v1/first-forwarded-email/", first_forwarded_email, name="first_forwarded_email", ), ] if settings.PHONES_ENABLED: from .views.phones import ( InboundContactViewSet, RealPhoneViewSet, RelayNumberViewSet, inbound_call, inbound_sms, list_messages, outbound_call, outbound_sms, resend_welcome_sms, sms_status, vCard, voice_status, ) if settings.PHONES_ENABLED: api_router.register(r"realphone", RealPhoneViewSet, "real_phone") api_router.register(r"relaynumber", RelayNumberViewSet, "relay_number") api_router.register(r"inboundcontact", InboundContactViewSet, "inbound_contact") urlpatterns += [ # TODO: Update Twilio webhooks to versions with trailing slashes, # then remove versions without trailing slashes (Django's # APPEND_SLASH option will then make those redirect). path( "v1/inbound_sms", inbound_sms, name="inbound_sms_deprecate_after_updating_clients", ), path("v1/inbound_sms/", inbound_sms, name="inbound_sms"), path( "v1/inbound_call", inbound_call, name="inbound_call_deprecate_after_updating_clients", ), path("v1/inbound_call/", inbound_call, name="inbound_call"), path( "v1/voice_status", voice_status, name="voice_status_deprecate_after_updating_clients", ), path("v1/voice_status/", voice_status, name="voice_status"), path("v1/call/", outbound_call, name="outbound_call"), path("v1/messages/", list_messages, name="list_messages"), path("v1/message/", outbound_sms, name="outbound_sms"), path( "v1/sms_status", sms_status, name="sms_status_deprecate_after_updating_clients", ), path("v1/sms_status/", sms_status, name="sms_status"), path( "v1/vCard/<str:lookup_key>", vCard, name="vCard_deprecate_after_updating_clients", ), path("v1/vCard/<str:lookup_key>/", vCard, name="vCard"), path( "v1/realphone/resend_welcome_sms", resend_welcome_sms, name="resend_welcome_sms_deprecate_after_updating_clients", ), path( "v1/realphone/resend_welcome_sms/", resend_welcome_sms, name="resend_welcome_sms", ), ] if settings.PHONES_ENABLED and settings.IQ_ENABLED: from .views.phones import inbound_sms_iq urlpatterns += [ path( "v1/inbound_sms_iq/", enable_if_setting("IQ_ENABLED")(inbound_sms_iq), name="inbound_sms", ), ] urlpatterns += [ path("v1/", include(api_router.urls)), ]