main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "os"
  8. "github.com/porter-dev/porter/internal/kubernetes"
  9. "github.com/gorilla/sessions"
  10. "github.com/porter-dev/porter/internal/forms"
  11. "github.com/porter-dev/porter/internal/repository"
  12. "github.com/porter-dev/porter/internal/repository/gorm"
  13. "github.com/porter-dev/porter/server/api"
  14. adapter "github.com/porter-dev/porter/internal/adapter"
  15. sessionstore "github.com/porter-dev/porter/internal/auth"
  16. "github.com/porter-dev/porter/internal/config"
  17. lr "github.com/porter-dev/porter/internal/logger"
  18. vr "github.com/porter-dev/porter/internal/validator"
  19. "github.com/porter-dev/porter/server/router"
  20. )
  21. func main() {
  22. appConf := config.FromEnv()
  23. logger := lr.NewConsole(appConf.Debug)
  24. db, err := adapter.New(&appConf.Db)
  25. if err != nil {
  26. logger.Fatal().Err(err).Msg("")
  27. return
  28. }
  29. repo := gorm.NewRepository(db)
  30. // upsert admin if config requires
  31. if appConf.Db.AdminInit {
  32. err := upsertAdmin(repo.User, appConf.Db.AdminEmail, appConf.Db.AdminPassword)
  33. if err != nil {
  34. fmt.Println("Error while upserting admin: " + err.Error())
  35. }
  36. }
  37. // declare as Store interface (methods Get, New, Save)
  38. var store sessions.Store
  39. store, _ = sessionstore.NewStore(repo, appConf.Server)
  40. validator := vr.New()
  41. a := api.New(logger, repo, validator, store, appConf.Server.CookieName, false)
  42. appRouter := router.New(a, store, appConf.Server.CookieName, appConf.Server.StaticFilePath)
  43. address := fmt.Sprintf(":%d", appConf.Server.Port)
  44. logger.Info().Msgf("Starting server %v", address)
  45. s := &http.Server{
  46. Addr: address,
  47. Handler: appRouter,
  48. ReadTimeout: appConf.Server.TimeoutRead,
  49. WriteTimeout: appConf.Server.TimeoutWrite,
  50. IdleTimeout: appConf.Server.TimeoutIdle,
  51. }
  52. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  53. log.Fatal("Server startup failed")
  54. }
  55. }
  56. func upsertAdmin(repo repository.UserRepository, email, pw string) error {
  57. admUser, err := repo.ReadUserByEmail(email)
  58. // create the user in this case
  59. if err != nil {
  60. form := forms.CreateUserForm{
  61. Email: email,
  62. Password: pw,
  63. }
  64. admUser, err = form.ToUser(repo)
  65. if err != nil {
  66. return err
  67. }
  68. admUser, err = repo.CreateUser(admUser)
  69. if err != nil {
  70. return err
  71. }
  72. }
  73. filename := "/porter/porter.kubeconfig"
  74. // read if kubeconfig file exists, if it does update the user
  75. if _, err := os.Stat(filename); !os.IsNotExist(err) {
  76. fileBytes, err := ioutil.ReadFile(filename)
  77. contexts := make([]string, 0)
  78. allContexts, err := kubernetes.GetContextsFromBytes(fileBytes, []string{})
  79. if err != nil {
  80. return err
  81. }
  82. for _, context := range allContexts {
  83. contexts = append(contexts, context.Name)
  84. }
  85. form := forms.UpdateUserForm{
  86. ID: admUser.ID,
  87. RawKubeConfig: string(fileBytes),
  88. AllowedContexts: contexts,
  89. }
  90. admUser, err = form.ToUser(repo)
  91. if err != nil {
  92. return err
  93. }
  94. admUser, err = repo.UpdateUser(admUser)
  95. if err != nil {
  96. return err
  97. }
  98. }
  99. return nil
  100. }