package main import ( "context" "embed" "fmt" "html/template" "git.keks.cloud/kekskurse/miniauth/pkg/smtpclient" "git.keks.cloud/kekskurse/miniauth/pkg/userstore" "git.keks.cloud/kekskurse/miniauth/pkg/web" "github.com/gin-gonic/gin" "github.com/rs/zerolog/log" "github.com/sethvargo/go-envconfig" ) //go:embed templates/* var templatesFS embed.FS func main() { cnf := config() router := setupRouter(cnf) router.Run(fmt.Sprintf(":%v", cnf.Port)) } type gloableConfig struct { UserStoreConfig userstore.Config `env:", prefix=USERSTORE_"` Port int `env:"PORT, default=8080"` SMTPConfig smtpclient.SMTPConfig `env:", prefix=SMTP_"` WebConfig web.WebConfig `env:", prefix=WEB_"` } func config() gloableConfig { var c gloableConfig err := envconfig.Process(context.Background(), &c) if err != nil { log.Fatal().Err(err).Msg("cant parse config") } return c } func loadTemplates() *template.Template { tmpl, err := template.ParseFS(templatesFS, "templates/*.html") if err != nil { panic(err) // Handle error entsprechend } return tmpl } func setupRouter(cfg gloableConfig) *gin.Engine { router := gin.Default() router.SetHTMLTemplate(loadTemplates()) routesWeb := router.Group("/web") webServer := web.NewWeb(cfg.WebConfig) webServer.RegisterRoutes(routesWeb) router.GET("/", func(c *gin.Context) {}) router.GET("/ping", func(c *gin.Context) { c.String(200, "pong") }) return router }