Kaynağa Gözat

Clean up old billing manager

Mauricio Araujo 2 yıl önce
ebeveyn
işleme
9639bf17a1

+ 0 - 9
api/server/handlers/billing/redirect_billing.go

@@ -6,7 +6,6 @@ import (
 
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/shared"
-	"github.com/porter-dev/porter/api/server/shared/apierrors"
 	"github.com/porter-dev/porter/api/server/shared/config"
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/internal/models"
@@ -53,12 +52,4 @@ func (c *RedirectBillingHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 		http.Redirect(w, r, "/dashboard?error="+url.QueryEscape("Only the creator of the project can manage billing"), 302)
 		return
 	}
-
-	redirectURI, err := c.Config().BillingManager.GetRedirectURI(user, proj)
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	http.Redirect(w, r, redirectURI, 302)
 }

+ 0 - 13
api/server/handlers/project/create.go

@@ -51,7 +51,6 @@ func (p *ProjectCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 
 	var err error
 	proj, _, err = CreateProjectWithUser(p.Repo().Project(), proj, user)
-
 	if err != nil {
 		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
@@ -68,7 +67,6 @@ func (p *ProjectCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		ProjectID:   proj.ID,
 		CurrentStep: step,
 	})
-
 	if err != nil {
 		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
@@ -82,7 +80,6 @@ func (p *ProjectCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		Clusters:       types.BasicPlan.Clusters,
 		Users:          types.BasicPlan.Users,
 	})
-
 	if err != nil {
 		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
@@ -90,15 +87,6 @@ func (p *ProjectCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 
 	p.WriteResult(w, r, proj.ToProjectType(p.Config().LaunchDarklyClient))
 
-	// add project to billing team
-	_, err = p.Config().BillingManager.CreateTeam(user, proj)
-
-	if err != nil {
-		// we do not write error response, since setting up billing error can be
-		// resolved later and may not be fatal
-		p.HandleAPIErrorNoWrite(w, r, apierrors.NewErrInternal(err))
-	}
-
 	p.Config().AnalyticsClient.Track(analytics.ProjectCreateTrack(&analytics.ProjectCreateDeleteTrackOpts{
 		ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, proj.ID),
 	}))
@@ -128,7 +116,6 @@ func CreateProjectWithUser(
 
 	// read the project again to get the model with the role attached
 	proj, err = projectRepo.ReadProject(proj.ID)
-
 	if err != nil {
 		return nil, nil, err
 	}

+ 0 - 7
api/server/handlers/project/delete.go

@@ -117,11 +117,4 @@ func (p *ProjectDeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	}
 
 	p.WriteResult(w, r, deletedProject.ToProjectType(p.Config().LaunchDarklyClient))
-
-	// delete the billing team
-	if err := p.Config().BillingManager.DeleteTeam(user, proj); err != nil {
-		// we do not write error response, since setting up billing error can be
-		// resolved later and may not be fatal
-		p.HandleAPIErrorNoWrite(w, r, apierrors.NewErrInternal(err))
-	}
 }

+ 0 - 116
ee/api/server/handlers/billing/webhook.go

@@ -1,116 +0,0 @@
-package billing
-
-import (
-	"errors"
-	"fmt"
-	"io/ioutil"
-	"net/http"
-
-	"github.com/porter-dev/porter/api/server/authz"
-	"github.com/porter-dev/porter/api/server/handlers"
-	"github.com/porter-dev/porter/api/server/shared"
-	"github.com/porter-dev/porter/api/server/shared/apierrors"
-	"github.com/porter-dev/porter/api/server/shared/config"
-	"gorm.io/gorm"
-)
-
-type BillingWebhookHandler struct {
-	handlers.PorterHandlerReadWriter
-	authz.KubernetesAgentGetter
-}
-
-func NewBillingWebhookHandler(
-	config *config.Config,
-	decoderValidator shared.RequestDecoderValidator,
-) http.Handler {
-	return &BillingWebhookHandler{
-		PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, nil),
-	}
-}
-
-func (c *BillingWebhookHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-	payload, err := ioutil.ReadAll(r.Body)
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	// verify webhook secret
-	signature := r.Header.Get("x-signature")
-
-	if !c.Config().BillingManager.VerifySignature(signature, payload) {
-		c.HandleAPIError(w, r, apierrors.NewErrForbidden(
-			fmt.Errorf("could not verify signature for billing webhook"),
-		))
-
-		return
-	}
-
-	// parse usage and update project
-	newUsage, err := c.Config().BillingManager.ParseProjectUsageFromWebhook(payload)
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	// newUsage will be nil if webhook event type is not "subscription", so return without
-	// updating usage in this case
-	if newUsage == nil {
-		return
-	}
-
-	// update the project's usage
-	existingUsage, err := c.Repo().ProjectUsage().ReadProjectUsage(newUsage.ProjectID)
-	notFound := errors.Is(err, gorm.ErrRecordNotFound)
-
-	if !notFound && err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	if notFound {
-		_, err = c.Repo().ProjectUsage().CreateProjectUsage(newUsage)
-	} else {
-		newUsage.ID = existingUsage.ID
-		_, err = c.Repo().ProjectUsage().UpdateProjectUsage(newUsage)
-	}
-
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	// update the feature flags
-	project, err := c.Repo().Project().ReadProject(newUsage.ProjectID)
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	// if managedDatabasesEnabled, err := strconv.ParseBool(features.ManagedDatabasesEnabled); err == nil {
-	// 	project.RDSDatabasesEnabled = managedDatabasesEnabled
-	// }
-
-	// if managedInfraEnabled, err := strconv.ParseBool(features.ManagedInfraEnabled); err == nil {
-	// 	project.ManagedInfraEnabled = managedInfraEnabled
-	// }
-
-	// if stacksEnabled, err := strconv.ParseBool(features.StacksEnabled); err == nil {
-	// 	project.StacksEnabled = stacksEnabled
-	// }
-
-	// if previewEnvsEnabled, err := strconv.ParseBool(features.PreviewEnvironmentsEnabled); err == nil {
-	// 	project.PreviewEnvsEnabled = previewEnvsEnabled
-	// }
-
-	// if capiProvisionerEnabled, err := strconv.ParseBool(features.CapiProvisionerEnabled); err == nil {
-	// 	project.CapiProvisionerEnabled = capiProvisionerEnabled
-	// }
-
-	_, err = c.Repo().Project().UpdateProject(project)
-
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-}

+ 0 - 45
internal/billing/billing.go

@@ -1,22 +1,12 @@
 package billing
 
 import (
-	"fmt"
-
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/internal/models"
 )
 
 // BillingManager contains methods for managing billing for a project
 type BillingManager interface {
-	// CreateTeam creates the concept of a billing "team". This is currently a one-to-one
-	// mapping with projects, but this may change in the future (i.e. multiple projects
-	// per same team)
-	CreateTeam(user *models.User, proj *models.Project) (teamID string, err error)
-
-	// DeleteTeam deletes a billing team.
-	DeleteTeam(user *models.User, proj *models.Project) (err error)
-
 	// CreateCustomer registers a project in the billing provider. This is currently a one-to-one
 	// mapping with projects and billing customers, because billing and usage are set per project.
 	CreateCustomer(userEmail string, proj *models.Project) (customerID string, err error)
@@ -29,16 +19,6 @@ type BillingManager interface {
 
 	// DeletePaymentMethod will remove a payment method for the project in Stripe
 	DeletePaymentMethod(paymentMethodID string) (err error)
-
-	// GetRedirectURI gets the redirect URI to send the user to the billing portal
-	GetRedirectURI(user *models.User, proj *models.Project) (url string, err error)
-
-	// ParseProjectUsageFromWebhook parses the project usage from a webhook payload sent
-	// from a billing agent
-	ParseProjectUsageFromWebhook(payload []byte) (*models.ProjectUsage, error)
-
-	// VerifySignature verifies the signature for a webhook
-	VerifySignature(signature string, body []byte) bool
 }
 
 // NoopBillingManager performs no billing operations
@@ -63,28 +43,3 @@ func (s *NoopBillingManager) CreatePaymentMethod(proj *models.Project) (clientSe
 func (s *NoopBillingManager) DeletePaymentMethod(paymentMethodID string) (err error) {
 	return nil
 }
-
-// CreateTeam is a no-op
-func (n *NoopBillingManager) CreateTeam(user *models.User, proj *models.Project) (teamID string, err error) {
-	return fmt.Sprintf("%d", proj.ID), nil
-}
-
-// DeleteTeam is a no-op
-func (n *NoopBillingManager) DeleteTeam(user *models.User, proj *models.Project) (err error) {
-	return nil
-}
-
-// GetRedirectURI is a no-op
-func (n *NoopBillingManager) GetRedirectURI(user *models.User, proj *models.Project) (url string, err error) {
-	return "", nil
-}
-
-// ParseProjectUsageFromWebhook is a no-op
-func (n *NoopBillingManager) ParseProjectUsageFromWebhook(payload []byte) (*models.ProjectUsage, error) {
-	return nil, nil
-}
-
-// VerifySignature is a no-op
-func (n *NoopBillingManager) VerifySignature(signature string, body []byte) bool {
-	return false
-}

+ 0 - 25
internal/billing/stripe.go

@@ -95,28 +95,3 @@ func (s *StripeBillingManager) DeletePaymentMethod(paymentMethodID string) (err
 
 	return nil
 }
-
-// CreateTeam is a no-op
-func (s *StripeBillingManager) CreateTeam(user *models.User, proj *models.Project) (teamID string, err error) {
-	return fmt.Sprintf("%d", proj.ID), nil
-}
-
-// DeleteTeam is a no-op
-func (s *StripeBillingManager) DeleteTeam(user *models.User, proj *models.Project) (err error) {
-	return nil
-}
-
-// GetRedirectURI is a no-op
-func (s *StripeBillingManager) GetRedirectURI(user *models.User, proj *models.Project) (url string, err error) {
-	return "", nil
-}
-
-// ParseProjectUsageFromWebhook is a no-op
-func (s *StripeBillingManager) ParseProjectUsageFromWebhook(payload []byte) (*models.ProjectUsage, error) {
-	return nil, nil
-}
-
-// VerifySignature is a no-op
-func (s *StripeBillingManager) VerifySignature(signature string, body []byte) bool {
-	return false
-}