Skip to content

Commit d16b444

Browse files
committed
Add Authorizer override to Publish request
1 parent de28ff0 commit d16b444

5 files changed

Lines changed: 42 additions & 11 deletions

File tree

client.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,16 @@ func (client *appsync_client) Publish(ctx context.Context, input PublishCommandI
2727

2828
frame := &events.FrameBuilder{}
2929

30+
var authz app.RequestAuthorizer
31+
if input.Authorizer != nil {
32+
authz = authorizer.NewInternalAdapter(input.Authorizer)
33+
}
34+
3035
err := client.usecases.Publish.Publish(ctx, publish.PublishCommandInput{
3136
Destination: input.Channel,
3237
Payload: input.Payload,
3338
Frame: frame,
39+
Authorizer: authz,
3440
})
3541
return err
3642
}

internal/app/usecases/publish/ports.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type PublishCommandInput struct {
1111
Destination string
1212
Payload app.Payload
1313
Frame app.FrameBuilder
14+
Authorizer app.RequestAuthorizer
1415
}
1516

1617
type PublishMessage interface {

internal/app/usecases/publish/publish-message.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@ func NewPublishMessageUsecase(
2323
}
2424

2525
func (usecase *PublishMessageUsecase) Publish(ctx context.Context, input PublishCommandInput) error {
26-
signature, err := usecase.authorizer.Authorize(ctx, app.AuthorizeCommandInput{
26+
authorizer := usecase.authorizer
27+
28+
if input.Authorizer != nil {
29+
authorizer = input.Authorizer
30+
}
31+
32+
signature, err := authorizer.Authorize(ctx, app.AuthorizeCommandInput{
2733
Channel: input.Destination,
2834
Payload: input.Payload,
2935
})

internal/app/usecases/publish/publish_message_test.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,15 @@ func TestPublish(t *testing.T) {
5757
destination := "test-channel"
5858

5959
tests := []struct {
60-
name string
61-
authorizer *mock_authorizer
62-
sender *mock_sender
63-
expect_err error
64-
expect_send bool
65-
expect_payload app.Payload
66-
expect_channel string
67-
expect_signature app.Signature
60+
name string
61+
authorizer *mock_authorizer
62+
override_authorizer *mock_authorizer
63+
sender *mock_sender
64+
expect_err error
65+
expect_send bool
66+
expect_payload app.Payload
67+
expect_channel string
68+
expect_signature app.Signature
6869
}{
6970
{
7071
name: "success",
@@ -83,6 +84,17 @@ func TestPublish(t *testing.T) {
8384
expect_err: auth_err,
8485
expect_send: false,
8586
},
87+
{
88+
name: "override authorizer is used instead of default",
89+
authorizer: &mock_authorizer{err: auth_err},
90+
override_authorizer: &mock_authorizer{signature: app.Signature{"Authorization": "override-sig"}},
91+
sender: &mock_sender{},
92+
expect_err: nil,
93+
expect_send: true,
94+
expect_payload: payload,
95+
expect_channel: destination,
96+
expect_signature: app.Signature{"Authorization": "override-sig"},
97+
},
8698
{
8799
name: "writer error is returned",
88100
authorizer: &mock_authorizer{signature: signature},
@@ -100,10 +112,15 @@ func TestPublish(t *testing.T) {
100112
frame := &mockFrameBuilder{built_frame: mock_frame{}}
101113
usecase := publish.NewPublishMessageUsecase(tt.authorizer, tt.sender)
102114

115+
var override_authorizer app.RequestAuthorizer
116+
if tt.override_authorizer != nil {
117+
override_authorizer = tt.override_authorizer
118+
}
103119
err := usecase.Publish(context.Background(), publish.PublishCommandInput{
104120
Destination: destination,
105121
Payload: payload,
106122
Frame: frame,
123+
Authorizer: override_authorizer,
107124
})
108125

109126
if !errors.Is(err, tt.expect_err) {

ports.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ type Backpressure struct {
2727
}
2828

2929
type PublishCommandInput struct {
30-
Channel string
31-
Payload []byte
30+
Channel string
31+
Payload []byte
32+
Authorizer authorizer.Authorizer
3233
}
3334

3435
type SubscribeCommandInput struct {

0 commit comments

Comments
 (0)