main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. )
  18. func main() {
  19. appConf := config.FromEnv()
  20. logger := lr.NewConsole(appConf.Debug)
  21. db, err := adapter.New(&appConf.Db)
  22. if err != nil {
  23. logger.Fatal().Err(err).Msg("")
  24. return
  25. }
  26. err = db.AutoMigrate(
  27. &models.Project{},
  28. &models.Role{},
  29. &models.ServiceAccount{},
  30. &models.ServiceAccountAction{},
  31. &models.ServiceAccountCandidate{},
  32. &models.Cluster{},
  33. &models.TokenCache{},
  34. &models.User{},
  35. &models.Session{},
  36. &models.RepoClient{},
  37. )
  38. if err != nil {
  39. logger.Fatal().Err(err).Msg("")
  40. return
  41. }
  42. var key [32]byte
  43. for i, b := range []byte(appConf.Db.EncryptionKey) {
  44. key[i] = b
  45. }
  46. repo := gorm.NewRepository(db, &key)
  47. // declare as Store interface (methods Get, New, Save)
  48. var store sessions.Store
  49. store, _ = sessionstore.NewStore(repo, appConf.Server)
  50. validator := vr.New()
  51. a := api.New(
  52. logger,
  53. nil,
  54. repo,
  55. validator,
  56. store,
  57. appConf.Server.CookieName,
  58. false,
  59. appConf.Server.IsLocal,
  60. &oauth.Config{
  61. ClientID: appConf.Server.GithubClientID,
  62. ClientSecret: appConf.Server.GithubClientSecret,
  63. Scopes: []string{"repo", "user", "read:user"},
  64. BaseURL: appConf.Server.ServerURL,
  65. },
  66. )
  67. appRouter := router.New(a, store, appConf.Server.CookieName, appConf.Server.StaticFilePath, repo)
  68. address := fmt.Sprintf(":%d", appConf.Server.Port)
  69. logger.Info().Msgf("Starting server %v", address)
  70. s := &http.Server{
  71. Addr: address,
  72. Handler: appRouter,
  73. ReadTimeout: appConf.Server.TimeoutRead,
  74. WriteTimeout: appConf.Server.TimeoutWrite,
  75. IdleTimeout: appConf.Server.TimeoutIdle,
  76. }
  77. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  78. log.Fatal("Server startup failed", err)
  79. }
  80. }