Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7a0f087

Browse files
VitaliiShpitalStorj Robot
authored andcommitted
satellite/entitlements: added compute access token to projects' scope
Added method to set compute access token in the projects scope. Issue: storj/compute#12 Change-Id: Ie445707c5a16c813028ba5dbc07d59a56f25702c
1 parent c801b44 commit 7a0f087

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

satellite/entitlements/projects.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type PlacementProductMappings map[storj.PlacementConstraint]int32
1919
type ProjectFeatures struct {
2020
NewBucketPlacements []storj.PlacementConstraint `json:"new_bucket_placements,omitempty"`
2121
PlacementProductMappings PlacementProductMappings `json:"placement_product_mappings,omitempty"`
22+
ComputeAccessToken []byte `json:"compute_access_token,omitempty"`
2223
}
2324

2425
// Projects separates project-related entitlements functionality.
@@ -93,6 +94,29 @@ func (p *Projects) SetPlacementProductMappingsByPublicID(ctx context.Context, pu
9394
return Error.Wrap(p.upsertNewEntitlement(ctx, ent, features))
9495
}
9596

97+
// SetComputeAccessTokenByPublicID sets the compute access token for a project by its public ID.
98+
func (p *Projects) SetComputeAccessTokenByPublicID(ctx context.Context, publicProjectID uuid.UUID, token []byte) (err error) {
99+
defer mon.Task()(&ctx)(&err)
100+
101+
scope := ConvertPublicIDToProjectScope(publicProjectID)
102+
103+
// Load current record (may not exist yet).
104+
ent, err := p.getEntitlementBeforeSet(ctx, scope)
105+
if err != nil {
106+
return Error.Wrap(err)
107+
}
108+
109+
var features ProjectFeatures
110+
if len(ent.Features) > 0 {
111+
if err = json.Unmarshal(ent.Features, &features); err != nil {
112+
return Error.Wrap(err)
113+
}
114+
}
115+
features.ComputeAccessToken = token
116+
117+
return Error.Wrap(p.upsertNewEntitlement(ctx, ent, features))
118+
}
119+
96120
// DeleteByPublicID removes the project entitlements by its public ID.
97121
func (p *Projects) DeleteByPublicID(ctx context.Context, publicID uuid.UUID) (err error) {
98122
defer mon.Task()(&ctx)(&err)

satellite/entitlements/projects_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,42 @@ func TestProjectEntitlements(t *testing.T) {
7878
require.NoError(t, err)
7979
require.ElementsMatch(t, p2, got.NewBucketPlacements)
8080
require.Equal(t, m2, got.PlacementProductMappings)
81+
require.Nil(t, got.ComputeAccessToken)
82+
83+
// Test compute access token functionality.
84+
token1 := []byte("compute-token-123")
85+
err = projects.SetComputeAccessTokenByPublicID(ctx, publicID, token1)
86+
require.NoError(t, err)
87+
88+
got, err = projects.GetByPublicID(ctx, publicID)
89+
require.NoError(t, err)
90+
require.ElementsMatch(t, p2, got.NewBucketPlacements)
91+
require.Equal(t, m2, got.PlacementProductMappings)
92+
require.Equal(t, token1, got.ComputeAccessToken)
93+
94+
// Test setting token to empty byte slice.
95+
err = projects.SetComputeAccessTokenByPublicID(ctx, publicID, []byte{})
96+
require.NoError(t, err)
97+
98+
got, err = projects.GetByPublicID(ctx, publicID)
99+
require.NoError(t, err)
100+
require.Nil(t, got.ComputeAccessToken)
101+
102+
// Test setting token to nil.
103+
token2 := []byte("new-compute-token-456")
104+
err = projects.SetComputeAccessTokenByPublicID(ctx, publicID, token2)
105+
require.NoError(t, err)
106+
107+
got, err = projects.GetByPublicID(ctx, publicID)
108+
require.NoError(t, err)
109+
require.Equal(t, token2, got.ComputeAccessToken)
110+
111+
err = projects.SetComputeAccessTokenByPublicID(ctx, publicID, nil)
112+
require.NoError(t, err)
113+
114+
got, err = projects.GetByPublicID(ctx, publicID)
115+
require.NoError(t, err)
116+
require.Nil(t, got.ComputeAccessToken)
81117

82118
err = projects.DeleteByPublicID(ctx, publicID)
83119
require.NoError(t, err)

0 commit comments

Comments
 (0)