upgrade: Make card add / update work for remote servers.

This commit is contained in:
Aman Agrawal
2023-12-01 05:44:59 +00:00
committed by Tim Abbott
parent 9889dc38fe
commit e9bbb67035
5 changed files with 95 additions and 7 deletions

View File

@@ -2594,12 +2594,12 @@ class RemoteServerBillingSession(BillingSession): # nocoverage
@override
@property
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
@property
def billing_base_url(self) -> str:
return f"/server/${self.remote_server.uuid}"
return f"/server/{self.remote_server.uuid}"
@override
def support_url(self) -> str:

View File

@@ -10,6 +10,7 @@ from corporate.views.event_status import (
event_status_page,
remote_realm_event_status,
remote_realm_event_status_page,
remote_server_event_status,
remote_server_event_status_page,
)
from corporate.views.portico import (
@@ -33,6 +34,7 @@ from corporate.views.session import (
start_card_update_stripe_session,
start_card_update_stripe_session_for_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 (
remote_realm_sponsorship,
@@ -43,7 +45,12 @@ from corporate.views.sponsorship import (
sponsorship_page,
)
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 zerver.lib.rest import rest_path
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("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(
"server/<server_uuid>/upgrade",
remote_server_upgrade_page,
name="remote_server_upgrade_page",
),
path(
"realm/<realm_uuid>/sponsorship",
remote_realm_sponsorship_page,
@@ -212,7 +224,12 @@ urlpatterns += [
"json/realm/<realm_uuid>/upgrade/session/start_card_update_session",
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/server/<server_uuid>/billing/event/status", remote_server_event_status),
]
urlpatterns += [

View File

@@ -6,9 +6,15 @@ from django.shortcuts import render
from corporate.lib.decorator import (
authenticated_remote_realm_management_endpoint,
authenticated_remote_server_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.lib.response import json_success
from zerver.lib.typed_endpoint import typed_endpoint
@@ -50,6 +56,22 @@ def remote_realm_event_status(
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
@typed_endpoint
def event_status_page(

View File

@@ -3,8 +3,15 @@ import logging
from django.http import HttpRequest, HttpResponse
from pydantic import Json
from corporate.lib.decorator import authenticated_remote_realm_management_endpoint
from corporate.lib.stripe import RealmBillingSession, RemoteRealmBillingSession
from corporate.lib.decorator import (
authenticated_remote_realm_management_endpoint,
authenticated_remote_server_management_endpoint,
)
from corporate.lib.stripe import (
RealmBillingSession,
RemoteRealmBillingSession,
RemoteServerBillingSession,
)
from corporate.models import Session
from zerver.decorator import require_billing_access, require_organization_member
from zerver.lib.response import json_success
@@ -67,3 +74,20 @@ def start_card_update_stripe_session_for_remote_realm_upgrade(
request,
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,
)

View File

@@ -6,7 +6,10 @@ from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
from django.shortcuts import render
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 (
VALID_BILLING_MODALITY_VALUES,
VALID_BILLING_SCHEDULE_VALUES,
@@ -15,6 +18,7 @@ from corporate.lib.stripe import (
InitialUpgradeRequest,
RealmBillingSession,
RemoteRealmBillingSession,
RemoteServerBillingSession,
UpgradeRequest,
)
from corporate.models import CustomerPlan
@@ -120,3 +124,24 @@ def remote_realm_upgrade_page(
response = render(request, "corporate/upgrade.html", context=context)
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