package handlers import ( "embed" "log/slog" "github.com/gorilla/sessions" "github.com/jmoiron/sqlx" "github.com/mentos1386/zdravko/database" "github.com/mentos1386/zdravko/internal/config" "github.com/mentos1386/zdravko/pkg/script" "github.com/mentos1386/zdravko/web/templates/components" "go.temporal.io/sdk/client" "gopkg.in/yaml.v3" ) //go:embed examples.yaml var examplesYaml embed.FS type examples struct { Check string `yaml:"check"` Filter string `yaml:"filter"` Trigger string `yaml:"trigger"` Target string `yaml:"target"` Hook string `yaml:"hook"` } var Pages = []*components.Page{ {Path: "/", Title: "Status", Breadcrumb: "Status"}, {Path: "/incidents", Title: "Incidents", Breadcrumb: "Incidents"}, {Path: "/settings", Title: "Settings", Breadcrumb: "Settings"}, } func GetPageByTitle(pages []*components.Page, title string) *components.Page { for _, p := range pages { if p.Title == title { return p } } return nil } type BaseHandler struct { db *sqlx.DB kvStore database.KeyValueStore config *config.ServerConfig logger *slog.Logger temporal client.Client store *sessions.CookieStore examples examples } func NewBaseHandler(db *sqlx.DB, kvStore database.KeyValueStore, temporal client.Client, config *config.ServerConfig, logger *slog.Logger) *BaseHandler { store := sessions.NewCookieStore([]byte(config.SessionSecret)) examples := examples{} yamlFile, err := examplesYaml.ReadFile("examples.yaml") if err != nil { panic(err) } err = yaml.Unmarshal(yamlFile, &examples) if err != nil { panic(err) } examples.Check = script.EscapeString(examples.Check) examples.Filter = script.EscapeString(examples.Filter) examples.Trigger = script.EscapeString(examples.Trigger) examples.Target = script.EscapeString(examples.Target) examples.Hook = script.EscapeString(examples.Hook) return &BaseHandler{ db: db, kvStore: kvStore, config: config, logger: logger, temporal: temporal, store: store, examples: examples, } }