api.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. "github.com/gorilla/sessions"
  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 sessions.Store
  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 sessions.Store,
  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. }