main.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "github.com/gorilla/sessions"
  7. "github.com/porter-dev/porter/internal/models"
  8. "github.com/porter-dev/porter/internal/oauth"
  9. "github.com/porter-dev/porter/internal/repository/gorm"
  10. "github.com/porter-dev/porter/server/api"
  11. "github.com/porter-dev/porter/internal/adapter"
  12. sessionstore "github.com/porter-dev/porter/internal/auth"
  13. "github.com/porter-dev/porter/internal/config"
  14. lr "github.com/porter-dev/porter/internal/logger"
  15. vr "github.com/porter-dev/porter/internal/validator"
  16. "github.com/porter-dev/porter/server/router"
  17. ints "github.com/porter-dev/porter/internal/models/integrations"
  18. )
  19. func main() {
  20. appConf := config.FromEnv()
  21. logger := lr.NewConsole(appConf.Debug)
  22. db, err := adapter.New(&appConf.Db)
  23. if err != nil {
  24. logger.Fatal().Err(err).Msg("")
  25. return
  26. }
  27. err = db.AutoMigrate(
  28. &models.Project{},
  29. &models.Role{},
  30. &models.User{},
  31. &models.Session{},
  32. &models.GitRepo{},
  33. &models.Registry{},
  34. &models.HelmRepo{},
  35. &models.Cluster{},
  36. &models.ClusterCandidate{},
  37. &models.ClusterResolver{},
  38. &ints.KubeIntegration{},
  39. &ints.BasicIntegration{},
  40. &ints.OIDCIntegration{},
  41. &ints.OAuthIntegration{},
  42. &ints.GCPIntegration{},
  43. &ints.AWSIntegration{},
  44. &ints.TokenCache{},
  45. &ints.ClusterTokenCache{},
  46. &ints.RegTokenCache{},
  47. &ints.HelmRepoTokenCache{},
  48. )
  49. if err != nil {
  50. logger.Fatal().Err(err).Msg("")
  51. return
  52. }
  53. var key [32]byte
  54. for i, b := range []byte(appConf.Db.EncryptionKey) {
  55. key[i] = b
  56. }
  57. repo := gorm.NewRepository(db, &key)
  58. // declare as Store interface (methods Get, New, Save)
  59. var store sessions.Store
  60. store, _ = sessionstore.NewStore(repo, appConf.Server)
  61. validator := vr.New()
  62. a := api.New(
  63. logger,
  64. nil,
  65. repo,
  66. validator,
  67. store,
  68. appConf.Server.CookieName,
  69. false,
  70. appConf.Server.IsLocal,
  71. &oauth.Config{
  72. ClientID: appConf.Server.GithubClientID,
  73. ClientSecret: appConf.Server.GithubClientSecret,
  74. Scopes: []string{"repo", "user", "read:user"},
  75. BaseURL: appConf.Server.ServerURL,
  76. },
  77. )
  78. appRouter := router.New(a, store, appConf.Server.CookieName, appConf.Server.StaticFilePath, repo)
  79. address := fmt.Sprintf(":%d", appConf.Server.Port)
  80. logger.Info().Msgf("Starting server %v", address)
  81. s := &http.Server{
  82. Addr: address,
  83. Handler: appRouter,
  84. ReadTimeout: appConf.Server.TimeoutRead,
  85. WriteTimeout: appConf.Server.TimeoutWrite,
  86. IdleTimeout: appConf.Server.TimeoutIdle,
  87. }
  88. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  89. log.Fatal("Server startup failed", err)
  90. }
  91. }