@@ -9,21 +9,24 @@ import (
99
1010 codedata "github.com/code-payments/code-server/pkg/code/data"
1111
12+ "github.com/code-payments/flipchat-server/account"
1213 "github.com/code-payments/flipchat-server/chat"
1314 "github.com/code-payments/flipchat-server/intent"
1415 "github.com/code-payments/flipchat-server/messaging"
1516)
1617
1718// todo: this needs more extensive testing
1819type MessagingAuthorizer struct {
20+ accounts account.Store
1921 chats chat.Store
2022 intents intent.Store
2123 messages messaging.MessageStore
2224 codeData codedata.Provider
2325}
2426
25- func NewMessagingRpcAuthorizer (chats chat.Store , intents intent.Store , messages messaging.MessageStore , codeData codedata.Provider ) * MessagingAuthorizer {
27+ func NewMessagingRpcAuthorizer (accounts account. Store , chats chat.Store , intents intent.Store , messages messaging.MessageStore , codeData codedata.Provider ) * MessagingAuthorizer {
2628 return & MessagingAuthorizer {
29+ accounts : accounts ,
2730 chats : chats ,
2831 intents : intents ,
2932 messages : messages ,
@@ -52,6 +55,24 @@ func (a *MessagingAuthorizer) CanSendMessage(ctx context.Context, chatID *common
5255 return false , "" , err
5356 }
5457
58+ isRegistered , err := a .accounts .IsRegistered (ctx , userID )
59+ if err != nil {
60+ return false , "" , err
61+ } else if ! isRegistered {
62+ return false , "user is not registered" , nil
63+ }
64+
65+ member , err := a .chats .GetMember (ctx , chatID , userID )
66+ if err == chat .ErrMemberNotFound {
67+ return false , "not a chat member" , nil
68+ } else if err != nil {
69+ return false , "" , err
70+ }
71+
72+ if member .IsMuted {
73+ return false , "chat member is muted" , nil
74+ }
75+
5576 isOwner := chatMd .Owner != nil && bytes .Equal (chatMd .Owner .Value , userID .Value )
5677
5778 // todo: individual handlers for different content types
@@ -197,17 +218,6 @@ func (a *MessagingAuthorizer) CanSendMessage(ctx context.Context, chatID *common
197218 return false , "chat is closed" , nil
198219 }
199220
200- member , err := a .chats .GetMember (ctx , chatID , userID )
201- if err == chat .ErrMemberNotFound {
202- return false , "not a chat member" , nil
203- } else if err != nil {
204- return false , "" , err
205- }
206-
207- if member .IsMuted {
208- return false , "chat member is muted" , nil
209- }
210-
211221 if ! isOwner && ! member .HasSendPermission && requiresListenerPayment {
212222 if paymentIntent == nil {
213223 return false , "payment not provided" , nil
0 commit comments