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:
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 == "" {