dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit cfddc9dac3f949111c67373831db4dffac3046db
parent 31857e21a3f13d0b0b0d107b2568c59bb460d1ad
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 10 Jan 2023 20:07:48 -0800

add external link for room

Diffstat:
Acmd/dkf/migrations/119.sql | 4++++
Mpkg/database/tableChatRooms.go | 21+++++++++++----------
Mpkg/web/handlers/api/v1/handlers.go | 1+
Mpkg/web/handlers/api/v1/slashInterceptor.go | 19++++++++++++++++++-
Mpkg/web/public/views/pages/chat.gohtml | 5++++-
5 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/cmd/dkf/migrations/119.sql b/cmd/dkf/migrations/119.sql @@ -0,0 +1,4 @@ +-- +migrate Up +ALTER TABLE chat_rooms ADD COLUMN external_link VARCHAR(255) NOT NULL DEFAULT ''; + +-- +migrate Down diff --git a/pkg/database/tableChatRooms.go b/pkg/database/tableChatRooms.go @@ -11,16 +11,17 @@ import ( type RoomID int64 type ChatRoom struct { - ID RoomID - Name string - OwnerUserID *UserID - Password string // Hashed password (sha512) - IsListed bool - IsEphemeral bool - CreatedAt time.Time - OwnerUser *User - ReadRecord *ChatReadRecord - Mode int64 + ID RoomID + Name string + ExternalLink string + OwnerUserID *UserID + Password string // Hashed password (sha512) + IsListed bool + IsEphemeral bool + CreatedAt time.Time + OwnerUser *User + ReadRecord *ChatReadRecord + Mode int64 } const ( diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -46,6 +46,7 @@ var chessRgx = regexp.MustCompile(`^/chess ` + optAtGUser) var inboxRgx = regexp.MustCompile(`^/inbox ` + optAtGUser + `(\s-e)?\s(?s:(.*))`) var profileRgx = regexp.MustCompile(`^/p ` + optAtGUserOr0) var kickRgx = regexp.MustCompile(`^/(?:kick|k) ` + optAtGUser) +var setUrlRgx = regexp.MustCompile(`^/seturl (.+)`) var kickKeepRgx = regexp.MustCompile(`^/(?:kk) ` + optAtGUser) var kickSilentRgx = regexp.MustCompile(`^/(?:ks) ` + optAtGUser) var kickKeepSilentRgx = regexp.MustCompile(`^/(?:kks) ` + optAtGUser) diff --git a/pkg/web/handlers/api/v1/slashInterceptor.go b/pkg/web/handlers/api/v1/slashInterceptor.go @@ -123,7 +123,8 @@ func handleModeratorCmd(c *Command) (handled bool) { func handleAdminCmd(c *Command) (handled bool) { if c.authUser.IsAdmin { - return handleSystemCmd(c) + return handleSystemCmd(c) || + handleSetChatRoomExternalLink(c) } return false } @@ -1391,3 +1392,19 @@ func handleSystemCmd(c *Command) (handled bool) { } return false } + +func handleSetChatRoomExternalLink(c *Command) (handled bool) { + if m := setUrlRgx.FindStringSubmatch(c.message); len(m) == 2 { + externalURL := m[1] + room, err := database.GetChatRoomByID(c.room.ID) + if err != nil { + c.err = err + return true + } + room.ExternalLink = externalURL + room.DoSave() + c.err = ErrRedirect + return true + } + return +} diff --git a/pkg/web/public/views/pages/chat.gohtml b/pkg/web/public/views/pages/chat.gohtml @@ -161,7 +161,10 @@ </div> {{ end }} <div> - > {{ t "Room" . }} #{{ .Data.Room.Name }} + <span>&gt; {{ t "Room" . }} #{{ .Data.Room.Name }}</span> + {{ if .Data.Room.ExternalLink }} + <span class="pl-3"><a href="{{ .Data.Room.ExternalLink }}" rel="noopener noreferrer" target="_blank">{{ .Data.Room.ExternalLink }}</a></span> + {{ end }} <div style="padding-left: 30px;" class="d-inline"> <!-- {{ if and .Data.Room.OwnerUserID (eq (derefUserID .Data.Room.OwnerUserID) .AuthUser.ID) }}--> <!-- <a href="/chat/{{ .Data.Room.Name }}/settings" class="btn btn-xs btn-secondary">{{ t "Room settings" . }}</a>-->