Skip to content

Commit 24a5ad7

Browse files
authored
feat: added policy title and creator (#394)
- user email can be fetched from frontier jwt using email claim with the use of custom email header to identify the user Signed-off-by: Kush Sharma <[email protected]>
1 parent bcbbde8 commit 24a5ad7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+4670
-2742
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- name: Set up Go
1616
uses: actions/setup-go@v4
1717
with:
18-
go-version: "1.20"
18+
go-version: "1.21"
1919
- name: Login to DockerHub
2020
uses: docker/login-action@v1
2121
with:

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- name: Set up Go
1717
uses: actions/setup-go@v2
1818
with:
19-
go-version: "1.20"
19+
go-version: "1.21"
2020
- name: Login to DockerHub
2121
uses: docker/login-action@v1
2222
with:

.github/workflows/test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
steps:
1010
- uses: actions/setup-go@v2
1111
with:
12-
go-version: "1.20"
12+
go-version: "1.21"
1313
- uses: actions/checkout@v2
1414
with:
1515
fetch-depth: 0
@@ -20,7 +20,7 @@ jobs:
2020
test:
2121
strategy:
2222
matrix:
23-
go-version: [1.20.x]
23+
go-version: [1.21.x]
2424
os: [ubuntu-latest]
2525
runs-on: ${{ matrix.os }}
2626
steps:

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.13
1+
FROM alpine:3.18
22

33
RUN apk add curl
44
RUN apk add openssl

Dockerfile.dev

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.20-alpine3.17 as builder
1+
FROM golang:1.21-alpine3.18 as builder
22

33
RUN apk add make
44

@@ -11,7 +11,7 @@ COPY . .
1111

1212
RUN make build
1313

14-
FROM alpine:3.17
14+
FROM alpine:3.18
1515
COPY --from=builder /go/src/app/dist/guardian /usr/bin/guardian
1616
RUN apk update
1717
RUN apk add ca-certificates

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ COMMIT := $(shell git rev-parse --short HEAD)
33
TAG := "$(shell git rev-list --tags --max-count=1)"
44
VERSION := "$(shell git describe --tags ${TAG})-next"
55
BUILD_DIR=dist
6-
PROTON_COMMIT := "17305c2660e06ff9c82c1b6130799a703e4e543b"
6+
PROTON_COMMIT := "0568961fb6571a7a9889d5f16eb896e371e39b8e"
77

88
.PHONY: all build clean test tidy vet proto setup format generate
99

@@ -75,7 +75,7 @@ proto: ## Generate the protobuf files
7575
setup: ## Install all the dependencies
7676
@echo "Installing dependencies..."
7777
go mod tidy
78-
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
78+
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0
7979
go install github.com/golang/protobuf/[email protected]
8080
go install github.com/golang/protobuf/[email protected]
8181
go install google.golang.org/[email protected]

api/handler/v1beta1/adapter.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,17 @@ func (a *adapter) ToRole(role *domain.Role) (*guardianv1beta1.Role, error) {
221221
return roleProto, nil
222222
}
223223

224-
func (a *adapter) FromPolicyProto(p *guardianv1beta1.Policy) *domain.Policy {
224+
func (a *adapter) FromPolicyProto(p *guardianv1beta1.Policy, createdBy string) *domain.Policy {
225225
policy := &domain.Policy{
226226
ID: p.GetId(),
227+
Title: p.GetTitle(),
227228
Version: uint(p.GetVersion()),
228229
Description: p.GetDescription(),
229230
Labels: p.GetLabels(),
231+
CreatedBy: p.GetCreatedBy(),
232+
}
233+
if createdBy != "" {
234+
policy.CreatedBy = createdBy
230235
}
231236

232237
if p.GetSteps() != nil {
@@ -352,8 +357,10 @@ func (a *adapter) ToPolicyProto(p *domain.Policy) (*guardianv1beta1.Policy, erro
352357
policyProto := &guardianv1beta1.Policy{
353358
Id: p.ID,
354359
Version: uint32(p.Version),
360+
Title: p.Title,
355361
Description: p.Description,
356362
Labels: p.Labels,
363+
CreatedBy: p.CreatedBy,
357364
}
358365

359366
if p.Steps != nil {

api/handler/v1beta1/appeal_test.go

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (s *GrpcHandlersSuite) TestListUserAppeals() {
2323
s.setup()
2424
timeNow := time.Now()
2525

26-
expectedUser := "test-user"
26+
expectedUser := "test@example.com"
2727
expectedFilters := &domain.ListAppealsFilter{
2828
CreatedBy: expectedUser,
2929
Statuses: []string{"active", "pending"},
@@ -137,8 +137,7 @@ func (s *GrpcHandlersSuite) TestListUserAppeals() {
137137
AccountTypes: []string{"test-account-type"},
138138
Q: "test",
139139
}
140-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, expectedUser)
141-
res, err := s.grpcServer.ListUserAppeals(ctx, req)
140+
res, err := s.grpcServer.ListUserAppeals(s.ctx, req)
142141

143142
s.NoError(err)
144143
s.Equal(expectedResponse, res)
@@ -169,8 +168,7 @@ func (s *GrpcHandlersSuite) TestListUserAppeals() {
169168
Return(int64(0), nil).Once()
170169

171170
req := &guardianv1beta1.ListUserAppealsRequest{}
172-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "test-user")
173-
res, err := s.grpcServer.ListUserAppeals(ctx, req)
171+
res, err := s.grpcServer.ListUserAppeals(s.ctx, req)
174172

175173
fmt.Println(status.Code(err))
176174
s.Equal(codes.Internal, status.Code(err))
@@ -194,8 +192,7 @@ func (s *GrpcHandlersSuite) TestListUserAppeals() {
194192
Return(int64(1), nil).Once()
195193

196194
req := &guardianv1beta1.ListUserAppealsRequest{}
197-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "test-user")
198-
res, err := s.grpcServer.ListUserAppeals(ctx, req)
195+
res, err := s.grpcServer.ListUserAppeals(s.ctx, req)
199196

200197
s.Equal(codes.Internal, status.Code(err))
201198
s.Nil(res)
@@ -370,7 +367,7 @@ func (s *GrpcHandlersSuite) TestCreateAppeal() {
370367
s.setup()
371368
timeNow := time.Now()
372369

373-
expectedUser := "user@example.com"
370+
expectedUser := "test@example.com"
374371
expectedResource := &domain.Resource{
375372
ID: "test-resource-id",
376373
ProviderType: "test-provider-type",
@@ -493,8 +490,7 @@ func (s *GrpcHandlersSuite) TestCreateAppeal() {
493490
},
494491
Description: "The answer is 42",
495492
}
496-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, expectedUser)
497-
res, err := s.grpcServer.CreateAppeal(ctx, req)
493+
res, err := s.grpcServer.CreateAppeal(s.ctx, req)
498494

499495
s.NoError(err)
500496
s.Equal(expectedResponse, res)
@@ -525,8 +521,7 @@ func (s *GrpcHandlersSuite) TestCreateAppeal() {
525521
s.appealService.EXPECT().Create(mock.AnythingOfType("*context.valueCtx"), mock.Anything).Return(appeal.ErrAppealDuplicate).Once()
526522

527523
req := &guardianv1beta1.CreateAppealRequest{}
528-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "[email protected]")
529-
res, err := s.grpcServer.CreateAppeal(ctx, req)
524+
res, err := s.grpcServer.CreateAppeal(s.ctx, req)
530525

531526
s.Equal(codes.AlreadyExists, status.Code(err))
532527
s.Nil(res)
@@ -540,8 +535,7 @@ func (s *GrpcHandlersSuite) TestCreateAppeal() {
540535
s.appealService.EXPECT().Create(mock.AnythingOfType("*context.valueCtx"), mock.Anything).Return(expectedError).Once()
541536

542537
req := &guardianv1beta1.CreateAppealRequest{}
543-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "[email protected]")
544-
res, err := s.grpcServer.CreateAppeal(ctx, req)
538+
res, err := s.grpcServer.CreateAppeal(s.ctx, req)
545539

546540
s.Equal(codes.Internal, status.Code(err))
547541
s.Nil(res)
@@ -564,8 +558,7 @@ func (s *GrpcHandlersSuite) TestCreateAppeal() {
564558
Return(nil).Once()
565559

566560
req := &guardianv1beta1.CreateAppealRequest{Resources: make([]*guardianv1beta1.CreateAppealRequest_Resource, 1)}
567-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "[email protected]")
568-
res, err := s.grpcServer.CreateAppeal(ctx, req)
561+
res, err := s.grpcServer.CreateAppeal(s.ctx, req)
569562

570563
s.Equal(codes.Internal, status.Code(err))
571564
s.Nil(res)
@@ -657,7 +650,7 @@ func (s *GrpcHandlersSuite) TestGetAppeal() {
657650
UpdatedAt: timestamppb.New(timeNow),
658651
},
659652
}
660-
s.appealService.EXPECT().GetByID(mock.AnythingOfType("*context.emptyCtx"), expectedID).Return(expectedAppeal, nil).Once()
653+
s.appealService.EXPECT().GetByID(mock.AnythingOfType("context.backgroundCtx"), expectedID).Return(expectedAppeal, nil).Once()
661654

662655
req := &guardianv1beta1.GetAppealRequest{
663656
Id: expectedID,
@@ -673,7 +666,7 @@ func (s *GrpcHandlersSuite) TestGetAppeal() {
673666
s.setup()
674667

675668
expectedError := errors.New("random error")
676-
s.appealService.EXPECT().GetByID(mock.AnythingOfType("*context.emptyCtx"), mock.Anything).
669+
s.appealService.EXPECT().GetByID(mock.AnythingOfType("context.backgroundCtx"), mock.Anything).
677670
Return(nil, expectedError).Once()
678671

679672
req := &guardianv1beta1.GetAppealRequest{
@@ -689,7 +682,7 @@ func (s *GrpcHandlersSuite) TestGetAppeal() {
689682
s.Run("should return not found error if appeal not found", func() {
690683
s.setup()
691684

692-
s.appealService.EXPECT().GetByID(mock.AnythingOfType("*context.emptyCtx"), mock.Anything).
685+
s.appealService.EXPECT().GetByID(mock.AnythingOfType("context.backgroundCtx"), mock.Anything).
693686
Return(nil, nil).Once()
694687

695688
req := &guardianv1beta1.GetAppealRequest{
@@ -710,7 +703,7 @@ func (s *GrpcHandlersSuite) TestGetAppeal() {
710703
"foo": make(chan int),
711704
},
712705
}
713-
s.appealService.EXPECT().GetByID(mock.AnythingOfType("*context.emptyCtx"), mock.Anything).
706+
s.appealService.EXPECT().GetByID(mock.AnythingOfType("context.backgroundCtx"), mock.Anything).
714707
Return(invalidAppeal, nil).Once()
715708

716709
req := &guardianv1beta1.GetAppealRequest{
@@ -808,7 +801,7 @@ func (s *GrpcHandlersSuite) TestCancelAppeal() {
808801
UpdatedAt: timestamppb.New(timeNow),
809802
},
810803
}
811-
s.appealService.EXPECT().Cancel(mock.AnythingOfType("*context.emptyCtx"), expectedID).Return(expectedAppeal, nil).Once()
804+
s.appealService.EXPECT().Cancel(mock.AnythingOfType("context.backgroundCtx"), expectedID).Return(expectedAppeal, nil).Once()
812805

813806
req := &guardianv1beta1.CancelAppealRequest{
814807
Id: expectedID,
@@ -862,7 +855,7 @@ func (s *GrpcHandlersSuite) TestCancelAppeal() {
862855
s.Run(tc.name, func() {
863856
s.setup()
864857

865-
s.appealService.EXPECT().Cancel(mock.AnythingOfType("*context.emptyCtx"), mock.Anything).
858+
s.appealService.EXPECT().Cancel(mock.AnythingOfType("context.backgroundCtx"), mock.Anything).
866859
Return(nil, tc.expectedError).Once()
867860

868861
req := &guardianv1beta1.CancelAppealRequest{
@@ -885,7 +878,7 @@ func (s *GrpcHandlersSuite) TestCancelAppeal() {
885878
"foo": make(chan int),
886879
},
887880
}
888-
s.appealService.EXPECT().Cancel(mock.AnythingOfType("*context.emptyCtx"), mock.Anything).
881+
s.appealService.EXPECT().Cancel(mock.AnythingOfType("context.backgroundCtx"), mock.Anything).
889882
Return(invalidAppeal, nil).Once()
890883

891884
req := &guardianv1beta1.CancelAppealRequest{

api/handler/v1beta1/approval_test.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (s *GrpcHandlersSuite) TestListUserApprovals() {
2323
s.setup()
2424
timeNow := time.Now()
2525

26-
expectedUser := "test-user"
26+
expectedUser := "test@example.com"
2727
expectedFilters := &domain.ListApprovalsFilter{
2828
CreatedBy: expectedUser,
2929
AccountID: "test-account-id",
@@ -119,8 +119,7 @@ func (s *GrpcHandlersSuite) TestListUserApprovals() {
119119
Statuses: []string{"active", "pending"},
120120
OrderBy: []string{"test-order"},
121121
}
122-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, expectedUser)
123-
res, err := s.grpcServer.ListUserApprovals(ctx, req)
122+
res, err := s.grpcServer.ListUserApprovals(s.ctx, req)
124123

125124
s.NoError(err)
126125
s.Equal(expectedResponse, res)
@@ -151,8 +150,7 @@ func (s *GrpcHandlersSuite) TestListUserApprovals() {
151150
Return(int64(0), nil).Once()
152151

153152
req := &guardianv1beta1.ListUserApprovalsRequest{}
154-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "test-user")
155-
res, err := s.grpcServer.ListUserApprovals(ctx, req)
153+
res, err := s.grpcServer.ListUserApprovals(s.ctx, req)
156154

157155
s.Equal(codes.Internal, status.Code(err))
158156
s.Nil(res)
@@ -169,8 +167,7 @@ func (s *GrpcHandlersSuite) TestListUserApprovals() {
169167
Return(int64(0), expectedError).Once()
170168

171169
req := &guardianv1beta1.ListUserApprovalsRequest{}
172-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "test-user")
173-
res, err := s.grpcServer.ListUserApprovals(ctx, req)
170+
res, err := s.grpcServer.ListUserApprovals(s.ctx, req)
174171

175172
s.Equal(codes.Internal, status.Code(err))
176173
s.Nil(res)
@@ -195,8 +192,7 @@ func (s *GrpcHandlersSuite) TestListUserApprovals() {
195192
Return(int64(1), nil).Once()
196193

197194
req := &guardianv1beta1.ListUserApprovalsRequest{}
198-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "test-user")
199-
res, err := s.grpcServer.ListUserApprovals(ctx, req)
195+
res, err := s.grpcServer.ListUserApprovals(s.ctx, req)
200196

201197
s.Equal(codes.Internal, status.Code(err))
202198
s.Nil(res)
@@ -361,7 +357,7 @@ func (s *GrpcHandlersSuite) TestUpdateApproval() {
361357
s.setup()
362358
timeNow := time.Now()
363359

364-
expectedUser := "user@example.com"
360+
expectedUser := "test@example.com"
365361
expectedID := "test-appeal-id"
366362
expectedApprovalName := "test-approval-name"
367363
expectedAction := "approve"
@@ -463,8 +459,7 @@ func (s *GrpcHandlersSuite) TestUpdateApproval() {
463459
Reason: expectedReason,
464460
},
465461
}
466-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, expectedUser)
467-
res, err := s.grpcServer.UpdateApproval(ctx, req)
462+
res, err := s.grpcServer.UpdateApproval(s.ctx, req)
468463

469464
s.NoError(err)
470465
s.Equal(expectedResponse, res)
@@ -564,13 +559,11 @@ func (s *GrpcHandlersSuite) TestUpdateApproval() {
564559
s.Run(tc.name, func() {
565560
s.setup()
566561

567-
expectedUser := "[email protected]"
568562
s.appealService.EXPECT().UpdateApproval(mock.AnythingOfType("*context.valueCtx"), mock.Anything).
569563
Return(nil, tc.expectedError).Once()
570564

571565
req := &guardianv1beta1.UpdateApprovalRequest{}
572-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, expectedUser)
573-
res, err := s.grpcServer.UpdateApproval(ctx, req)
566+
res, err := s.grpcServer.UpdateApproval(s.ctx, req)
574567

575568
s.Equal(tc.expectedStatusCode, status.Code(err))
576569
s.Nil(res)
@@ -579,7 +572,7 @@ func (s *GrpcHandlersSuite) TestUpdateApproval() {
579572
}
580573
})
581574

582-
s.Run("should return unathenticated error if request is not authenticated", func() {
575+
s.Run("should return unauthenticated error if request is not authenticated", func() {
583576
s.setup()
584577

585578
invalidAppeal := &domain.Appeal{
@@ -591,10 +584,10 @@ func (s *GrpcHandlersSuite) TestUpdateApproval() {
591584
Return(invalidAppeal, nil).Once()
592585

593586
req := &guardianv1beta1.UpdateApprovalRequest{}
594-
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "[email protected]")
587+
ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "")
595588
res, err := s.grpcServer.UpdateApproval(ctx, req)
596589

597-
s.Equal(codes.Internal, status.Code(err))
590+
s.Equal(codes.Unauthenticated, status.Code(err))
598591
s.Nil(res)
599592
s.approvalService.AssertExpectations(s.T())
600593
})
@@ -635,7 +628,7 @@ func (s *GrpcHandlersSuite) TestAddApprover() {
635628
CreatedAt: timeNow,
636629
UpdatedAt: timeNow,
637630
}
638-
s.appealService.EXPECT().AddApprover(mock.AnythingOfType("*context.emptyCtx"), appealID, approvalID, email).Return(expectedAppeal, nil).Once()
631+
s.appealService.EXPECT().AddApprover(mock.AnythingOfType("context.backgroundCtx"), appealID, approvalID, email).Return(expectedAppeal, nil).Once()
639632
expectedResponse := &guardianv1beta1.AddApproverResponse{
640633
Appeal: &guardianv1beta1.Appeal{
641634
Id: expectedAppeal.ID,
@@ -760,7 +753,7 @@ func (s *GrpcHandlersSuite) TestDeleteApprover() {
760753
CreatedAt: timeNow,
761754
UpdatedAt: timeNow,
762755
}
763-
s.appealService.EXPECT().DeleteApprover(mock.AnythingOfType("*context.emptyCtx"), appealID, approvalID, email).Return(expectedAppeal, nil).Once()
756+
s.appealService.EXPECT().DeleteApprover(mock.AnythingOfType("context.backgroundCtx"), appealID, approvalID, email).Return(expectedAppeal, nil).Once()
764757
expectedResponse := &guardianv1beta1.DeleteApproverResponse{
765758
Appeal: &guardianv1beta1.Appeal{
766759
Id: expectedAppeal.ID,

0 commit comments

Comments
 (0)