Skip to content

Commit 9cac3b2

Browse files
author
Jeff Yanta
committed
auth: users must be registered before being able to send a message
1 parent c311666 commit 9cac3b2

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

auth/rpc/messaging.go

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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
1819
type 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

messaging/tests/server.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func testServerHappy(
7878
serv := messaging.NewServer(
7979
log,
8080
authz,
81-
auth_rpc.NewMessagingRpcAuthorizer(chatsDB, intents, messageDB, codeData),
81+
auth_rpc.NewMessagingRpcAuthorizer(accountStore, chatsDB, intents, messageDB, codeData),
8282
accountStore,
8383
intents,
8484
messageDB,
@@ -103,6 +103,8 @@ func testServerHappy(
103103
otherKeyPair := model.MustGenerateKeyPair()
104104
_, _ = accountStore.Bind(ctx, ownerUserID, ownerKeyPair.Proto())
105105
_, _ = accountStore.Bind(ctx, otherUserID, otherKeyPair.Proto())
106+
require.NoError(t, accountStore.SetRegistrationFlag(ctx, ownerUserID, true))
107+
require.NoError(t, accountStore.SetRegistrationFlag(ctx, otherUserID, true))
106108
_, err := chatsDB.CreateChat(ctx, &chatpb.Metadata{
107109
ChatId: chatID,
108110
Type: chatpb.Metadata_GROUP,
@@ -658,6 +660,7 @@ func testServerHappy(
658660
listenerUserID := model.MustGenerateUserID()
659661
listenerKeyPair := model.MustGenerateKeyPair()
660662
_, _ = accountStore.Bind(ctx, listenerUserID, listenerKeyPair.Proto())
663+
require.NoError(t, accountStore.SetRegistrationFlag(ctx, listenerUserID, true))
661664
require.NoError(t, chatsDB.AddMember(ctx, chatID, chat.Member{
662665
UserID: listenerUserID,
663666
HasSendPermission: false,
@@ -902,7 +905,7 @@ func testServerDuplicateStreams(
902905
serv := messaging.NewServer(
903906
log,
904907
authz,
905-
auth_rpc.NewMessagingRpcAuthorizer(chatsDB, intents, messageDB, codeData),
908+
auth_rpc.NewMessagingRpcAuthorizer(accountStore, chatsDB, intents, messageDB, codeData),
906909
accountStore,
907910
intents,
908911
messageDB,

0 commit comments

Comments
 (0)