dkforest

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

commit 1892085e29d84d7487843220d832b2ed3a227071
parent 5239e78433d0d4fd156a06f234730c63462f3176
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu, 19 Jan 2023 18:02:29 -0800

fix unlocking PM with users that have less than 20 public msgs with whitelist

Diffstat:
Mpkg/web/handlers/api/v1/slashInterceptor.go | 68+++++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 37 insertions(+), 31 deletions(-)

diff --git a/pkg/web/handlers/api/v1/slashInterceptor.go b/pkg/web/handlers/api/v1/slashInterceptor.go @@ -841,30 +841,32 @@ func handlePMCmd(c *Command) (handled bool) { c.err = errors.New("invalid username") return true } - if user.PmMode == database.PmModeWhitelist && !database.IsUserPmWhitelisted(c.authUser.ID, user.ID) { - c.err = ErrPMDenied - return true - } else if user.PmMode == database.PmModeStandard { - if !c.authUser.CanSendPM() { - if c.room.IsOwned() { - // In private rooms, can send PM but inboxes will be skipped if not enough karma - c.skipInboxes = true - } else { - // Need at least 1 karma to send PM from a public room - c.err = errors.New(`you need 20 public messages to unlock PMs; or be whitelisted`) - return true - } - } - - if database.IsUserPmBlacklisted(c.authUser.ID, user.ID) { - c.err = ErrPMDenied - return true - } else if user.BlockNewUsersPm && !c.authUser.AccountOldEnough() && !database.IsUserPmWhitelisted(c.authUser.ID, user.ID) { + if !database.IsUserPmWhitelisted(c.authUser.ID, user.ID) { + if user.PmMode == database.PmModeWhitelist { c.err = ErrPMDenied return true + } else if user.PmMode == database.PmModeStandard { + if !c.authUser.CanSendPM() { + if c.room.IsOwned() { + // In private rooms, can send PM but inboxes will be skipped if not enough karma + c.skipInboxes = true + } else { + // Need at least 1 karma to send PM from a public room + c.err = errors.New(`you need 20 public messages to unlock PMs; or be whitelisted`) + return true + } + } + if database.IsUserPmBlacklisted(c.authUser.ID, user.ID) { + c.err = ErrPMDenied + return true + } else if !c.authUser.AccountOldEnough() && user.BlockNewUsersPm { + c.err = ErrPMDenied + return true + } } } + if user.ID == c.authUser.ID { c.err = errors.New("cannot /pm yourself") return true @@ -1122,22 +1124,26 @@ func handleInboxCmd(c *Command) (handled bool) { c.err = errors.New("invalid username") return true } - if toUser.PmMode == database.PmModeWhitelist && !database.IsUserPmWhitelisted(c.authUser.ID, toUser.ID) { - c.err = errors.New("you cannot inbox this user") - return true - } else if toUser.PmMode == database.PmModeStandard { - if !c.authUser.CanSendPM() { - c.err = errors.New("you need 20 public messages to unlock inboxes; or be whitelisted") - return true - } - if database.IsUserPmBlacklisted(c.authUser.ID, toUser.ID) { - c.err = errors.New("you cannot inbox this user") - return true - } else if !c.authUser.AccountOldEnough() && toUser.BlockNewUsersPm && !database.IsUserPmWhitelisted(c.authUser.ID, toUser.ID) { + + if !database.IsUserPmWhitelisted(c.authUser.ID, toUser.ID) { + if toUser.PmMode == database.PmModeWhitelist { c.err = errors.New("you cannot inbox this user") return true + } else if toUser.PmMode == database.PmModeStandard { + if !c.authUser.CanSendPM() { + c.err = errors.New("you need 20 public messages to unlock inboxes; or be whitelisted") + return true + } + if database.IsUserPmBlacklisted(c.authUser.ID, toUser.ID) { + c.err = errors.New("you cannot inbox this user") + return true + } else if !c.authUser.AccountOldEnough() && toUser.BlockNewUsersPm { + c.err = errors.New("you cannot inbox this user") + return true + } } } + html := message if tryEncrypt { if toUser.GPGPublicKey == "" {