mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
upgrade: Make card add / update work for remote servers.
This commit is contained in:
@@ -2594,12 +2594,12 @@ class RemoteServerBillingSession(BillingSession): # nocoverage
|
|||||||
@override
|
@override
|
||||||
@property
|
@property
|
||||||
def billing_session_url(self) -> str:
|
def billing_session_url(self) -> str:
|
||||||
return "TBD"
|
return f"{settings.EXTERNAL_URI_SCHEME}{settings.SELF_HOSTING_MANAGEMENT_SUBDOMAIN}.{settings.EXTERNAL_HOST}/server/{self.remote_server.uuid}"
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@property
|
@property
|
||||||
def billing_base_url(self) -> str:
|
def billing_base_url(self) -> str:
|
||||||
return f"/server/${self.remote_server.uuid}"
|
return f"/server/{self.remote_server.uuid}"
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def support_url(self) -> str:
|
def support_url(self) -> str:
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from corporate.views.event_status import (
|
|||||||
event_status_page,
|
event_status_page,
|
||||||
remote_realm_event_status,
|
remote_realm_event_status,
|
||||||
remote_realm_event_status_page,
|
remote_realm_event_status_page,
|
||||||
|
remote_server_event_status,
|
||||||
remote_server_event_status_page,
|
remote_server_event_status_page,
|
||||||
)
|
)
|
||||||
from corporate.views.portico import (
|
from corporate.views.portico import (
|
||||||
@@ -33,6 +34,7 @@ from corporate.views.session import (
|
|||||||
start_card_update_stripe_session,
|
start_card_update_stripe_session,
|
||||||
start_card_update_stripe_session_for_realm_upgrade,
|
start_card_update_stripe_session_for_realm_upgrade,
|
||||||
start_card_update_stripe_session_for_remote_realm_upgrade,
|
start_card_update_stripe_session_for_remote_realm_upgrade,
|
||||||
|
start_card_update_stripe_session_for_remote_server_upgrade,
|
||||||
)
|
)
|
||||||
from corporate.views.sponsorship import (
|
from corporate.views.sponsorship import (
|
||||||
remote_realm_sponsorship,
|
remote_realm_sponsorship,
|
||||||
@@ -43,7 +45,12 @@ from corporate.views.sponsorship import (
|
|||||||
sponsorship_page,
|
sponsorship_page,
|
||||||
)
|
)
|
||||||
from corporate.views.support import support_request
|
from corporate.views.support import support_request
|
||||||
from corporate.views.upgrade import remote_realm_upgrade_page, upgrade, upgrade_page
|
from corporate.views.upgrade import (
|
||||||
|
remote_realm_upgrade_page,
|
||||||
|
remote_server_upgrade_page,
|
||||||
|
upgrade,
|
||||||
|
upgrade_page,
|
||||||
|
)
|
||||||
from corporate.views.webhook import stripe_webhook
|
from corporate.views.webhook import stripe_webhook
|
||||||
from zerver.lib.rest import rest_path
|
from zerver.lib.rest import rest_path
|
||||||
from zerver.lib.url_redirects import LANDING_PAGE_REDIRECTS
|
from zerver.lib.url_redirects import LANDING_PAGE_REDIRECTS
|
||||||
@@ -180,6 +187,11 @@ urlpatterns += [
|
|||||||
path("realm/<realm_uuid>/billing", remote_billing_page_realm, name="remote_billing_page_realm"),
|
path("realm/<realm_uuid>/billing", remote_billing_page_realm, name="remote_billing_page_realm"),
|
||||||
path("server/<server_uuid>/", remote_billing_page_server, name="remote_billing_page_server"),
|
path("server/<server_uuid>/", remote_billing_page_server, name="remote_billing_page_server"),
|
||||||
path("realm/<realm_uuid>/upgrade", remote_realm_upgrade_page, name="remote_realm_upgrade_page"),
|
path("realm/<realm_uuid>/upgrade", remote_realm_upgrade_page, name="remote_realm_upgrade_page"),
|
||||||
|
path(
|
||||||
|
"server/<server_uuid>/upgrade",
|
||||||
|
remote_server_upgrade_page,
|
||||||
|
name="remote_server_upgrade_page",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"realm/<realm_uuid>/sponsorship",
|
"realm/<realm_uuid>/sponsorship",
|
||||||
remote_realm_sponsorship_page,
|
remote_realm_sponsorship_page,
|
||||||
@@ -212,7 +224,12 @@ urlpatterns += [
|
|||||||
"json/realm/<realm_uuid>/upgrade/session/start_card_update_session",
|
"json/realm/<realm_uuid>/upgrade/session/start_card_update_session",
|
||||||
start_card_update_stripe_session_for_remote_realm_upgrade,
|
start_card_update_stripe_session_for_remote_realm_upgrade,
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"json/server/<server_uuid>/upgrade/session/start_card_update_session",
|
||||||
|
start_card_update_stripe_session_for_remote_server_upgrade,
|
||||||
|
),
|
||||||
path("json/realm/<realm_uuid>/billing/event/status", remote_realm_event_status),
|
path("json/realm/<realm_uuid>/billing/event/status", remote_realm_event_status),
|
||||||
|
path("json/server/<server_uuid>/billing/event/status", remote_server_event_status),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
|
|||||||
@@ -6,9 +6,15 @@ from django.shortcuts import render
|
|||||||
|
|
||||||
from corporate.lib.decorator import (
|
from corporate.lib.decorator import (
|
||||||
authenticated_remote_realm_management_endpoint,
|
authenticated_remote_realm_management_endpoint,
|
||||||
|
authenticated_remote_server_management_endpoint,
|
||||||
self_hosting_management_endpoint,
|
self_hosting_management_endpoint,
|
||||||
)
|
)
|
||||||
from corporate.lib.stripe import EventStatusRequest, RealmBillingSession, RemoteRealmBillingSession
|
from corporate.lib.stripe import (
|
||||||
|
EventStatusRequest,
|
||||||
|
RealmBillingSession,
|
||||||
|
RemoteRealmBillingSession,
|
||||||
|
RemoteServerBillingSession,
|
||||||
|
)
|
||||||
from zerver.decorator import require_organization_member, zulip_login_required
|
from zerver.decorator import require_organization_member, zulip_login_required
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
from zerver.lib.typed_endpoint import typed_endpoint
|
from zerver.lib.typed_endpoint import typed_endpoint
|
||||||
@@ -50,6 +56,22 @@ def remote_realm_event_status(
|
|||||||
return json_success(request, data)
|
return json_success(request, data)
|
||||||
|
|
||||||
|
|
||||||
|
@authenticated_remote_server_management_endpoint
|
||||||
|
@typed_endpoint
|
||||||
|
def remote_server_event_status(
|
||||||
|
request: HttpRequest,
|
||||||
|
billing_session: RemoteServerBillingSession,
|
||||||
|
*,
|
||||||
|
stripe_session_id: Optional[str] = None,
|
||||||
|
stripe_payment_intent_id: Optional[str] = None,
|
||||||
|
) -> HttpResponse: # nocoverage
|
||||||
|
event_status_request = EventStatusRequest(
|
||||||
|
stripe_session_id=stripe_session_id, stripe_payment_intent_id=stripe_payment_intent_id
|
||||||
|
)
|
||||||
|
data = billing_session.get_event_status(event_status_request)
|
||||||
|
return json_success(request, data)
|
||||||
|
|
||||||
|
|
||||||
@zulip_login_required
|
@zulip_login_required
|
||||||
@typed_endpoint
|
@typed_endpoint
|
||||||
def event_status_page(
|
def event_status_page(
|
||||||
|
|||||||
@@ -3,8 +3,15 @@ import logging
|
|||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from pydantic import Json
|
from pydantic import Json
|
||||||
|
|
||||||
from corporate.lib.decorator import authenticated_remote_realm_management_endpoint
|
from corporate.lib.decorator import (
|
||||||
from corporate.lib.stripe import RealmBillingSession, RemoteRealmBillingSession
|
authenticated_remote_realm_management_endpoint,
|
||||||
|
authenticated_remote_server_management_endpoint,
|
||||||
|
)
|
||||||
|
from corporate.lib.stripe import (
|
||||||
|
RealmBillingSession,
|
||||||
|
RemoteRealmBillingSession,
|
||||||
|
RemoteServerBillingSession,
|
||||||
|
)
|
||||||
from corporate.models import Session
|
from corporate.models import Session
|
||||||
from zerver.decorator import require_billing_access, require_organization_member
|
from zerver.decorator import require_billing_access, require_organization_member
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
@@ -67,3 +74,20 @@ def start_card_update_stripe_session_for_remote_realm_upgrade(
|
|||||||
request,
|
request,
|
||||||
data=session_data,
|
data=session_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@authenticated_remote_server_management_endpoint
|
||||||
|
@typed_endpoint
|
||||||
|
def start_card_update_stripe_session_for_remote_server_upgrade(
|
||||||
|
request: HttpRequest,
|
||||||
|
billing_session: RemoteServerBillingSession,
|
||||||
|
*,
|
||||||
|
manual_license_management: Json[bool] = False,
|
||||||
|
) -> HttpResponse: # nocoverage
|
||||||
|
session_data = billing_session.get_card_update_session_data_for_upgrade(
|
||||||
|
manual_license_management
|
||||||
|
)
|
||||||
|
return json_success(
|
||||||
|
request,
|
||||||
|
data=session_data,
|
||||||
|
)
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
|
|||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from pydantic import Json
|
from pydantic import Json
|
||||||
|
|
||||||
from corporate.lib.decorator import authenticated_remote_realm_management_endpoint
|
from corporate.lib.decorator import (
|
||||||
|
authenticated_remote_realm_management_endpoint,
|
||||||
|
authenticated_remote_server_management_endpoint,
|
||||||
|
)
|
||||||
from corporate.lib.stripe import (
|
from corporate.lib.stripe import (
|
||||||
VALID_BILLING_MODALITY_VALUES,
|
VALID_BILLING_MODALITY_VALUES,
|
||||||
VALID_BILLING_SCHEDULE_VALUES,
|
VALID_BILLING_SCHEDULE_VALUES,
|
||||||
@@ -15,6 +18,7 @@ from corporate.lib.stripe import (
|
|||||||
InitialUpgradeRequest,
|
InitialUpgradeRequest,
|
||||||
RealmBillingSession,
|
RealmBillingSession,
|
||||||
RemoteRealmBillingSession,
|
RemoteRealmBillingSession,
|
||||||
|
RemoteServerBillingSession,
|
||||||
UpgradeRequest,
|
UpgradeRequest,
|
||||||
)
|
)
|
||||||
from corporate.models import CustomerPlan
|
from corporate.models import CustomerPlan
|
||||||
@@ -120,3 +124,24 @@ def remote_realm_upgrade_page(
|
|||||||
|
|
||||||
response = render(request, "corporate/upgrade.html", context=context)
|
response = render(request, "corporate/upgrade.html", context=context)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@authenticated_remote_server_management_endpoint
|
||||||
|
@typed_endpoint
|
||||||
|
def remote_server_upgrade_page(
|
||||||
|
request: HttpRequest,
|
||||||
|
billing_session: RemoteServerBillingSession,
|
||||||
|
*,
|
||||||
|
manual_license_management: Json[bool] = False,
|
||||||
|
) -> HttpResponse: # nocoverage
|
||||||
|
initial_upgrade_request = InitialUpgradeRequest(
|
||||||
|
manual_license_management=manual_license_management,
|
||||||
|
tier=CustomerPlan.TIER_CLOUD_STANDARD,
|
||||||
|
)
|
||||||
|
redirect_url, context = billing_session.get_initial_upgrade_context(initial_upgrade_request)
|
||||||
|
|
||||||
|
if redirect_url:
|
||||||
|
return HttpResponseRedirect(redirect_url)
|
||||||
|
|
||||||
|
response = render(request, "corporate/upgrade.html", context=context)
|
||||||
|
return response
|
||||||
|
|||||||
Reference in New Issue
Block a user