From 98f50c813d06d665a6b0c0e3da6d4038f5f68cbe Mon Sep 17 00:00:00 2001 From: Namekuji Date: Wed, 4 Jan 2023 19:48:24 +0900 Subject: [PATCH] support opengraph images --- audon-fe/index.html | 36 +++++++++++++++++- audon-fe/public/static/opengraph.c05d412c.png | Bin 0 -> 38678 bytes audon-fe/src/App.vue | 10 ++--- .../audon-wordmark-white-text-isolated.svg | 1 + audon-fe/src/assets/style.css | 5 +++ audon-fe/src/views/RoomView.vue | 3 -- room.go | 16 ++++++++ server.go | 15 +++++++- 8 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 audon-fe/public/static/opengraph.c05d412c.png create mode 100644 audon-fe/src/assets/img/audon-wordmark-white-text-isolated.svg diff --git a/audon-fe/index.html b/audon-fe/index.html index 40fbc44..4abde0f 100644 --- a/audon-fe/index.html +++ b/audon-fe/index.html @@ -1,13 +1,47 @@ +{% define "tmpl" %} - + + Audon + + + + + + {% if .Room %} + + {% if .Room.Description %} + + {% else %} + + {% end %} + {% else %} + + + {% end %} + + + + + {% if .Room %} + + {% if .Room.Description %} + + {% else %} + + {% end %} + {% else %} + + + {% end %}
+{% end %} \ No newline at end of file diff --git a/audon-fe/public/static/opengraph.c05d412c.png b/audon-fe/public/static/opengraph.c05d412c.png new file mode 100644 index 0000000000000000000000000000000000000000..244047ab48cf665dd9ef21cdb6d236cefe5e4f0c GIT binary patch literal 38678 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 \ No newline at end of file diff --git a/room.go b/room.go index 9395686..69f40d5 100644 --- a/room.go +++ b/room.go @@ -152,6 +152,22 @@ func updateRoomHandler(c echo.Context) (err error) { return c.JSON(http.StatusOK, room) } +// handler for GET to /r/:id +func renderRoomHandler(c echo.Context) error { + roomID := c.Param("id") + if err := mainValidator.Var(&roomID, "required,printascii"); err != nil { + return wrapValidationError(err) + } + + room, err := findRoomByID(c.Request().Context(), roomID) + if err != nil { + return echo.NotFoundHandler(c) + } + + return c.Render(http.StatusOK, "tmpl", &TemplateData{Config: &mainConfig.AppConfigBase, Room: room}) +} + +// for preview, this bypasses authentication func previewRoomHandler(c echo.Context) (err error) { roomID := c.Param("id") if err := mainValidator.Var(&roomID, "required,printascii"); err != nil { diff --git a/server.go b/server.go index 1b467b2..05fc92b 100644 --- a/server.go +++ b/server.go @@ -32,6 +32,11 @@ type ( templates *template.Template } + TemplateData struct { + Config *AppConfigBase + Room *Room + } + CustomValidator struct { validator *validator.Validate } @@ -100,6 +105,9 @@ func main() { defer e.Close() e.Validator = &CustomValidator{validator: mainValidator} + e.Renderer = &Template{ + templates: template.Must(template.New("tmpl").Delims("{%", "%}").ParseGlob("audon-fe/dist/index.html")), + } // Setup session middleware (currently Audon stores all client data in cookie) log.Println("Connecting to Redis") @@ -151,7 +159,12 @@ func main() { api.PUT("/room/:room/:user", updatePermissionHandler) e.Static("/assets", "audon-fe/dist/assets") - e.File("/*", "audon-fe/dist/index.html") + e.Static("/static", "audon-fe/dist/static") + e.GET("/r/:id", renderRoomHandler) + e.GET("/*", func(c echo.Context) error { + return c.Render(http.StatusOK, "tmpl", &TemplateData{Config: &mainConfig.AppConfigBase}) + }) + // e.File("/*", "audon-fe/dist/index.html") // use anonymous func to support graceful shutdown go func() {