api.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package api
  2. import (
  3. "github.com/go-playground/locales/en"
  4. ut "github.com/go-playground/universal-translator"
  5. "github.com/go-playground/validator/v10"
  6. sessionstore "github.com/porter-dev/porter/internal/auth"
  7. "github.com/porter-dev/porter/internal/helm"
  8. "github.com/porter-dev/porter/internal/kubernetes"
  9. lr "github.com/porter-dev/porter/internal/logger"
  10. "github.com/porter-dev/porter/internal/repository"
  11. "helm.sh/helm/v3/pkg/storage"
  12. )
  13. // TestAgents are the k8s agents used for testing
  14. type TestAgents struct {
  15. HelmAgent *helm.Agent
  16. HelmTestStorageDriver *storage.Storage
  17. K8sAgent *kubernetes.Agent
  18. }
  19. // App represents an API instance with handler methods attached, a DB connection
  20. // and a logger instance
  21. type App struct {
  22. logger *lr.Logger
  23. repo *repository.Repository
  24. validator *validator.Validate
  25. store *sessionstore.PGStore
  26. translator *ut.Translator
  27. cookieName string
  28. testing bool
  29. TestAgents *TestAgents
  30. }
  31. // New returns a new App instance
  32. func New(
  33. logger *lr.Logger,
  34. repo *repository.Repository,
  35. validator *validator.Validate,
  36. store *sessionstore.PGStore,
  37. cookieName string,
  38. testing bool,
  39. ) *App {
  40. // for now, will just support the english translator from the
  41. // validator/translations package
  42. en := en.New()
  43. uni := ut.New(en, en)
  44. trans, _ := uni.GetTranslator("en")
  45. var testAgents *TestAgents = nil
  46. if testing {
  47. memStorage := helm.StorageMap["memory"](nil, "", nil)
  48. testAgents = &TestAgents{
  49. HelmAgent: helm.GetAgentTesting(&helm.Form{}, nil, logger),
  50. HelmTestStorageDriver: memStorage,
  51. K8sAgent: kubernetes.GetAgentTesting(),
  52. }
  53. }
  54. return &App{
  55. logger: logger,
  56. repo: repo,
  57. validator: validator,
  58. store: store,
  59. translator: &trans,
  60. cookieName: cookieName,
  61. testing: testing,
  62. TestAgents: testAgents,
  63. }
  64. }
  65. // Logger returns the logger instance in use by App
  66. func (app *App) Logger() *lr.Logger {
  67. return app.logger
  68. }