dkforest

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

commit e2764bafae6e7e0c7ba929a9108392b29c3c72a2
parent 135e76e063a7e4b1443bea39d4b131864b47d59f
Author: Fox <LightFox@home.com>
Date:   Wed, 19 Feb 2025 11:14:23 -0800

Your commit message

Diffstat:
Mpkg/database/tableChatMessages.go | 65++++++++++++++++++++++++++++++++---------------------------------
Mpkg/database/utils/utils.go | 4+---
Mpkg/web/handlers/interceptors/battleship.go | 4++--
Mpkg/web/handlers/interceptors/chess.go | 2+-
Mpkg/web/handlers/interceptors/slashInterceptor.go | 44++++++++++++++++++++++++++++++++++++++++++++
Mpkg/web/handlers/interceptors/werewolf.go | 3+--
Mpkg/web/handlers/signup.go | 12++++++------
7 files changed, 87 insertions(+), 47 deletions(-)

diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go @@ -559,14 +559,13 @@ AND room_id = ? } func makeMsg(raw, txt string, roomID RoomID, userID UserID) ChatMessage { - msg := ChatMessage{ + return ChatMessage{ UUID: uuid.New().String(), Message: txt, RawMessage: raw, RoomID: roomID, UserID: userID, } - return msg } func (d *DkfDB) CreateMsg(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, hellbanMsg bool) (out ChatMessage, err error) { @@ -574,7 +573,7 @@ func (d *DkfDB) CreateMsg(raw, txt, roomKey string, roomID RoomID, userID UserID } func (d *DkfDB) CreateSysMsg(raw, txt, roomKey string, roomID RoomID, userID UserID) error { - return utils.Second(d.createMsg(raw, txt, roomKey, roomID, userID, nil, false, true, false)) + return d.CreateSysMsgPM(raw, txt, roomKey, roomID, userID, nil, false) } func (d *DkfDB) CreateSysMsgPM(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, skipNotify bool) error { @@ -582,35 +581,28 @@ func (d *DkfDB) CreateSysMsgPM(raw, txt, roomKey string, roomID RoomID, userID U } func (d *DkfDB) CreateKickMsg(kickedUser, kickedByUser User) { - // Display kick message - styledUsername := fmt.Sprintf(`<span %s>%s</span>`, kickedUser.GenerateChatStyle(), kickedUser.Username) - rawTxt := fmt.Sprintf("%s has been kicked. (%s)", kickedUser.Username, kickedByUser.Username) - txt := fmt.Sprintf("%s has been kicked. (%s)", styledUsername, kickedByUser.Username) - utils.LogErr(d.CreateSysMsg(rawTxt, txt, "", config.GeneralRoomID, kickedByUser.ID)) + d.createKickMsg(kickedUser, kickedByUser, "%s has been kicked. (%s)") } func (d *DkfDB) CreateUnkickMsg(kickedUser, kickedByUser User) { - // Display unkick message + d.createKickMsg(kickedUser, kickedByUser, "%s has been unkicked. (%s)") +} + +func (d *DkfDB) createKickMsg(kickedUser, kickedByUser User, format string) { styledUsername := fmt.Sprintf(`<span %s>%s</span>`, kickedUser.GenerateChatStyle(), kickedUser.Username) - rawTxt := fmt.Sprintf("%s has been unkicked. (%s)", kickedUser.Username, kickedByUser.Username) - txt := fmt.Sprintf("%s has been unkicked. (%s)", styledUsername, kickedByUser.Username) + rawTxt := fmt.Sprintf(format, kickedUser.Username, kickedByUser.Username) + txt := fmt.Sprintf(format, styledUsername, kickedByUser.Username) utils.LogErr(d.CreateSysMsg(rawTxt, txt, "", config.GeneralRoomID, kickedByUser.ID)) } func (d *DkfDB) createMsg(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, hellbanMsg, system, skipNotify bool) (out ChatMessage, err error) { - if roomKey != "" { - var err error - txt, raw, err = encryptMessages(txt, raw, roomKey) - if err != nil { - return out, err - } + txt, raw, err = encryptWithRoomKey(txt, raw, roomKey) + if err != nil { + return } - out = makeMsg(raw, txt, roomID, userID) out.SkipNotify = skipNotify - if toUserID != nil { - out.ToUserID = toUserID - } + out.ToUserID = toUserID out.IsHellbanned = hellbanMsg out.System = system err = d.db.Create(&out).Error @@ -628,12 +620,10 @@ func (d *DkfDB) CreateOrEditMessage( groupID *GroupID, hellbanMsg, modMsg, systemMsg bool) (int64, error) { - if roomKey != "" { - var err error - message, raw, err = encryptMessages(message, raw, roomKey) - if err != nil { - return 0, err - } + var err error + message, raw, err = encryptWithRoomKey(message, raw, roomKey) + if err != nil { + return 0, err } typ := CreateMsg @@ -657,8 +647,16 @@ func (d *DkfDB) CreateOrEditMessage( editMsg.UploadID = &upload.ID } } + + addFullscreenLinkToCodeBlocks(editMsg) + editMsg.DoSave(d) + MsgPubSub.Pub("room_"+roomID.String(), ChatMessageType{Typ: typ, Msg: *editMsg}) + return editMsg.ID, nil +} + +func addFullscreenLinkToCodeBlocks(editMsg *ChatMessage) { i := 0 rgx := regexp.MustCompile(`</pre>`) editMsg.Message = rgx.ReplaceAllStringFunc(editMsg.Message, func(s string) string { @@ -666,12 +664,13 @@ func (d *DkfDB) CreateOrEditMessage( return fmt.Sprintf(`</pre><a href="/chat-code/%s/%d" title="Open in fullscreen" rel="noopener noreferrer" target="_blank" class=fullscreen>&#9974;</a>`, editMsg.UUID, i-1) }) - if i > 0 { - editMsg.DoSave(d) - } +} - MsgPubSub.Pub("room_"+roomID.String(), ChatMessageType{Typ: typ, Msg: *editMsg}) - return editMsg.ID, nil +func encryptWithRoomKey(txt, raw string, roomKey string) (string, string, error) { + if roomKey == "" { + return txt, raw, nil + } + return encryptMessages(txt, raw, roomKey) } type PubSubMessageType int @@ -711,7 +710,7 @@ func encryptMessages(html, origMessage, roomKey string) (string, string, error) if err != nil { return "", "", err } - return html, origMessage, err + return html, origMessage, nil } func encryptMessage(roomKey, msg string) (string, error) { diff --git a/pkg/database/utils/utils.go b/pkg/database/utils/utils.go @@ -13,9 +13,7 @@ import ( func GetZeroUser(db *database.DkfDB) database.User { zeroUser, err := db.GetUserByUsername(config.NullUsername) - if err != nil { - logrus.Error(err) - } + utils.LogErr(err) return zeroUser } diff --git a/pkg/web/handlers/interceptors/battleship.go b/pkg/web/handlers/interceptors/battleship.go @@ -2,8 +2,8 @@ package interceptors import ( "bytes" - "dkforest/pkg/config" "dkforest/pkg/database" + dutils "dkforest/pkg/database/utils" "dkforest/pkg/utils" "dkforest/pkg/web/handlers/interceptors/command" "encoding/base64" @@ -220,7 +220,7 @@ type Battleship struct { } func NewBattleship(db *database.DkfDB) *Battleship { - zeroUser, _ := db.GetUserByUsername(config.NullUsername) + zeroUser := dutils.GetZeroUser(db) b := &Battleship{db: db, zeroID: zeroUser.ID} b.games = make(map[string]*BSGame) diff --git a/pkg/web/handlers/interceptors/chess.go b/pkg/web/handlers/interceptors/chess.go @@ -133,7 +133,7 @@ type Chess struct { } func NewChess(db *database.DkfDB) *Chess { - zeroUser, _ := db.GetUserByUsername(config.NullUsername) + zeroUser := dutils.GetZeroUser(db) c := &Chess{db: db, zeroID: zeroUser.ID} c.games = make(map[string]*ChessGame) diff --git a/pkg/web/handlers/interceptors/slashInterceptor.go b/pkg/web/handlers/interceptors/slashInterceptor.go @@ -21,6 +21,7 @@ import ( "html" "os" "path/filepath" + "regexp" "sort" "strconv" "strings" @@ -80,6 +81,7 @@ var userCmdsMap = map[string]CmdHandler{ "/sha256": handleSha256Cmd, "/sha512": handleSha512Cmd, "/dice": handleDiceCmd, + "/invite": handleInviteCmd, "/rand": handleRandCmd, "/choice": handleChoiceCmd, "/memes": handleListMemes, @@ -535,6 +537,48 @@ func handleDiceCmd(c *command.Command) (handled bool) { return } +func handleInviteCmd(c *command.Command) (handled bool) { + + if !c.AuthUser.IsAdmin || !c.AuthUser.IsModerator() { + return + } + + if strings.HasPrefix(c.Message, "/invite") { + text := c.Message + getUserName := regexp.MustCompile(`@\w+`) + matchUserName := getUserName.FindAllString(text, -1) + user := matchUserName[0] + RemoveAtFromUserName := strings.ReplaceAll(user, "@", "") + sendTouser, _ := c.DB.GetUserByUsername(database.Username(RemoveAtFromUserName)) + + getNumberOfInvites := regexp.MustCompile(`@\w+\s(\d+)`) + match := getNumberOfInvites.FindStringSubmatch(text) + numberOfInvites := 0 + number, err := strconv.Atoi(match[1]) + if err == nil { + numberOfInvites = number + } + if err != nil { + fmt.Println("error") + numberOfInvites = 1 + } + fmt.Println(numberOfInvites) + for i := 0; i < numberOfInvites; i++ { + inviteToken, _ := c.DB.CreateInvitation(c.AuthUser.ID) + msg := fmt.Sprintf(`your Invite token from @%s . "<span style="color: Aqua;">%s</span>"`, c.AuthUser.Username, inviteToken.Token) + msg, _ = dutils.ColorifyTaggedUsers(msg, c.DB.GetUsersByUsername) + + go func() { + time.Sleep(time.Second) + c.ZeroMsgToUser(&sendTouser, msg) + + }() + } + return true + } + return +} + func handleRandCmd(c *command.Command) (handled bool) { if strings.HasPrefix(c.Message, "/rand") { minV := 1 diff --git a/pkg/web/handlers/interceptors/werewolf.go b/pkg/web/handlers/interceptors/werewolf.go @@ -3,7 +3,6 @@ package interceptors import ( "bytes" "context" - "dkforest/pkg/config" "dkforest/pkg/database" dutils "dkforest/pkg/database/utils" "dkforest/pkg/hashset" @@ -683,7 +682,7 @@ func NewWerewolf(db *database.DkfDB) *Werewolf { logrus.Error("#werewolf room not found") return nil } - zeroUser, _ := db.GetUserByUsername(config.NullUsername) + zeroUser := dutils.GetZeroUser(db) _ = db.DeleteChatRoomGroups(room.ID) werewolfGroup, _ := db.CreateChatRoomGroup(room.ID, "werewolf", "#ffffff") werewolfGroup.Locked = true diff --git a/pkg/web/handlers/signup.go b/pkg/web/handlers/signup.go @@ -6,6 +6,7 @@ import ( "dkforest/pkg/captcha" "dkforest/pkg/config" "dkforest/pkg/database" + dutils "dkforest/pkg/database/utils" "dkforest/pkg/utils" hutils "dkforest/pkg/web/handlers/utils" "encoding/json" @@ -181,13 +182,12 @@ func signupHandler(c echo.Context) error { settings.SignupEnabled = false settings.DoSave(db) config.SignupEnabled.SetFalse() - if userNull, err := db.GetUserByUsername(config.NullUsername); err == nil { - db.NewAudit(userNull, fmt.Sprintf("auto turn off signup")) + userNull := dutils.GetZeroUser(db) + db.NewAudit(userNull, fmt.Sprintf("auto turn off signup")) - // Display message in chat - txt := fmt.Sprintf("auto turn off registrations") - utils.LogErr(db.CreateSysMsg(txt, txt, "", config.GeneralRoomID, userNull.ID)) - } + // Display message in chat + txt := fmt.Sprintf("auto turn off registrations") + utils.LogErr(db.CreateSysMsg(txt, txt, "", config.GeneralRoomID, userNull.ID)) } c.SetCookie(hutils.DeleteCookie(hutils.WaitCookieName))