| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package main
- import (
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "os"
- "github.com/porter-dev/porter/internal/kubernetes"
- "github.com/gorilla/sessions"
- "github.com/porter-dev/porter/internal/forms"
- "github.com/porter-dev/porter/internal/repository"
- "github.com/porter-dev/porter/internal/repository/gorm"
- "github.com/porter-dev/porter/server/api"
- adapter "github.com/porter-dev/porter/internal/adapter"
- sessionstore "github.com/porter-dev/porter/internal/auth"
- "github.com/porter-dev/porter/internal/config"
- lr "github.com/porter-dev/porter/internal/logger"
- vr "github.com/porter-dev/porter/internal/validator"
- "github.com/porter-dev/porter/server/router"
- )
- func main() {
- appConf := config.FromEnv()
- logger := lr.NewConsole(appConf.Debug)
- db, err := adapter.New(&appConf.Db)
- if err != nil {
- logger.Fatal().Err(err).Msg("")
- return
- }
- repo := gorm.NewRepository(db)
- // upsert admin if config requires
- if appConf.Db.AdminInit {
- err := upsertAdmin(repo.User, appConf.Db.AdminEmail, appConf.Db.AdminPassword)
- if err != nil {
- fmt.Println("Error while upserting admin: " + err.Error())
- }
- }
- // declare as Store interface (methods Get, New, Save)
- var store sessions.Store
- store, _ = sessionstore.NewStore(repo, appConf.Server)
- validator := vr.New()
- a := api.New(logger, repo, validator, store, appConf.Server.CookieName, false)
- appRouter := router.New(a, store, appConf.Server.CookieName, appConf.Server.StaticFilePath)
- address := fmt.Sprintf(":%d", appConf.Server.Port)
- logger.Info().Msgf("Starting server %v", address)
- s := &http.Server{
- Addr: address,
- Handler: appRouter,
- ReadTimeout: appConf.Server.TimeoutRead,
- WriteTimeout: appConf.Server.TimeoutWrite,
- IdleTimeout: appConf.Server.TimeoutIdle,
- }
- if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- log.Fatal("Server startup failed")
- }
- }
- func upsertAdmin(repo repository.UserRepository, email, pw string) error {
- admUser, err := repo.ReadUserByEmail(email)
- // create the user in this case
- if err != nil {
- form := forms.CreateUserForm{
- Email: email,
- Password: pw,
- }
- admUser, err = form.ToUser(repo)
- if err != nil {
- return err
- }
- admUser, err = repo.CreateUser(admUser)
- if err != nil {
- return err
- }
- }
- filename := "/porter/porter.kubeconfig"
- // read if kubeconfig file exists, if it does update the user
- if _, err := os.Stat(filename); !os.IsNotExist(err) {
- fileBytes, err := ioutil.ReadFile(filename)
- contexts := make([]string, 0)
- allContexts, err := kubernetes.GetContextsFromBytes(fileBytes, []string{})
- if err != nil {
- return err
- }
- for _, context := range allContexts {
- contexts = append(contexts, context.Name)
- }
- form := forms.UpdateUserForm{
- ID: admUser.ID,
- RawKubeConfig: string(fileBytes),
- AllowedContexts: contexts,
- }
- admUser, err = form.ToUser(repo)
- if err != nil {
- return err
- }
- admUser, err = repo.UpdateUser(admUser)
- if err != nil {
- return err
- }
- }
- return nil
- }
|