From 00ef003be965cca55c75b833a3baa24b181e6d39 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 6 Apr 2025 14:30:45 +0800 Subject: [PATCH] :sparkles: Meet room rendering --- .gitignore | 1 + pkg/internal/web/api/index.go | 1 + pkg/internal/web/api/meet.go | 55 ++++++++++++++++++++++++ settings.toml | 2 + templates/meet.tmpl | 78 +++++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+) create mode 100644 pkg/internal/web/api/meet.go create mode 100644 templates/meet.tmpl diff --git a/.gitignore b/.gitignore index d91bc37..95758c5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /default.etcd /keys +.idea .DS_Store \ No newline at end of file diff --git a/pkg/internal/web/api/index.go b/pkg/internal/web/api/index.go index a39b6e9..7423fbf 100644 --- a/pkg/internal/web/api/index.go +++ b/pkg/internal/web/api/index.go @@ -12,6 +12,7 @@ import ( ) func MapControllers(app *fiber.App) { + app.Get("/meet", renderMeetRoom) app.Get("/captcha", renderCaptcha) app.Post("/captcha", validateCaptcha) app.Get("/check-ip", getClientIP) diff --git a/pkg/internal/web/api/meet.go b/pkg/internal/web/api/meet.go new file mode 100644 index 0000000..72448ed --- /dev/null +++ b/pkg/internal/web/api/meet.go @@ -0,0 +1,55 @@ +package api + +import ( + "fmt" + "git.solsynth.dev/hypernet/nexus/pkg/nex/sec" + "github.com/gofiber/fiber/v2" + "github.com/spf13/viper" + "strings" +) + +type meetRoomArgs struct { + RoomName string `json:"room_name"` + User meetRoomUser `json:"user"` +} + +type meetRoomUser struct { + Avatar string `json:"avatar"` + Nick string `json:"nick"` +} + +func renderMeetRoom(c *fiber.Ctx) error { + if err := sec.EnsureAuthenticated(c); err != nil { + return err + } + user := c.Locals("nex_user").(*sec.UserInfo) + + channel := c.Params("channel") + + var nick string + if val, ok := user.Metadata["nick"].(string); ok { + nick = val + } else { + nick = user.Name + } + var avatar string + if val, ok := user.Metadata["avatar"].(string); ok { + if strings.HasPrefix(val, "http") { + avatar = val + } else { + endpoint := viper.GetString("resources_endpoint") + avatar = fmt.Sprintf("%s/attachments/%s", endpoint, val) + } + avatar = fmt.Sprintf("\"%s\"", avatar) // Make the avatar a string to embed into the js + } else { + avatar = "undefined" + } + + return c.Render("meet", meetRoomArgs{ + RoomName: fmt.Sprintf("%s-%s", "sn-chat", channel), + User: meetRoomUser{ + Avatar: avatar, + Nick: nick, + }, + }) +} diff --git a/settings.toml b/settings.toml index b87695d..61a8e38 100644 --- a/settings.toml +++ b/settings.toml @@ -2,6 +2,8 @@ bind = "0.0.0.0:8001" grpc_bind = "0.0.0.0:7001" domain = "localhost" +resources_endpoint = "https://api.sn.solsynth.dev/cgi/uc" + templates_dir = "./templates" ip_block_path = "./ip_block.list" diff --git a/templates/meet.tmpl b/templates/meet.tmpl new file mode 100644 index 0000000..901fd36 --- /dev/null +++ b/templates/meet.tmpl @@ -0,0 +1,78 @@ + + + + + + Solar Network Captcha + + + + + +
+
+
+
+ + +