2018-09-25 12:24:11 +02:00
|
|
|
from typing import Any
|
|
|
|
|
2020-05-05 12:25:47 +02:00
|
|
|
from django.conf.urls import include
|
|
|
|
from django.urls import path
|
2022-08-16 09:39:36 +02:00
|
|
|
from django.views.generic import RedirectView, TemplateView
|
2018-09-25 12:24:11 +02:00
|
|
|
|
2023-12-01 10:43:04 +01:00
|
|
|
from corporate.views.billing_page import (
|
|
|
|
billing_page,
|
|
|
|
remote_realm_billing_page,
|
|
|
|
remote_server_billing_page,
|
|
|
|
update_plan,
|
2023-12-02 09:09:43 +01:00
|
|
|
update_plan_for_remote_realm,
|
|
|
|
update_plan_for_remote_server,
|
2023-12-01 10:43:04 +01:00
|
|
|
)
|
2023-11-30 14:06:41 +01:00
|
|
|
from corporate.views.event_status import (
|
|
|
|
event_status,
|
|
|
|
event_status_page,
|
|
|
|
remote_realm_event_status,
|
|
|
|
remote_realm_event_status_page,
|
2023-12-01 06:44:59 +01:00
|
|
|
remote_server_event_status,
|
2023-12-01 04:45:05 +01:00
|
|
|
remote_server_event_status_page,
|
2023-11-30 14:06:41 +01:00
|
|
|
)
|
2022-08-17 19:24:10 +02:00
|
|
|
from corporate.views.portico import (
|
|
|
|
app_download_link_redirect,
|
|
|
|
apps_view,
|
2022-08-30 07:47:43 +02:00
|
|
|
communities_view,
|
2022-08-17 19:24:10 +02:00
|
|
|
hello_view,
|
|
|
|
landing_view,
|
|
|
|
plans_view,
|
2023-12-05 07:42:52 +01:00
|
|
|
remote_realm_plans_page,
|
|
|
|
remote_server_plans_page,
|
2022-08-17 19:24:10 +02:00
|
|
|
team_view,
|
|
|
|
)
|
2023-11-15 22:44:24 +01:00
|
|
|
from corporate.views.remote_billing_page import (
|
2023-11-29 21:30:46 +01:00
|
|
|
remote_billing_legacy_server_login,
|
2023-12-04 00:20:53 +01:00
|
|
|
remote_realm_billing_finalize_login,
|
2023-11-15 22:44:24 +01:00
|
|
|
)
|
2021-08-29 15:33:29 +02:00
|
|
|
from corporate.views.session import (
|
|
|
|
start_card_update_stripe_session,
|
2023-11-18 11:29:04 +01:00
|
|
|
start_card_update_stripe_session_for_realm_upgrade,
|
2023-12-02 09:09:43 +01:00
|
|
|
start_card_update_stripe_session_for_remote_realm,
|
2023-11-30 14:06:41 +01:00
|
|
|
start_card_update_stripe_session_for_remote_realm_upgrade,
|
2023-12-02 09:09:43 +01:00
|
|
|
start_card_update_stripe_session_for_remote_server,
|
2023-12-01 06:44:59 +01:00
|
|
|
start_card_update_stripe_session_for_remote_server_upgrade,
|
2021-08-29 15:33:29 +02:00
|
|
|
)
|
2023-11-30 01:48:46 +01:00
|
|
|
from corporate.views.sponsorship import (
|
|
|
|
remote_realm_sponsorship,
|
|
|
|
remote_realm_sponsorship_page,
|
|
|
|
remote_server_sponsorship,
|
|
|
|
remote_server_sponsorship_page,
|
|
|
|
sponsorship,
|
|
|
|
sponsorship_page,
|
|
|
|
)
|
2021-09-29 19:51:55 +02:00
|
|
|
from corporate.views.support import support_request
|
2023-12-01 06:44:59 +01:00
|
|
|
from corporate.views.upgrade import (
|
2023-12-01 07:14:12 +01:00
|
|
|
remote_realm_upgrade,
|
2023-12-01 06:44:59 +01:00
|
|
|
remote_realm_upgrade_page,
|
2023-12-01 07:14:12 +01:00
|
|
|
remote_server_upgrade,
|
2023-12-01 06:44:59 +01:00
|
|
|
remote_server_upgrade_page,
|
|
|
|
upgrade,
|
|
|
|
upgrade_page,
|
|
|
|
)
|
2021-08-29 15:33:29 +02:00
|
|
|
from corporate.views.webhook import stripe_webhook
|
2020-09-22 06:04:45 +02:00
|
|
|
from zerver.lib.rest import rest_path
|
2022-08-23 11:57:47 +02:00
|
|
|
from zerver.lib.url_redirects import LANDING_PAGE_REDIRECTS
|
2013-11-05 23:50:19 +01:00
|
|
|
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
i18n_urlpatterns: Any = [
|
2013-11-06 12:50:13 +01:00
|
|
|
# Zephyr/MIT
|
2021-02-12 08:20:45 +01:00
|
|
|
path("zephyr/", TemplateView.as_view(template_name="corporate/zephyr.html")),
|
|
|
|
path("zephyr-mirror/", TemplateView.as_view(template_name="corporate/zephyr-mirror.html")),
|
|
|
|
path("jobs/", TemplateView.as_view(template_name="corporate/jobs.html")),
|
2018-09-25 12:24:11 +02:00
|
|
|
# Billing
|
2023-12-01 07:39:05 +01:00
|
|
|
path("billing/", billing_page, name="billing_page"),
|
2023-11-30 01:48:46 +01:00
|
|
|
path("sponsorship/", sponsorship_page, name="sponsorship_request"),
|
2023-11-23 09:31:46 +01:00
|
|
|
path("upgrade/", upgrade_page, name="upgrade_page"),
|
2021-09-29 19:51:55 +02:00
|
|
|
path("support/", support_request),
|
2021-08-29 15:33:29 +02:00
|
|
|
path("billing/event_status/", event_status_page, name="event_status_page"),
|
|
|
|
path("stripe/webhook/", stripe_webhook, name="stripe_webhook"),
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
]
|
2018-09-25 12:24:11 +02:00
|
|
|
|
|
|
|
v1_api_and_json_patterns = [
|
2021-02-12 08:20:45 +01:00
|
|
|
rest_path("billing/upgrade", POST=upgrade),
|
|
|
|
rest_path("billing/sponsorship", POST=sponsorship),
|
2020-12-10 18:15:09 +01:00
|
|
|
rest_path("billing/plan", PATCH=update_plan),
|
2021-08-29 15:33:29 +02:00
|
|
|
rest_path("billing/session/start_card_update_session", POST=start_card_update_stripe_session),
|
|
|
|
rest_path(
|
2023-11-18 11:29:04 +01:00
|
|
|
"upgrade/session/start_card_update_session",
|
|
|
|
POST=start_card_update_stripe_session_for_realm_upgrade,
|
2021-08-29 15:33:29 +02:00
|
|
|
),
|
|
|
|
rest_path("billing/event/status", GET=event_status),
|
2016-05-19 17:33:30 +02:00
|
|
|
]
|
2016-03-21 03:13:38 +01:00
|
|
|
|
2022-08-16 09:39:36 +02:00
|
|
|
landing_page_urls = [
|
|
|
|
# Landing page, features pages, signup form, etc.
|
|
|
|
path("hello/", hello_view),
|
2022-08-16 12:21:47 +02:00
|
|
|
path("features/", landing_view, {"template_name": "corporate/features.html"}),
|
2022-08-16 09:39:36 +02:00
|
|
|
path("plans/", plans_view, name="plans"),
|
|
|
|
path("apps/", apps_view),
|
|
|
|
path("apps/download/<platform>", app_download_link_redirect),
|
|
|
|
path("apps/<platform>", apps_view),
|
|
|
|
path(
|
|
|
|
"development-community/",
|
|
|
|
landing_view,
|
2022-08-16 12:34:43 +02:00
|
|
|
{"template_name": "corporate/development-community.html"},
|
2022-08-16 09:39:36 +02:00
|
|
|
),
|
2022-08-16 13:08:32 +02:00
|
|
|
path("attribution/", landing_view, {"template_name": "corporate/attribution.html"}),
|
2022-08-16 09:39:36 +02:00
|
|
|
path("team/", team_view),
|
2022-08-16 13:11:48 +02:00
|
|
|
path("history/", landing_view, {"template_name": "corporate/history.html"}),
|
2022-10-07 19:24:59 +02:00
|
|
|
path("values/", landing_view, {"template_name": "corporate/values.html"}),
|
2022-08-16 13:20:04 +02:00
|
|
|
path("why-zulip/", landing_view, {"template_name": "corporate/why-zulip.html"}),
|
2022-08-16 13:22:16 +02:00
|
|
|
path("self-hosting/", landing_view, {"template_name": "corporate/self-hosting.html"}),
|
2022-08-16 13:24:56 +02:00
|
|
|
path("security/", landing_view, {"template_name": "corporate/security.html"}),
|
2023-03-07 00:09:24 +01:00
|
|
|
path("try-zulip/", landing_view, {"template_name": "corporate/try-zulip.html"}),
|
2022-08-16 09:39:36 +02:00
|
|
|
# /for pages
|
2022-07-26 06:12:33 +02:00
|
|
|
path("use-cases/", landing_view, {"template_name": "corporate/for/use-cases.html"}),
|
2022-08-16 09:39:36 +02:00
|
|
|
path(
|
|
|
|
"for/communities/",
|
|
|
|
landing_view,
|
2022-07-26 06:12:33 +02:00
|
|
|
{"template_name": "corporate/for/communities.html"},
|
2022-08-16 09:39:36 +02:00
|
|
|
),
|
2022-07-26 06:12:33 +02:00
|
|
|
path("for/education/", landing_view, {"template_name": "corporate/for/education.html"}),
|
|
|
|
path("for/events/", landing_view, {"template_name": "corporate/for/events.html"}),
|
|
|
|
path("for/open-source/", landing_view, {"template_name": "corporate/for/open-source.html"}),
|
|
|
|
path("for/research/", landing_view, {"template_name": "corporate/for/research.html"}),
|
|
|
|
path("for/business/", landing_view, {"template_name": "corporate/for/business.html"}),
|
2022-08-16 09:39:36 +02:00
|
|
|
# case-studies
|
2022-07-26 06:12:33 +02:00
|
|
|
path(
|
|
|
|
"case-studies/idrift/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/idrift-case-study.html"},
|
|
|
|
),
|
2023-03-21 22:52:04 +01:00
|
|
|
path(
|
|
|
|
"case-studies/end-point/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/end-point-case-study.html"},
|
|
|
|
),
|
2023-04-26 21:53:36 +02:00
|
|
|
path(
|
|
|
|
"case-studies/atolio/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/atolio-case-study.html"},
|
|
|
|
),
|
2022-07-26 06:12:33 +02:00
|
|
|
path(
|
|
|
|
"case-studies/tum/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/tum-case-study.html"},
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"case-studies/ucsd/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/ucsd-case-study.html"},
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"case-studies/rust/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/rust-case-study.html"},
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"case-studies/lean/",
|
|
|
|
landing_view,
|
|
|
|
{"template_name": "corporate/case-studies/lean-case-study.html"},
|
|
|
|
),
|
2022-08-16 09:39:36 +02:00
|
|
|
path(
|
|
|
|
"case-studies/asciidoctor/",
|
|
|
|
landing_view,
|
2022-07-26 06:12:33 +02:00
|
|
|
{"template_name": "corporate/case-studies/asciidoctor-case-study.html"},
|
2022-08-16 09:39:36 +02:00
|
|
|
),
|
|
|
|
path(
|
|
|
|
"case-studies/recurse-center/",
|
|
|
|
landing_view,
|
2022-07-26 06:12:33 +02:00
|
|
|
{"template_name": "corporate/case-studies/recurse-center-case-study.html"},
|
2022-08-16 09:39:36 +02:00
|
|
|
),
|
2022-08-30 07:47:43 +02:00
|
|
|
path("communities/", communities_view),
|
2022-08-16 09:39:36 +02:00
|
|
|
]
|
2022-08-23 11:57:47 +02:00
|
|
|
|
|
|
|
# Redirects due to us having moved or combined landing pages:
|
|
|
|
for redirect in LANDING_PAGE_REDIRECTS:
|
|
|
|
old_url = redirect.old_url.lstrip("/")
|
|
|
|
landing_page_urls += [path(old_url, RedirectView.as_view(url=redirect.new_url, permanent=True))]
|
|
|
|
|
2022-08-16 09:39:36 +02:00
|
|
|
i18n_urlpatterns += landing_page_urls
|
|
|
|
|
2018-09-25 12:24:11 +02:00
|
|
|
# Make a copy of i18n_urlpatterns so that they appear without prefix for English
|
|
|
|
urlpatterns = list(i18n_urlpatterns)
|
|
|
|
|
2023-11-15 22:44:24 +01:00
|
|
|
urlpatterns += [
|
2023-12-04 00:20:53 +01:00
|
|
|
path("remote-billing-login/<signed_billing_access_token>", remote_realm_billing_finalize_login),
|
2023-11-30 01:48:46 +01:00
|
|
|
# Remote server billing endpoints.
|
2023-12-04 18:16:42 +01:00
|
|
|
path("realm/<realm_uuid>/plans/", remote_realm_plans_page, name="remote_realm_plans_page"),
|
2023-11-15 22:44:24 +01:00
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"server/<server_uuid>/plans/",
|
2023-12-01 07:23:39 +01:00
|
|
|
remote_server_plans_page,
|
|
|
|
name="remote_server_plans_page",
|
2023-11-15 22:44:24 +01:00
|
|
|
),
|
2023-12-01 10:43:04 +01:00
|
|
|
path(
|
|
|
|
"realm/<realm_uuid>/billing/", remote_realm_billing_page, name="remote_realm_billing_page"
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"server/<server_uuid>/billing/",
|
|
|
|
remote_server_billing_page,
|
|
|
|
name="remote_server_billing_page",
|
|
|
|
),
|
2023-12-01 06:44:59 +01:00
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"realm/<realm_uuid>/upgrade/", remote_realm_upgrade_page, name="remote_realm_upgrade_page"
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"server/<server_uuid>/upgrade/",
|
2023-12-01 06:44:59 +01:00
|
|
|
remote_server_upgrade_page,
|
|
|
|
name="remote_server_upgrade_page",
|
|
|
|
),
|
2023-11-30 01:48:46 +01:00
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"realm/<realm_uuid>/sponsorship/",
|
2023-11-30 01:48:46 +01:00
|
|
|
remote_realm_sponsorship_page,
|
|
|
|
name="remote_realm_sponsorship_page",
|
|
|
|
),
|
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"server/<server_uuid>/sponsorship/",
|
2023-11-30 01:48:46 +01:00
|
|
|
remote_server_sponsorship_page,
|
|
|
|
name="remote_server_sponsorship_page",
|
|
|
|
),
|
2023-11-29 21:30:46 +01:00
|
|
|
path(
|
|
|
|
"serverlogin/",
|
|
|
|
remote_billing_legacy_server_login,
|
|
|
|
name="remote_billing_legacy_server_login",
|
|
|
|
),
|
2023-11-30 14:06:41 +01:00
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"realm/<realm_uuid>/billing/event_status/",
|
2023-11-30 14:06:41 +01:00
|
|
|
remote_realm_event_status_page,
|
|
|
|
name="remote_realm_event_status_page",
|
|
|
|
),
|
2023-12-01 04:45:05 +01:00
|
|
|
path(
|
2023-12-04 18:16:42 +01:00
|
|
|
"server/<server_uuid>/billing/event_status/",
|
2023-12-01 04:45:05 +01:00
|
|
|
remote_server_event_status_page,
|
|
|
|
name="remote_server_event_status_page",
|
|
|
|
),
|
2023-11-30 01:48:46 +01:00
|
|
|
# Remote variants of above API endpoints.
|
2023-12-05 07:41:34 +01:00
|
|
|
path("json/realm/<realm_uuid>/billing/sponsorship", remote_realm_sponsorship),
|
|
|
|
path("json/server/<server_uuid>/billing/sponsorship", remote_server_sponsorship),
|
2023-12-02 09:09:43 +01:00
|
|
|
path(
|
|
|
|
"json/realm/<realm_uuid>/billing/session/start_card_update_session",
|
|
|
|
start_card_update_stripe_session_for_remote_realm,
|
|
|
|
),
|
|
|
|
path(
|
|
|
|
"json/server/<server_uuid>/billing/session/start_card_update_session",
|
|
|
|
start_card_update_stripe_session_for_remote_server,
|
|
|
|
),
|
2023-11-30 14:06:41 +01:00
|
|
|
path(
|
|
|
|
"json/realm/<realm_uuid>/upgrade/session/start_card_update_session",
|
|
|
|
start_card_update_stripe_session_for_remote_realm_upgrade,
|
|
|
|
),
|
2023-12-01 06:44:59 +01:00
|
|
|
path(
|
|
|
|
"json/server/<server_uuid>/upgrade/session/start_card_update_session",
|
|
|
|
start_card_update_stripe_session_for_remote_server_upgrade,
|
|
|
|
),
|
2023-11-30 14:06:41 +01:00
|
|
|
path("json/realm/<realm_uuid>/billing/event/status", remote_realm_event_status),
|
2023-12-01 06:44:59 +01:00
|
|
|
path("json/server/<server_uuid>/billing/event/status", remote_server_event_status),
|
2023-12-01 07:14:12 +01:00
|
|
|
path("json/realm/<realm_uuid>/billing/upgrade", remote_realm_upgrade),
|
|
|
|
path("json/server/<server_uuid>/billing/upgrade", remote_server_upgrade),
|
2023-12-02 09:09:43 +01:00
|
|
|
path("json/realm/<realm_uuid>/billing/plan", update_plan_for_remote_realm),
|
|
|
|
path("json/server/<server_uuid>/billing/plan", update_plan_for_remote_server),
|
2023-11-30 01:48:46 +01:00
|
|
|
]
|
|
|
|
|
|
|
|
urlpatterns += [
|
|
|
|
path("api/v1/", include(v1_api_and_json_patterns)),
|
|
|
|
path("json/", include(v1_api_and_json_patterns)),
|
2023-11-15 22:44:24 +01:00
|
|
|
]
|