Compare commits

..

4 Commits

Author SHA1 Message Date
Jonas Plum
86f4aa1d28 fix: relative day display (#1117) 2024-11-29 22:28:07 +00:00
Jonas Plum
7b92d59dff fix: relative day display (#1116) 2024-11-29 23:11:11 +01:00
Jonas Plum
6a8c92f1f6 fix: server setup (#1115) 2024-11-08 21:56:32 +01:00
Jonas Plum
9285aec468 fix: docker entrypoint permissions (#1114) 2024-11-06 02:12:09 +01:00
4 changed files with 45 additions and 41 deletions

View File

@@ -1,7 +1,6 @@
package app package app
import ( import (
"fmt"
"os" "os"
"strings" "strings"
@@ -39,47 +38,14 @@ func App(dir string, test bool) (*pocketbase.PocketBase, error) {
reaction.BindHooks(app, test) reaction.BindHooks(app, test)
app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error { app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error {
if err := MigrateDBs(e.App); err != nil { return MigrateDBs(e.App)
return err
}
if err := SetFlags(e.App, flags); err != nil {
return err
}
if HasFlag(e.App, "demo") {
bindDemoHooks(e.App)
}
if appURL != "" {
s := e.App.Settings()
s.Meta.AppUrl = appURL
if err := e.App.Dao().SaveSettings(s); err != nil {
return err
}
}
return e.App.RefreshSettings()
}) })
app.OnBeforeServe().Add(addRoutes()) app.OnBeforeServe().Add(setupServer(appURL, flags))
return app, nil return app, nil
} }
func bindDemoHooks(app core.App) {
app.OnRecordBeforeCreateRequest("files", "reactions").Add(func(e *core.RecordCreateEvent) error {
return fmt.Errorf("cannot create %s in demo mode", e.Record.Collection().Name)
})
app.OnRecordBeforeUpdateRequest("files", "reactions").Add(func(e *core.RecordUpdateEvent) error {
return fmt.Errorf("cannot update %s in demo mode", e.Record.Collection().Name)
})
app.OnRecordBeforeDeleteRequest("files", "reactions").Add(func(e *core.RecordDeleteEvent) error {
return fmt.Errorf("cannot delete %s in demo mode", e.Record.Collection().Name)
})
}
func dev() bool { func dev() bool {
return strings.HasPrefix(os.Args[0], os.TempDir()) return strings.HasPrefix(os.Args[0], os.TempDir())
} }

View File

@@ -1,6 +1,7 @@
package app package app
import ( import (
"fmt"
"net/http" "net/http"
"net/http/httputil" "net/http/httputil"
"net/url" "net/url"
@@ -12,8 +13,25 @@ import (
"github.com/SecurityBrewery/catalyst/ui" "github.com/SecurityBrewery/catalyst/ui"
) )
func addRoutes() func(*core.ServeEvent) error { func setupServer(appURL string, flags []string) func(e *core.ServeEvent) error {
return func(e *core.ServeEvent) error { return func(e *core.ServeEvent) error {
if err := SetFlags(e.App, flags); err != nil {
return err
}
if HasFlag(e.App, "demo") {
bindDemoHooks(e.App)
}
if appURL != "" {
s := e.App.Settings()
s.Meta.AppUrl = appURL
if err := e.App.Dao().SaveSettings(s); err != nil {
return err
}
}
e.Router.GET("/", func(c echo.Context) error { e.Router.GET("/", func(c echo.Context) error {
return c.Redirect(http.StatusFound, "/ui/") return c.Redirect(http.StatusFound, "/ui/")
}) })
@@ -37,10 +55,22 @@ func addRoutes() func(*core.ServeEvent) error {
}) })
}) })
return nil return e.App.RefreshSettings()
} }
} }
func bindDemoHooks(app core.App) {
app.OnRecordBeforeCreateRequest("files", "reactions").Add(func(e *core.RecordCreateEvent) error {
return fmt.Errorf("cannot create %s in demo mode", e.Record.Collection().Name)
})
app.OnRecordBeforeUpdateRequest("files", "reactions").Add(func(e *core.RecordUpdateEvent) error {
return fmt.Errorf("cannot update %s in demo mode", e.Record.Collection().Name)
})
app.OnRecordBeforeDeleteRequest("files", "reactions").Add(func(e *core.RecordDeleteEvent) error {
return fmt.Errorf("cannot delete %s in demo mode", e.Record.Collection().Name)
})
}
func staticFiles() func(echo.Context) error { func staticFiles() func(echo.Context) error {
return func(c echo.Context) error { return func(c echo.Context) error {
if dev() { if dev() {

View File

@@ -13,4 +13,6 @@ HEALTHCHECK --interval=5s --timeout=3s --retries=3 \
COPY docker/entrypoint.sh /entrypoint.sh COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"] CMD ["/entrypoint.sh"]

View File

@@ -30,8 +30,14 @@ const {
} }
}) })
const age = (ticket: Ticket) => const age = (ticket: Ticket) => {
intervalToDuration({ start: new Date(ticket.created), end: new Date() }).days const days = intervalToDuration({ start: new Date(ticket.created), end: new Date() }).days
if (!days) return 'today'
if (days === 1) return 'yesterday'
return `${days} days`
}
</script> </script>
<template> <template>
@@ -45,7 +51,7 @@ const age = (ticket: Ticket) =>
<Separator orientation="vertical" class="hidden h-4 sm:block" /> <Separator orientation="vertical" class="hidden h-4 sm:block" />
<span class="text-sm text-muted-foreground">{{ ticket.expand.type.singular }}</span> <span class="text-sm text-muted-foreground">{{ ticket.expand.type.singular }}</span>
<Separator orientation="vertical" class="hidden h-4 sm:block" /> <Separator orientation="vertical" class="hidden h-4 sm:block" />
<span class="text-sm text-muted-foreground">Open since {{ age(ticket) }} days</span> <span class="text-sm text-muted-foreground">Open since {{ age(ticket) }}</span>
<RouterLink <RouterLink
:to="{ :to="{
name: 'tickets', name: 'tickets',