config.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package config
  2. import (
  3. "html/template"
  4. "log"
  5. "strconv"
  6. "time"
  7. "github.com/dmitriygnatenko/internal/interfaces"
  8. "github.com/gofiber/fiber/v2"
  9. "github.com/gofiber/template/html"
  10. )
  11. const (
  12. appName = "dmitriygnatenko"
  13. templatesPath = "./../../internal/templates"
  14. )
  15. func Init(app interfaces.IApp) fiber.Config {
  16. return fiber.Config{
  17. AppName: appName,
  18. DisableStartupMessage: true,
  19. Views: initEngine(app.GetEnvService()),
  20. ErrorHandler: initErrorHandler(app),
  21. }
  22. }
  23. //nolint
  24. func initEngine(env interfaces.IEnv) *html.Engine {
  25. engine := html.New(templatesPath, ".html")
  26. engine.AddFunc("now", func() time.Time {
  27. return time.Now()
  28. })
  29. engine.AddFunc("noescape", func(str string) template.HTML {
  30. return template.HTML(str)
  31. })
  32. engine.AddFunc("gridsep", func(i, l int) bool {
  33. i++
  34. return i%3 == 0 && i != l
  35. })
  36. engine.AddFunc("version", func() string {
  37. return env.GetStaticVersion()
  38. })
  39. engine.AddFunc("ga", func() bool {
  40. return env.IsGAEnabled()
  41. })
  42. return engine
  43. }
  44. func initErrorHandler(app interfaces.IApp) fiber.ErrorHandler {
  45. return func(ctx *fiber.Ctx, err error) error {
  46. errCode := fiber.StatusInternalServerError
  47. errText := err.Error()
  48. if e, ok := err.(*fiber.Error); ok {
  49. errCode = e.Code
  50. }
  51. var renderData fiber.Map
  52. if errCode == fiber.StatusNotFound {
  53. renderData = fiber.Map{
  54. "pageTitle": "Страница не найдена",
  55. "code": fiber.StatusNotFound,
  56. "text": "Запрашиваемая вами страница не найдена",
  57. }
  58. } else {
  59. renderData = fiber.Map{
  60. "pageTitle": "Внутренняя ошибка",
  61. "code": fiber.StatusInternalServerError,
  62. "text": "Внутренняя ошибка сервера, идем исправлять...",
  63. }
  64. if errText != "" {
  65. sendErr := app.GetMailerService().Send(
  66. app.GetEnvService().GetAdminEmail(),
  67. "Ошибка на сайте dmitriygnatenko.ru",
  68. "Код: "+strconv.Itoa(errCode)+"\r\n"+"Текст: "+errText,
  69. )
  70. if sendErr != nil {
  71. log.Print(sendErr)
  72. }
  73. }
  74. }
  75. renderData["headTitle"] = "От слона к суслику - статьи про PHP, Go, алгоритмы"
  76. return ctx.Render("error", renderData, "_layout")
  77. }
  78. }