Skip to content

Commit

Permalink
satellite/console: support id and publicId
Browse files Browse the repository at this point in the history
Update get usage-limits, daily-usage and salt endpoints to support
both project-ID and project-PublicID.

Issue: #5411

Change-Id: Iff0114a295d1a479b141bfffbfb31599844d1fc0
  • Loading branch information
wilfred-asomanii authored and Storj Robot committed Jan 6, 2023
1 parent 05c83a5 commit 0773b4e
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 7 deletions.
17 changes: 10 additions & 7 deletions satellite/console/service.go
Expand Up @@ -1402,18 +1402,20 @@ func (s *Service) GetProject(ctx context.Context, projectID uuid.UUID) (p *Proje
}

// GetSalt is a method for querying project salt by id.
// id may be project.ID or project.PublicID.
func (s *Service) GetSalt(ctx context.Context, projectID uuid.UUID) (salt []byte, err error) {
defer mon.Task()(&ctx)(&err)
user, err := s.getUserAndAuditLog(ctx, "get project salt", zap.String("projectID", projectID.String()))
if err != nil {
return nil, Error.Wrap(err)
}

if _, err = s.isProjectMember(ctx, user.ID, projectID); err != nil {
isMember, err := s.isProjectMember(ctx, user.ID, projectID)
if err != nil {
return nil, Error.Wrap(err)
}

return s.store.Projects().GetSalt(ctx, projectID)
return s.store.Projects().GetSalt(ctx, isMember.project.ID)
}

// GetUsersProjects is a method for querying all projects.
Expand Down Expand Up @@ -2500,6 +2502,7 @@ func (s *Service) GenGetSingleBucketUsageRollup(ctx context.Context, projectID u
}

// GetDailyProjectUsage returns daily usage by project ID.
// ID here may be project.ID or project.PublicID.
func (s *Service) GetDailyProjectUsage(ctx context.Context, projectID uuid.UUID, from, to time.Time) (_ *accounting.ProjectDailyUsage, err error) {
defer mon.Task()(&ctx)(&err)

Expand All @@ -2508,12 +2511,12 @@ func (s *Service) GetDailyProjectUsage(ctx context.Context, projectID uuid.UUID,
return nil, Error.Wrap(err)
}

_, err = s.isProjectMember(ctx, user.ID, projectID)
isMember, err := s.isProjectMember(ctx, user.ID, projectID)
if err != nil {
return nil, Error.Wrap(err)
}

usage, err := s.projectAccounting.GetProjectDailyUsageByDateRange(ctx, projectID, from, to, s.config.AsOfSystemTimeDuration)
usage, err := s.projectAccounting.GetProjectDailyUsageByDateRange(ctx, isMember.project.ID, from, to, s.config.AsOfSystemTimeDuration)
if err != nil {
return nil, Error.Wrap(err)
}
Expand All @@ -2533,17 +2536,17 @@ func (s *Service) GetProjectUsageLimits(ctx context.Context, projectID uuid.UUID
return nil, Error.Wrap(err)
}

_, err = s.isProjectMember(ctx, user.ID, projectID)
isMember, err := s.isProjectMember(ctx, user.ID, projectID)
if err != nil {
return nil, Error.Wrap(err)
}

prUsageLimits, err := s.getProjectUsageLimits(ctx, projectID)
prUsageLimits, err := s.getProjectUsageLimits(ctx, isMember.project.ID)
if err != nil {
return nil, Error.Wrap(err)
}

prObjectsSegments, err := s.projectAccounting.GetProjectObjectsSegments(ctx, projectID)
prObjectsSegments, err := s.projectAccounting.GetProjectObjectsSegments(ctx, isMember.project.ID)
if err != nil {
return nil, Error.Wrap(err)
}
Expand Down
53 changes: 53 additions & 0 deletions satellite/console/service_test.go
Expand Up @@ -77,6 +77,14 @@ func TestService(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, salt)

// Getting project salt with publicID should work
salt1, err := service.GetSalt(userCtx1, up1Pro1.PublicID)
require.NoError(t, err)
require.NotNil(t, salt1)

// project.PublicID salt should be the same as project.ID salt
require.Equal(t, salt, salt1)

// Getting project salt as a non-member should not work
salt, err = service.GetSalt(userCtx1, up2Pro1.ID)
require.Error(t, err)
Expand Down Expand Up @@ -251,6 +259,51 @@ func TestService(t *testing.T) {
require.Equal(t, "console service: project usage: some buckets still exist", err.Error())
})

t.Run("GetProjectUsageLimits", func(t *testing.T) {
bandwidthLimit := sat.Config.Console.UsageLimits.Bandwidth.Free
storageLimit := sat.Config.Console.UsageLimits.Storage.Free

limits1, err := service.GetProjectUsageLimits(userCtx2, up2Pro1.ID)
require.NoError(t, err)
require.NotNil(t, limits1)

// Get usage limits with publicID
limits2, err := service.GetProjectUsageLimits(userCtx2, up2Pro1.PublicID)
require.NoError(t, err)
require.NotNil(t, limits2)

// limits gotten by ID and publicID should be the same
require.Equal(t, storageLimit.Int64(), limits1.StorageLimit)
require.Equal(t, bandwidthLimit.Int64(), limits1.BandwidthLimit)
require.Equal(t, storageLimit.Int64(), limits2.StorageLimit)
require.Equal(t, bandwidthLimit.Int64(), limits2.BandwidthLimit)

// update project's limits
updatedStorageLimit := memory.Size(100) + memory.TB
updatedBandwidthLimit := memory.Size(100) + memory.TB
up2Pro1.StorageLimit = new(memory.Size)
*up2Pro1.StorageLimit = updatedStorageLimit
up2Pro1.BandwidthLimit = new(memory.Size)
*up2Pro1.BandwidthLimit = updatedBandwidthLimit
err = sat.DB.Console().Projects().Update(ctx, up2Pro1)
require.NoError(t, err)

limits1, err = service.GetProjectUsageLimits(userCtx2, up2Pro1.ID)
require.NoError(t, err)
require.NotNil(t, limits1)

// Get usage limits with publicID
limits2, err = service.GetProjectUsageLimits(userCtx2, up2Pro1.PublicID)
require.NoError(t, err)
require.NotNil(t, limits2)

// limits gotten by ID and publicID should be the same
require.Equal(t, updatedStorageLimit.Int64(), limits1.StorageLimit)
require.Equal(t, updatedBandwidthLimit.Int64(), limits1.BandwidthLimit)
require.Equal(t, updatedStorageLimit.Int64(), limits2.StorageLimit)
require.Equal(t, updatedBandwidthLimit.Int64(), limits2.BandwidthLimit)
})

t.Run("ChangeEmail", func(t *testing.T) {
const newEmail = "newEmail@example.com"

Expand Down

0 comments on commit 0773b4e

Please sign in to comment.