1package handler
2
3import (
4 "fmt"
5
6 "net/http"
7
8 "github.com/bnema/gordon/internal/server"
9 "github.com/bnema/gordon/internal/templating/render"
10 "github.com/labstack/echo/v4"
11)
12
13var (
14 mainPath = "html/admin"
15 fragmentsPath = "html/fragments"
16)
17
18// GetLocalizedData returns the data for the localization
19func GetLocalizedData(c echo.Context, a *server.App) (map[string]interface{}, error) {
20 lang := c.Get("LangKey")
21 if lang == nil {
22 return nil, fmt.Errorf("LangKey not found in context")
23 }
24
25 yamlData, err := render.GetLocalization(lang.(string), a)
26 if err != nil {
27 return nil, fmt.Errorf("failed to get localization: %w", err)
28 }
29 return map[string]interface{}{
30 "Lang": yamlData,
31 "LogoutURL": a.Config.Admin.Path + "/logout",
32 "AdminPath": a.Config.Admin.Path,
33 }, nil
34}
35
36// renderAdminPage is a generalized function to render admin pages
37func renderAdminPage(c echo.Context, a *server.App, templateName string) error {
38 data, err := GetLocalizedData(c, a)
39 if err != nil {
40 return err
41 }
42
43 data["AdminPath"] = a.Config.Admin.Path
44 // DEBUG show the admin path here
45 fmt.Println("AdminPath:", a.Config.Admin.Path)
46
47 rendererData, err := render.GetHTMLRenderer(mainPath, templateName, a.TemplateFS, a, fragmentsPath)
48 if err != nil {
49 return err
50 }
51
52 renderedHTML, err := rendererData.Render(data, a)
53 if err != nil {
54 return err
55 }
56
57 return c.HTML(http.StatusOK, renderedHTML)
58}
59
60// AdminRoute is the route for the admin panel
61func AdminRoute(c echo.Context, a *server.App) error {
62 return renderAdminPage(c, a, "index.gohtml")
63}
64
65// AdminManagerRoute is the route of the manager page
66func AdminManagerRoute(c echo.Context, a *server.App) error {
67 return renderAdminPage(c, a, "manager.gohtml")
68}