settings.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package core
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/jmoiron/sqlx/types"
  6. "github.com/knadh/listmonk/models"
  7. "github.com/labstack/echo/v4"
  8. )
  9. // GetSettings returns settings from the DB.
  10. func (c *Core) GetSettings() (models.Settings, error) {
  11. var (
  12. b types.JSONText
  13. out models.Settings
  14. )
  15. if err := c.q.GetSettings.Get(&b); err != nil {
  16. return out, echo.NewHTTPError(http.StatusInternalServerError,
  17. c.i18n.Ts("globals.messages.errorFetching",
  18. "name", "{globals.terms.settings}", "error", pqErrMsg(err)))
  19. }
  20. // Unmarshal the settings and filter out sensitive fields.
  21. if err := json.Unmarshal([]byte(b), &out); err != nil {
  22. return out, echo.NewHTTPError(http.StatusInternalServerError,
  23. c.i18n.Ts("settings.errorEncoding", "error", err.Error()))
  24. }
  25. return out, nil
  26. }
  27. // UpdateSettings updates settings.
  28. func (c *Core) UpdateSettings(s models.Settings) error {
  29. // Marshal settings.
  30. b, err := json.Marshal(s)
  31. if err != nil {
  32. return echo.NewHTTPError(http.StatusInternalServerError,
  33. c.i18n.Ts("settings.errorEncoding", "error", err.Error()))
  34. }
  35. // Update the settings in the DB.
  36. if _, err := c.q.UpdateSettings.Exec(b); err != nil {
  37. return echo.NewHTTPError(http.StatusInternalServerError,
  38. c.i18n.Ts("globals.messages.errorUpdating", "name", "{globals.terms.settings}", "error", pqErrMsg(err)))
  39. }
  40. return nil
  41. }