package config import ( "html/template" "log" "strconv" "time" "github.com/dmitriygnatenko/internal/interfaces" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html" ) const ( appName = "dmitriygnatenko" templatesPath = "./../../internal/templates" ) func Init(app interfaces.IApp) fiber.Config { return fiber.Config{ AppName: appName, DisableStartupMessage: true, Views: initEngine(app.GetEnvService()), ErrorHandler: initErrorHandler(app), } } //nolint func initEngine(env interfaces.IEnv) *html.Engine { engine := html.New(templatesPath, ".html") engine.AddFunc("now", func() time.Time { return time.Now() }) engine.AddFunc("noescape", func(str string) template.HTML { return template.HTML(str) }) engine.AddFunc("gridsep", func(i, l int) bool { i++ return i%3 == 0 && i != l }) engine.AddFunc("version", func() string { return env.GetStaticVersion() }) engine.AddFunc("ga", func() bool { return env.IsGAEnabled() }) return engine } func initErrorHandler(app interfaces.IApp) fiber.ErrorHandler { return func(ctx *fiber.Ctx, err error) error { errCode := fiber.StatusInternalServerError errText := err.Error() if e, ok := err.(*fiber.Error); ok { errCode = e.Code } var renderData fiber.Map if errCode == fiber.StatusNotFound { renderData = fiber.Map{ "pageTitle": "Страница не найдена", "code": fiber.StatusNotFound, "text": "Запрашиваемая вами страница не найдена", } } else { renderData = fiber.Map{ "pageTitle": "Внутренняя ошибка", "code": fiber.StatusInternalServerError, "text": "Внутренняя ошибка сервера, идем исправлять...", } if errText != "" { sendErr := app.GetMailerService().Send( app.GetEnvService().GetAdminEmail(), "Ошибка на сайте dmitriygnatenko.ru", "Код: "+strconv.Itoa(errCode)+"\r\n"+"Текст: "+errText, ) if sendErr != nil { log.Print(sendErr) } } } renderData["headTitle"] = "От слона к суслику - статьи про PHP, Go, алгоритмы" return ctx.Render("error", renderData, "_layout") } }