add self hostded expansion mm-server parts.
Этот коммит содержится в:
@@ -32,6 +32,11 @@ type SelfHostedConfirmPaymentMethodRequest struct {
|
|||||||
Subscription CreateSubscriptionRequest `json:"subscription"`
|
Subscription CreateSubscriptionRequest `json:"subscription"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SelfHostedExpansionConfirmPaymentMethodRequest struct {
|
||||||
|
StripeSetupIntentID string `json:"stripe_setup_intent_id"`
|
||||||
|
ExpandRequest SelfHostedExpansionRequest `json:"expand_request"`
|
||||||
|
}
|
||||||
|
|
||||||
// SelfHostedSignupPaymentResponse contains feels needed for self hosted signup to confirm payment and receive license.
|
// SelfHostedSignupPaymentResponse contains feels needed for self hosted signup to confirm payment and receive license.
|
||||||
type SelfHostedSignupCustomerResponse struct {
|
type SelfHostedSignupCustomerResponse struct {
|
||||||
CustomerId string `json:"customer_id"`
|
CustomerId string `json:"customer_id"`
|
||||||
@@ -58,3 +63,8 @@ type SelfHostedBillingAccessRequest struct {
|
|||||||
type SelfHostedBillingAccessResponse struct {
|
type SelfHostedBillingAccessResponse struct {
|
||||||
Token string `json:"token"`
|
Token string `json:"token"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SelfHostedExpansionRequest struct {
|
||||||
|
Seats int `json:"seats"`
|
||||||
|
LicenseId string `json:"license_id"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -65,9 +65,18 @@ func checkSelfHostedPurchaseEnabled(c *Context) bool {
|
|||||||
return enabled != nil && *enabled
|
return enabled != nil && *enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkSelfHostedExpansionEnabled(c *Context) bool {
|
||||||
|
config := c.App.Config()
|
||||||
|
if config == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
enabled := config.ServiceSettings.SelfHostedExpansion
|
||||||
|
return enabled != nil && *enabled
|
||||||
|
}
|
||||||
|
|
||||||
func selfHostedBootstrap(c *Context, w http.ResponseWriter, r *http.Request) {
|
func selfHostedBootstrap(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
const where = "Api4.selfHostedBootstrap"
|
const where = "Api4.selfHostedBootstrap"
|
||||||
if !checkSelfHostedPurchaseEnabled(c) {
|
if !checkSelfHostedPurchaseEnabled(c) && !checkSelfHostedExpansionEnabled(c) {
|
||||||
c.Err = model.NewAppError(where, "api.cloud.app_error", nil, "", http.StatusNotImplemented)
|
c.Err = model.NewAppError(where, "api.cloud.app_error", nil, "", http.StatusNotImplemented)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -151,25 +160,40 @@ func selfHostedConfirm(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expand := r.URL.Query().Get("expand") == "true"
|
||||||
|
|
||||||
bodyBytes, err := io.ReadAll(r.Body)
|
bodyBytes, err := io.ReadAll(r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = model.NewAppError(where, "api.cloud.app_error", nil, "", http.StatusBadRequest).Wrap(err)
|
c.Err = model.NewAppError(where, "api.cloud.app_error", nil, "", http.StatusBadRequest).Wrap(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var confirm model.SelfHostedConfirmPaymentMethodRequest
|
|
||||||
err = json.Unmarshal(bodyBytes, &confirm)
|
|
||||||
if err != nil {
|
|
||||||
c.Err = model.NewAppError(where, "api.cloud.request_error", nil, "", http.StatusBadRequest).Wrap(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
user, userErr := c.App.GetUser(c.AppContext.Session().UserId)
|
user, userErr := c.App.GetUser(c.AppContext.Session().UserId)
|
||||||
if userErr != nil {
|
if userErr != nil {
|
||||||
c.Err = userErr
|
c.Err = userErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
confirmResponse, err := c.App.Cloud().ConfirmSelfHostedSignup(confirm, user.Email)
|
|
||||||
|
var confirmResponse *model.SelfHostedSignupConfirmResponse
|
||||||
|
if expand {
|
||||||
|
var confirm model.SelfHostedExpansionConfirmPaymentMethodRequest
|
||||||
|
err = json.Unmarshal(bodyBytes, &confirm)
|
||||||
|
if err != nil {
|
||||||
|
c.Err = model.NewAppError(where, "api.cloud.request_error", nil, "", http.StatusBadRequest).Wrap(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
confirmResponse, err = c.App.Cloud().ConfirmSelfHostedExpansion(confirm, user.Email)
|
||||||
|
} else {
|
||||||
|
var confirm model.SelfHostedConfirmPaymentMethodRequest
|
||||||
|
err = json.Unmarshal(bodyBytes, &confirm)
|
||||||
|
if err != nil {
|
||||||
|
c.Err = model.NewAppError(where, "api.cloud.request_error", nil, "", http.StatusBadRequest).Wrap(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
confirmResponse, err = c.App.Cloud().ConfirmSelfHostedSignup(confirm, user.Email)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if confirmResponse != nil {
|
if confirmResponse != nil {
|
||||||
c.App.NotifySelfHostedSignupProgress(confirmResponse.Progress, user.Id)
|
c.App.NotifySelfHostedSignupProgress(confirmResponse.Progress, user.Id)
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ type CloudInterface interface {
|
|||||||
BootstrapSelfHostedSignup(req model.BootstrapSelfHostedSignupRequest) (*model.BootstrapSelfHostedSignupResponse, error)
|
BootstrapSelfHostedSignup(req model.BootstrapSelfHostedSignupRequest) (*model.BootstrapSelfHostedSignupResponse, error)
|
||||||
CreateCustomerSelfHostedSignup(req model.SelfHostedCustomerForm, requesterEmail string) (*model.SelfHostedSignupCustomerResponse, error)
|
CreateCustomerSelfHostedSignup(req model.SelfHostedCustomerForm, requesterEmail string) (*model.SelfHostedSignupCustomerResponse, error)
|
||||||
ConfirmSelfHostedSignup(req model.SelfHostedConfirmPaymentMethodRequest, requesterEmail string) (*model.SelfHostedSignupConfirmResponse, error)
|
ConfirmSelfHostedSignup(req model.SelfHostedConfirmPaymentMethodRequest, requesterEmail string) (*model.SelfHostedSignupConfirmResponse, error)
|
||||||
|
ConfirmSelfHostedExpansion(req model.SelfHostedExpansionConfirmPaymentMethodRequest, requesterEmail string) (*model.SelfHostedSignupConfirmResponse, error)
|
||||||
ConfirmSelfHostedSignupLicenseApplication() error
|
ConfirmSelfHostedSignupLicenseApplication() error
|
||||||
GetSelfHostedInvoices() ([]*model.Invoice, error)
|
GetSelfHostedInvoices() ([]*model.Invoice, error)
|
||||||
GetSelfHostedInvoicePDF(invoiceID string) ([]byte, string, error)
|
GetSelfHostedInvoicePDF(invoiceID string) ([]byte, string, error)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user