b950d2f4ff
The earlier approach of loading `/api/config.js` as a script on initial page load with the necessary variables to init the UI is ditched. Instead, it's now `/api/config` and `/api/settings` like all other API calls. On load of the frontend, these two resources are fetched and the frontend is initialised.
96 lines
2.4 KiB
Go
96 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"sort"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/jmoiron/sqlx/types"
|
|
"github.com/labstack/echo"
|
|
)
|
|
|
|
type serverConfig struct {
|
|
Messengers []string `json:"messengers"`
|
|
Langs []i18nLang `json:"langs"`
|
|
Lang string `json:"lang"`
|
|
Update *AppUpdate `json:"update"`
|
|
NeedsRestart bool `json:"needs_restart"`
|
|
}
|
|
|
|
// handleGetServerConfig returns general server config.
|
|
func handleGetServerConfig(c echo.Context) error {
|
|
var (
|
|
app = c.Get("app").(*App)
|
|
out = serverConfig{}
|
|
)
|
|
|
|
// Language list.
|
|
langList, err := getI18nLangList(app.constants.Lang, app)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusInternalServerError,
|
|
fmt.Sprintf("Error loading language list: %v", err))
|
|
}
|
|
out.Langs = langList
|
|
out.Lang = app.constants.Lang
|
|
|
|
// Sort messenger names with `email` always as the first item.
|
|
var names []string
|
|
for name := range app.messengers {
|
|
if name == emailMsgr {
|
|
continue
|
|
}
|
|
names = append(names, name)
|
|
}
|
|
sort.Strings(names)
|
|
out.Messengers = append(out.Messengers, emailMsgr)
|
|
out.Messengers = append(out.Messengers, names...)
|
|
|
|
app.Lock()
|
|
out.NeedsRestart = app.needsRestart
|
|
out.Update = app.update
|
|
app.Unlock()
|
|
|
|
return c.JSON(http.StatusOK, okResp{out})
|
|
}
|
|
|
|
// handleGetDashboardCharts returns chart data points to render ont he dashboard.
|
|
func handleGetDashboardCharts(c echo.Context) error {
|
|
var (
|
|
app = c.Get("app").(*App)
|
|
out types.JSONText
|
|
)
|
|
|
|
if err := app.queries.GetDashboardCharts.Get(&out); err != nil {
|
|
return echo.NewHTTPError(http.StatusInternalServerError,
|
|
app.i18n.Ts("globals.messages.errorFetching", "name", "dashboard charts", "error", pqErrMsg(err)))
|
|
}
|
|
|
|
return c.JSON(http.StatusOK, okResp{out})
|
|
}
|
|
|
|
// handleGetDashboardCounts returns stats counts to show on the dashboard.
|
|
func handleGetDashboardCounts(c echo.Context) error {
|
|
var (
|
|
app = c.Get("app").(*App)
|
|
out types.JSONText
|
|
)
|
|
|
|
if err := app.queries.GetDashboardCounts.Get(&out); err != nil {
|
|
return echo.NewHTTPError(http.StatusInternalServerError,
|
|
app.i18n.Ts("globals.messages.errorFetching", "name", "dashboard stats", "error", pqErrMsg(err)))
|
|
}
|
|
|
|
return c.JSON(http.StatusOK, okResp{out})
|
|
}
|
|
|
|
// handleReloadApp restarts the app.
|
|
func handleReloadApp(c echo.Context) error {
|
|
app := c.Get("app").(*App)
|
|
go func() {
|
|
<-time.After(time.Millisecond * 500)
|
|
app.sigChan <- syscall.SIGHUP
|
|
}()
|
|
return c.JSON(http.StatusOK, okResp{true})
|
|
}
|