billing.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package billing
  2. import (
  3. "fmt"
  4. "github.com/porter-dev/porter/internal/models"
  5. )
  6. // BillingManager contains methods for managing billing for a project
  7. type BillingManager interface {
  8. // CreateTeam creates the concept of a billing "team". This is currently a one-to-one
  9. // mapping with projects, but this may change in the future (i.e. multiple projects
  10. // per same team)
  11. CreateTeam(proj *models.Project) (teamID string, err error)
  12. // DeleteTeam deletes a billing team.
  13. DeleteTeam(proj *models.Project) (err error)
  14. // GetTeamID gets the billing team id for a project
  15. GetTeamID(proj *models.Project) (teamID string, err error)
  16. // AddUserToTeam adds a user to a team, and cases on whether the user can view
  17. // billing based on the role.
  18. AddUserToTeam(teamID string, user *models.User, role *models.Role) error
  19. // UpdateUserInTeam updates a user's role in a team, and cases on whether the user can view
  20. // billing based on the role.
  21. UpdateUserInTeam(role *models.Role) error
  22. // RemoveUserFromTeam removes a user from a team
  23. RemoveUserFromTeam(role *models.Role) error
  24. // GetIDToken retrieves a billing token for a user. The billing token can be exchanged
  25. // to view billing information.
  26. GetIDToken(proj *models.Project, user *models.User) (token string, teamID string, err error)
  27. // ParseProjectUsageFromWebhook parses the project usage from a webhook payload sent
  28. // from a billing agent
  29. ParseProjectUsageFromWebhook(payload []byte) (*models.ProjectUsage, error)
  30. // VerifySignature verifies the signature for a webhook
  31. VerifySignature(signature string, body []byte) bool
  32. }
  33. // NoopBillingManager performs no billing operations
  34. type NoopBillingManager struct{}
  35. func (n *NoopBillingManager) CreateTeam(proj *models.Project) (teamID string, err error) {
  36. return fmt.Sprintf("%d", proj.ID), nil
  37. }
  38. func (n *NoopBillingManager) DeleteTeam(proj *models.Project) (err error) {
  39. return nil
  40. }
  41. func (n *NoopBillingManager) GetTeamID(proj *models.Project) (teamID string, err error) {
  42. return fmt.Sprintf("%d", proj.ID), nil
  43. }
  44. func (n *NoopBillingManager) AddUserToTeam(teamID string, user *models.User, role *models.Role) error {
  45. return nil
  46. }
  47. func (n *NoopBillingManager) UpdateUserInTeam(role *models.Role) error {
  48. return nil
  49. }
  50. func (n *NoopBillingManager) RemoveUserFromTeam(role *models.Role) error {
  51. return nil
  52. }
  53. func (n *NoopBillingManager) GetIDToken(proj *models.Project, user *models.User) (token string, teamID string, err error) {
  54. return "", "", nil
  55. }
  56. func (n *NoopBillingManager) ParseProjectUsageFromWebhook(payload []byte) (*models.ProjectUsage, error) {
  57. return nil, nil
  58. }
  59. func (n *NoopBillingManager) VerifySignature(signature string, body []byte) bool {
  60. return false
  61. }