From 3a714cefcf8331950709a1743a3a5c2779e5a3c5 Mon Sep 17 00:00:00 2001 From: Wilfred Asomani Date: Fri, 27 Jan 2023 21:07:32 +0000 Subject: [PATCH] satellite: remove rewards package Affected packages admin,attribution,console,metainfo,satellitedb,web,payments This change removes the satellite/rewards package and its related usages. It removes references to APIKeyInfo/PartnerID, Project/PartnerID and User/PartnerID. Issue: https://github.com/storj/storj/issues/5432 Change-Id: Ieaa352ee848db45e94f85556febdbcf1444d8c3e --- satellite/admin/apikeys.go | 4 +- satellite/admin/apikeys_test.go | 4 - satellite/admin/project_test.go | 3 +- satellite/admin/ui/src/lib/api.ts | 2 - satellite/api.go | 15 -- satellite/attribution/db.go | 4 +- satellite/attribution/db_test.go | 67 ++---- satellite/console/apikeys.go | 1 - satellite/console/attribution_test.go | 14 +- .../console/consoleweb/consoleapi/auth.go | 15 +- .../consoleweb/consoleapi/auth_test.go | 2 +- .../console/consoleweb/consoleql/apikey.go | 3 - .../consoleweb/consoleql/mutation_test.go | 12 +- .../consoleweb/consoleql/query_test.go | 7 - .../console/consoleweb/consoleql/user.go | 8 - satellite/console/consoleweb/server.go | 7 +- satellite/console/emailreminders/chore.go | 2 +- satellite/console/projects.go | 1 - satellite/console/service.go | 10 +- satellite/console/users.go | 10 - satellite/console/users_test.go | 18 -- satellite/metainfo/attribution.go | 17 +- satellite/metainfo/attribution_test.go | 14 +- satellite/metainfo/endpoint.go | 5 +- satellite/metainfo/validation.go | 2 +- .../stripecoinpayments/accounts_test.go | 7 - satellite/rewards/partner.go | 47 ---- satellite/rewards/partners.go | 223 ------------------ satellite/rewards/partners_db_test.go | 50 ---- satellite/rewards/partners_service.go | 71 ------ satellite/rewards/partners_staticdb.go | 95 -------- satellite/satellitedb/apikeys.go | 17 +- satellite/satellitedb/attribution.go | 44 +--- satellite/satellitedb/projects.go | 12 - satellite/satellitedb/users.go | 10 - web/satellite/src/api/auth.ts | 2 - web/satellite/src/api/v0.gen.ts | 5 +- web/satellite/src/types/users.ts | 1 - .../unit/ignore/views/DashboardArea.spec.ts | 2 +- .../tests/unit/store/projectMembers.spec.ts | 1 - web/satellite/tests/unit/store/users.spec.ts | 1 - 41 files changed, 63 insertions(+), 772 deletions(-) delete mode 100644 satellite/rewards/partner.go delete mode 100644 satellite/rewards/partners.go delete mode 100644 satellite/rewards/partners_db_test.go delete mode 100644 satellite/rewards/partners_service.go delete mode 100644 satellite/rewards/partners_staticdb.go diff --git a/satellite/admin/apikeys.go b/satellite/admin/apikeys.go index 15a8d2aa8..0185f2482 100644 --- a/satellite/admin/apikeys.go +++ b/satellite/admin/apikeys.go @@ -43,8 +43,7 @@ func (server *Server) addAPIKey(w http.ResponseWriter, r *http.Request) { } var input struct { - PartnerID uuid.UUID `json:"partnerId"` - Name string `json:"name"` + Name string `json:"name"` } err = json.Unmarshal(body, &input) @@ -85,7 +84,6 @@ func (server *Server) addAPIKey(w http.ResponseWriter, r *http.Request) { Name: input.Name, ProjectID: projectUUID, Secret: secret, - PartnerID: input.PartnerID, } _, err = server.db.Console().APIKeys().Create(ctx, key.Head(), apikey) diff --git a/satellite/admin/apikeys_test.go b/satellite/admin/apikeys_test.go index e9d26773a..94ba00210 100644 --- a/satellite/admin/apikeys_test.go +++ b/satellite/admin/apikeys_test.go @@ -206,7 +206,6 @@ func TestApiKeysList(t *testing.T) { ID string `json:"id"` ProjectID string `json:"projectId"` Name string `json:"name"` - PartnerID string `json:"partnerID"` CreatedAt string `json:"createdAt"` } require.NoError(t, json.Unmarshal(body, &apiKeys)) @@ -216,14 +215,12 @@ func TestApiKeysList(t *testing.T) { assert.NotEmpty(t, a.ID, "API key ID") assert.Equal(t, "first", a.Name, "API key name") assert.Equal(t, project.ID.String(), a.ProjectID, "API key project ID") - assert.Equal(t, uuid.UUID{}.String(), a.PartnerID, "API key partner ID") assert.NotEmpty(t, a.CreatedAt, "API key created at") a = apiKeys[1] assert.NotEmpty(t, a.ID, "API key ID") assert.Equal(t, "second", a.Name, "API key name") assert.Equal(t, project.ID.String(), a.ProjectID, "API key project ID") - assert.Equal(t, uuid.UUID{}.String(), a.PartnerID, "API key partner ID") assert.NotEmpty(t, a.CreatedAt, "API key created at") } @@ -241,7 +238,6 @@ func TestApiKeysList(t *testing.T) { assert.NotEmpty(t, a.ID, "API key ID") assert.Equal(t, "first", a.Name, "API key name") assert.Equal(t, project.ID.String(), a.ProjectID, "API key project ID") - assert.Equal(t, uuid.UUID{}.String(), a.PartnerID, "API key partner ID") assert.NotEmpty(t, a.CreatedAt, "API key created at") } diff --git a/satellite/admin/project_test.go b/satellite/admin/project_test.go index b4d85e19b..57e8a5267 100644 --- a/satellite/admin/project_test.go +++ b/satellite/admin/project_test.go @@ -47,12 +47,11 @@ func TestProjectGet(t *testing.T) { t.Run("OK", func(t *testing.T) { link := "http://" + address.String() + "/api/projects/" + project.ID.String() expected := fmt.Sprintf( - `{"id":"%s","publicId":"%s","name":"%s","description":"%s","partnerId":"%s","userAgent":null,"ownerId":"%s","rateLimit":null,"burstLimit":null,"maxBuckets":null,"createdAt":"%s","memberCount":0,"storageLimit":"25.00 GB","bandwidthLimit":"25.00 GB","userSpecifiedStorageLimit":null,"userSpecifiedBandwidthLimit":null,"segmentLimit":150000}`, + `{"id":"%s","publicId":"%s","name":"%s","description":"%s","userAgent":null,"ownerId":"%s","rateLimit":null,"burstLimit":null,"maxBuckets":null,"createdAt":"%s","memberCount":0,"storageLimit":"25.00 GB","bandwidthLimit":"25.00 GB","userSpecifiedStorageLimit":null,"userSpecifiedBandwidthLimit":null,"segmentLimit":150000}`, project.ID.String(), project.PublicID.String(), project.Name, project.Description, - project.PartnerID.String(), project.OwnerID.String(), project.CreatedAt.Format(time.RFC3339Nano), ) diff --git a/satellite/admin/ui/src/lib/api.ts b/satellite/admin/ui/src/lib/api.ts index 610d50c3d..9f1163561 100644 --- a/satellite/admin/ui/src/lib/api.ts +++ b/satellite/admin/ui/src/lib/api.ts @@ -350,7 +350,6 @@ Blank fields will not be updated.`, email?: string, fullName?: string, shortName?: string, - partnerID?: string, passwordHash?: string, projectLimit?: number, projectStorageLimit?: number, @@ -362,7 +361,6 @@ Blank fields will not be updated.`, email, fullName, shortName, - partnerID, passwordHash, projectLimit, projectStorageLimit, diff --git a/satellite/api.go b/satellite/api.go index 05a9c8f06..4a76d5a17 100644 --- a/satellite/api.go +++ b/satellite/api.go @@ -52,7 +52,6 @@ import ( "storj.io/storj/satellite/payments/storjscan" "storj.io/storj/satellite/payments/stripecoinpayments" "storj.io/storj/satellite/reputation" - "storj.io/storj/satellite/rewards" "storj.io/storj/satellite/snopayouts" ) @@ -154,10 +153,6 @@ type API struct { AuthTokens *consoleauth.Service } - Marketing struct { - PartnersService *rewards.PartnersService - } - NodeStats struct { Endpoint *nodestats.Endpoint } @@ -415,13 +410,6 @@ func NewAPI(log *zap.Logger, full *identity.FullIdentity, db DB, } } - { // setup marketing partners service - peer.Marketing.PartnersService = rewards.NewPartnersService( - peer.Log.Named("partners"), - rewards.DefaultPartnersDB, - ) - } - { // setup analytics service peer.Analytics.Service = analytics.NewService(peer.Log.Named("analytics:service"), config.Analytics, config.Console.SatelliteName) @@ -467,7 +455,6 @@ func NewAPI(log *zap.Logger, full *identity.FullIdentity, db DB, peer.Orders.Service, peer.Overlay.Service, peer.DB.Attribution(), - peer.Marketing.PartnersService, peer.DB.PeerIdentities(), peer.DB.Console().APIKeys(), peer.Accounting.ProjectUsage, @@ -618,7 +605,6 @@ func NewAPI(log *zap.Logger, full *identity.FullIdentity, db DB, peer.DB.ProjectAccounting(), peer.Accounting.ProjectUsage, peer.Buckets.Service, - peer.Marketing.PartnersService, peer.Payments.Accounts, peer.Payments.DepositWallets, peer.DB.Billing(), @@ -640,7 +626,6 @@ func NewAPI(log *zap.Logger, full *identity.FullIdentity, db DB, peer.Console.Service, peer.OIDC.Service, peer.Mail.Service, - peer.Marketing.PartnersService, peer.Analytics.Service, peer.ABTesting.Service, accountFreezeService, diff --git a/satellite/attribution/db.go b/satellite/attribution/db.go index 013c575f9..2ed40585b 100644 --- a/satellite/attribution/db.go +++ b/satellite/attribution/db.go @@ -20,14 +20,12 @@ var ErrBucketNotAttributed = errs.Class("bucket not attributed") type Info struct { ProjectID uuid.UUID BucketName []byte - PartnerID uuid.UUID UserAgent []byte CreatedAt time.Time } // BucketUsage is the usage data for a single bucket. type BucketUsage struct { - PartnerID []byte UserAgent []byte ProjectID []byte BucketName []byte @@ -47,7 +45,7 @@ type DB interface { // Insert creates and stores new Info. Insert(ctx context.Context, info *Info) (*Info, error) // QueryAttribution queries partner bucket attribution data. - QueryAttribution(ctx context.Context, partnerID uuid.UUID, userAgent []byte, start time.Time, end time.Time) ([]*BucketUsage, error) + QueryAttribution(ctx context.Context, userAgent []byte, start time.Time, end time.Time) ([]*BucketUsage, error) // QueryAllAttribution queries all partner bucket usage data. QueryAllAttribution(ctx context.Context, start time.Time, end time.Time) ([]*BucketUsage, error) } diff --git a/satellite/attribution/db_test.go b/satellite/attribution/db_test.go index 3394f3944..de0408aa2 100644 --- a/satellite/attribution/db_test.go +++ b/satellite/attribution/db_test.go @@ -30,7 +30,6 @@ const ( type AttributionTestData struct { name string - partnerID uuid.UUID userAgent []byte projectID uuid.UUID bucketName []byte @@ -70,14 +69,13 @@ func TestDB(t *testing.T) { satellitedbtest.Run(t, func(ctx *testcontext.Context, t *testing.T, db satellite.DB) { attributionDB := db.Attribution() project1, project2 := testrand.UUID(), testrand.UUID() - partner1, partner2 := testrand.UUID(), testrand.UUID() agent1, agent2 := []byte("agent1"), []byte("agent2") infos := []*attribution.Info{ - {project1, []byte("alpha"), partner1, agent1, time.Time{}}, - {project1, []byte("beta"), partner2, agent2, time.Time{}}, - {project2, []byte("alpha"), partner2, agent2, time.Time{}}, - {project2, []byte("beta"), partner1, agent1, time.Time{}}, + {project1, []byte("alpha"), agent1, time.Time{}}, + {project1, []byte("beta"), agent2, time.Time{}}, + {project2, []byte("alpha"), agent2, time.Time{}}, + {project2, []byte("beta"), agent1, time.Time{}}, } for _, info := range infos { @@ -91,7 +89,6 @@ func TestDB(t *testing.T) { for _, info := range infos { got, err := attributionDB.Get(ctx, info.ProjectID, info.BucketName) require.NoError(t, err) - assert.Equal(t, info.PartnerID, got.PartnerID) assert.Equal(t, info.UserAgent, got.UserAgent) } }) @@ -102,14 +99,12 @@ func TestQueryAttribution(t *testing.T) { now := time.Now() projectID := testrand.UUID() - partnerID := testrand.UUID() userAgent := []byte("agent1") alphaBucket := []byte("alpha") betaBucket := []byte("beta") testData := []AttributionTestData{ { name: "new partnerID, userAgent, projectID, alpha", - partnerID: testrand.UUID(), userAgent: []byte("agent2"), projectID: projectID, bucketName: alphaBucket, @@ -124,7 +119,6 @@ func TestQueryAttribution(t *testing.T) { }, { name: "partnerID, userAgent, new projectID, alpha", - partnerID: partnerID, userAgent: userAgent, projectID: testrand.UUID(), bucketName: alphaBucket, @@ -139,7 +133,6 @@ func TestQueryAttribution(t *testing.T) { }, { name: "new partnerID, userAgent, projectID, beta", - partnerID: testrand.UUID(), userAgent: []byte("agent3"), projectID: projectID, bucketName: betaBucket, @@ -154,7 +147,6 @@ func TestQueryAttribution(t *testing.T) { }, { name: "partnerID, userAgent new projectID, beta", - partnerID: partnerID, userAgent: userAgent, projectID: testrand.UUID(), bucketName: betaBucket, @@ -171,7 +163,7 @@ func TestQueryAttribution(t *testing.T) { for _, td := range testData { td := td td.init() - info := attribution.Info{td.projectID, td.bucketName, td.partnerID, td.userAgent, time.Time{}} + info := attribution.Info{td.projectID, td.bucketName, td.userAgent, time.Time{}} _, err := db.Attribution().Insert(ctx, &info) require.NoError(t, err) @@ -189,14 +181,12 @@ func TestQueryAllAttribution(t *testing.T) { now := time.Now() projectID := testrand.UUID() - partnerID := testrand.UUID() userAgent := []byte("agent1") alphaBucket := []byte("alpha") betaBucket := []byte("beta") testData := []AttributionTestData{ { name: "new partnerID, userAgent, projectID, alpha", - partnerID: testrand.UUID(), userAgent: []byte("agent2"), projectID: projectID, bucketName: alphaBucket, @@ -211,7 +201,6 @@ func TestQueryAllAttribution(t *testing.T) { }, { name: "partnerID, userAgent, new projectID, alpha", - partnerID: partnerID, userAgent: userAgent, projectID: testrand.UUID(), bucketName: alphaBucket, @@ -226,7 +215,6 @@ func TestQueryAllAttribution(t *testing.T) { }, { name: "new partnerID, userAgent, projectID, beta", - partnerID: testrand.UUID(), userAgent: []byte("agent3"), projectID: projectID, bucketName: betaBucket, @@ -241,7 +229,6 @@ func TestQueryAllAttribution(t *testing.T) { }, { name: "partnerID, userAgent new projectID, beta", - partnerID: partnerID, userAgent: userAgent, projectID: testrand.UUID(), bucketName: betaBucket, @@ -259,7 +246,7 @@ func TestQueryAllAttribution(t *testing.T) { td := td td.init() - info := attribution.Info{td.projectID, td.bucketName, td.partnerID, td.userAgent, time.Time{}} + info := attribution.Info{td.projectID, td.bucketName, td.userAgent, time.Time{}} _, err := db.Attribution().Insert(ctx, &info) require.NoError(t, err) for i := 0; i < td.hoursOfData; i++ { @@ -280,14 +267,13 @@ func TestQueryAllAttributionNoStorage(t *testing.T) { now := time.Now() projectID := testrand.UUID() - partnerID := testrand.UUID() userAgent := []byte("agent1") alphaBucket := []byte("alpha") betaBucket := []byte("beta") testData := []AttributionTestData{ { - name: "new partnerID, userAgent, projectID, alpha", - partnerID: testrand.UUID(), + name: "new partnerID, userAgent, projectID, alpha", + userAgent: []byte("agent2"), projectID: projectID, bucketName: alphaBucket, @@ -301,8 +287,8 @@ func TestQueryAllAttributionNoStorage(t *testing.T) { padding: 2, }, { - name: "partnerID, userAgent, new projectID, alpha", - partnerID: partnerID, + name: "partnerID, userAgent, new projectID, alpha", + userAgent: userAgent, projectID: testrand.UUID(), bucketName: alphaBucket, @@ -316,8 +302,8 @@ func TestQueryAllAttributionNoStorage(t *testing.T) { padding: 2, }, { - name: "new partnerID, userAgent, projectID, beta", - partnerID: testrand.UUID(), + name: "new partnerID, userAgent, projectID, beta", + userAgent: []byte("agent3"), projectID: projectID, bucketName: betaBucket, @@ -331,8 +317,8 @@ func TestQueryAllAttributionNoStorage(t *testing.T) { padding: 2, }, { - name: "partnerID, userAgent new projectID, beta", - partnerID: partnerID, + name: "partnerID, userAgent new projectID, beta", + userAgent: userAgent, projectID: testrand.UUID(), bucketName: betaBucket, @@ -350,7 +336,7 @@ func TestQueryAllAttributionNoStorage(t *testing.T) { td := td td.init() - info := attribution.Info{td.projectID, td.bucketName, td.partnerID, td.userAgent, time.Time{}} + info := attribution.Info{td.projectID, td.bucketName, td.userAgent, time.Time{}} _, err := db.Attribution().Insert(ctx, &info) require.NoError(t, err) @@ -368,14 +354,13 @@ func TestQueryAllAttributionNoBW(t *testing.T) { now := time.Now() projectID := testrand.UUID() - partnerID := testrand.UUID() userAgent := []byte("agent1") alphaBucket := []byte("alpha") betaBucket := []byte("beta") testData := []AttributionTestData{ { - name: "new partnerID, userAgent, projectID, alpha", - partnerID: testrand.UUID(), + name: "new partnerID, userAgent, projectID, alpha", + userAgent: []byte("agent2"), projectID: projectID, bucketName: alphaBucket, @@ -389,8 +374,8 @@ func TestQueryAllAttributionNoBW(t *testing.T) { padding: 2, }, { - name: "partnerID, userAgent, new projectID, alpha", - partnerID: partnerID, + name: "partnerID, userAgent, new projectID, alpha", + userAgent: userAgent, projectID: testrand.UUID(), bucketName: alphaBucket, @@ -404,8 +389,8 @@ func TestQueryAllAttributionNoBW(t *testing.T) { padding: 2, }, { - name: "new partnerID, userAgent, projectID, beta", - partnerID: testrand.UUID(), + name: "new partnerID, userAgent, projectID, beta", + userAgent: []byte("agent3"), projectID: projectID, bucketName: betaBucket, @@ -419,8 +404,8 @@ func TestQueryAllAttributionNoBW(t *testing.T) { padding: 2, }, { - name: "partnerID, userAgent new projectID, beta", - partnerID: partnerID, + name: "partnerID, userAgent new projectID, beta", + userAgent: userAgent, projectID: testrand.UUID(), bucketName: betaBucket, @@ -438,7 +423,7 @@ func TestQueryAllAttributionNoBW(t *testing.T) { td := td td.init() - info := attribution.Info{td.projectID, td.bucketName, td.partnerID, td.userAgent, time.Time{}} + info := attribution.Info{td.projectID, td.bucketName, td.userAgent, time.Time{}} _, err := db.Attribution().Insert(ctx, &info) require.NoError(t, err) @@ -452,7 +437,7 @@ func TestQueryAllAttributionNoBW(t *testing.T) { } func verifyData(ctx *testcontext.Context, t *testing.T, attributionDB attribution.DB, testData *AttributionTestData) { - results, err := attributionDB.QueryAttribution(ctx, testData.partnerID, testData.userAgent, testData.start, testData.end) + results, err := attributionDB.QueryAttribution(ctx, testData.userAgent, testData.start, testData.end) require.NoError(t, err) require.NotEqual(t, 0, len(results), "Results must not be empty.") count := 0 @@ -466,7 +451,6 @@ func verifyData(ctx *testcontext.Context, t *testing.T, attributionDB attributio } count++ - assert.Equal(t, testData.partnerID[:], r.PartnerID, testData.name) assert.Equal(t, testData.userAgent, r.UserAgent, testData.name) assert.Equal(t, testData.projectID[:], r.ProjectID, testData.name) assert.Equal(t, testData.bucketName, r.BucketName, testData.name) @@ -492,7 +476,6 @@ func verifyAllData(ctx *testcontext.Context, t *testing.T, attributionDB attribu } count++ - assert.Equal(t, tt.partnerID[:], r.PartnerID, tt.name) assert.Equal(t, tt.userAgent, r.UserAgent, tt.name) assert.Equal(t, tt.projectID[:], r.ProjectID, tt.name) assert.Equal(t, tt.bucketName, r.BucketName, tt.name) diff --git a/satellite/console/apikeys.go b/satellite/console/apikeys.go index 7acc68efc..1043dc026 100644 --- a/satellite/console/apikeys.go +++ b/satellite/console/apikeys.go @@ -53,7 +53,6 @@ type CreateAPIKeyResponse struct { type APIKeyInfo struct { ID uuid.UUID `json:"id"` ProjectID uuid.UUID `json:"projectId"` - PartnerID uuid.UUID `json:"partnerId"` UserAgent []byte `json:"userAgent"` Name string `json:"name"` Head []byte `json:"-"` diff --git a/satellite/console/attribution_test.go b/satellite/console/attribution_test.go index c1b6256b0..96e24ff6d 100644 --- a/satellite/console/attribution_test.go +++ b/satellite/console/attribution_test.go @@ -26,19 +26,8 @@ func TestUsers(t *testing.T) { // create user userPassHash := testrand.Bytes(8) - // create a user with partnerID - _, err := consoleDB.Users().Insert(ctx, &console.User{ - ID: testrand.UUID(), - FullName: "John Doe", - Email: "john@mail.test", - PasswordHash: userPassHash, - Status: console.Active, - PartnerID: testrand.UUID(), - }) - require.NoError(t, err) - // create an user with no partnerID - _, err = consoleDB.Users().Insert(ctx, &console.User{ + _, err := consoleDB.Users().Insert(ctx, &console.User{ ID: testrand.UUID(), FullName: "John Doe", Email: "john@mail.test", @@ -52,7 +41,6 @@ func TestUsers(t *testing.T) { ID: testrand.UUID(), Name: "John Doe", Description: "some description", - PartnerID: testrand.UUID(), CreatedAt: time.Now(), }) require.NoError(t, err) diff --git a/satellite/console/consoleweb/consoleapi/auth.go b/satellite/console/consoleweb/consoleapi/auth.go index 9e6d781f3..423e43701 100644 --- a/satellite/console/consoleweb/consoleapi/auth.go +++ b/satellite/console/consoleweb/consoleapi/auth.go @@ -24,7 +24,6 @@ import ( "storj.io/storj/satellite/console/consoleweb/consoleapi/utils" "storj.io/storj/satellite/console/consoleweb/consolewebauth" "storj.io/storj/satellite/mailservice" - "storj.io/storj/satellite/rewards" ) var ( @@ -59,11 +58,10 @@ type Auth struct { analytics *analytics.Service mailService *mailservice.Service cookieAuth *consolewebauth.CookieAuth - partners *rewards.PartnersService } // NewAuth is a constructor for api auth controller. -func NewAuth(log *zap.Logger, service *console.Service, accountFreezeService *console.AccountFreezeService, mailService *mailservice.Service, cookieAuth *consolewebauth.CookieAuth, partners *rewards.PartnersService, analytics *analytics.Service, satelliteName string, externalAddress string, letUsKnowURL string, termsAndConditionsURL string, contactInfoURL string, generalRequestURL string) *Auth { +func NewAuth(log *zap.Logger, service *console.Service, accountFreezeService *console.AccountFreezeService, mailService *mailservice.Service, cookieAuth *consolewebauth.CookieAuth, analytics *analytics.Service, satelliteName string, externalAddress string, letUsKnowURL string, termsAndConditionsURL string, contactInfoURL string, generalRequestURL string) *Auth { return &Auth{ log: log, ExternalAddress: externalAddress, @@ -79,7 +77,6 @@ func NewAuth(log *zap.Logger, service *console.Service, accountFreezeService *co accountFreezeService: accountFreezeService, mailService: mailService, cookieAuth: cookieAuth, - partners: partners, analytics: analytics, } } @@ -199,7 +196,6 @@ func (a *Auth) Register(w http.ResponseWriter, r *http.Request) { ShortName string `json:"shortName"` Email string `json:"email"` Partner string `json:"partner"` - PartnerID string `json:"partnerId"` UserAgent []byte `json:"userAgent"` Password string `json:"password"` SecretInput string `json:"secret"` @@ -283,12 +279,6 @@ func (a *Auth) Register(w http.ResponseWriter, r *http.Request) { if registerData.Partner != "" { registerData.UserAgent = []byte(registerData.Partner) - info, err := a.partners.ByName(ctx, registerData.Partner) - if err != nil { - a.log.Warn("Invalid partner name", zap.String("Partner name", registerData.Partner), zap.String("User email", registerData.Email), zap.Error(err)) - } else { - registerData.PartnerID = info.ID - } } ip, err := web.GetRequestIP(r) @@ -302,7 +292,6 @@ func (a *Auth) Register(w http.ResponseWriter, r *http.Request) { FullName: registerData.FullName, ShortName: registerData.ShortName, Email: registerData.Email, - PartnerID: registerData.PartnerID, UserAgent: registerData.UserAgent, Password: registerData.Password, IsProfessional: registerData.IsProfessional, @@ -453,7 +442,6 @@ func (a *Auth) GetAccount(w http.ResponseWriter, r *http.Request) { FullName string `json:"fullName"` ShortName string `json:"shortName"` Email string `json:"email"` - PartnerID uuid.UUID `json:"partnerId"` UserAgent []byte `json:"userAgent"` ProjectLimit int `json:"projectLimit"` IsProfessional bool `json:"isProfessional"` @@ -476,7 +464,6 @@ func (a *Auth) GetAccount(w http.ResponseWriter, r *http.Request) { user.FullName = consoleUser.FullName user.Email = consoleUser.Email user.ID = consoleUser.ID - user.PartnerID = consoleUser.PartnerID user.UserAgent = consoleUser.UserAgent user.ProjectLimit = consoleUser.ProjectLimit user.IsProfessional = consoleUser.IsProfessional diff --git a/satellite/console/consoleweb/consoleapi/auth_test.go b/satellite/console/consoleweb/consoleapi/auth_test.go index ae3cf2905..5f0631458 100644 --- a/satellite/console/consoleweb/consoleapi/auth_test.go +++ b/satellite/console/consoleweb/consoleapi/auth_test.go @@ -293,7 +293,7 @@ func TestDeleteAccount(t *testing.T) { actualHandler := func(r *http.Request) (status int, body []byte) { rr := httptest.NewRecorder() - authController := consoleapi.NewAuth(log, nil, nil, nil, nil, nil, nil, "", "", "", "", "", "") + authController := consoleapi.NewAuth(log, nil, nil, nil, nil, nil, "", "", "", "", "", "") authController.DeleteAccount(rr, r) //nolint:bodyclose diff --git a/satellite/console/consoleweb/consoleql/apikey.go b/satellite/console/consoleweb/consoleql/apikey.go index a1c9ef5c7..4ea4dc111 100644 --- a/satellite/console/consoleweb/consoleql/apikey.go +++ b/satellite/console/consoleweb/consoleql/apikey.go @@ -36,9 +36,6 @@ func graphqlAPIKeyInfo() *graphql.Object { FieldCreatedAt: &graphql.Field{ Type: graphql.DateTime, }, - FieldPartnerID: &graphql.Field{ - Type: graphql.String, - }, }, }) } diff --git a/satellite/console/consoleweb/consoleql/mutation_test.go b/satellite/console/consoleweb/consoleql/mutation_test.go index 1b41b2c2e..6f9af77f9 100644 --- a/satellite/console/consoleweb/consoleql/mutation_test.go +++ b/satellite/console/consoleweb/consoleql/mutation_test.go @@ -31,7 +31,6 @@ import ( "storj.io/storj/satellite/payments" "storj.io/storj/satellite/payments/paymentsconfig" "storj.io/storj/satellite/payments/stripecoinpayments" - "storj.io/storj/satellite/rewards" ) // discardSender discard sending of an actual email. @@ -53,11 +52,6 @@ func TestGraphqlMutation(t *testing.T) { db := sat.DB log := zaptest.NewLogger(t) - partnersService := rewards.NewPartnersService( - log.Named("partners"), - rewards.DefaultPartnersDB, - ) - analyticsService := analytics.NewService(log, analytics.Config{}, "test-satellite") redis, err := testredis.Mini(ctx) @@ -112,7 +106,6 @@ func TestGraphqlMutation(t *testing.T) { db.ProjectAccounting(), projectUsage, sat.API.Buckets.Service, - partnersService, paymentsService.Accounts(), // TODO: do we need a payment deposit wallet here? nil, @@ -242,7 +235,7 @@ func TestGraphqlMutation(t *testing.T) { project, err := service.GetProject(userCtx, projectID) require.NoError(t, err) - require.Equal(t, rootUser.PartnerID, project.PartnerID) + require.Equal(t, rootUser.UserAgent, project.UserAgent) regTokenUser1, err := service.CreateRegToken(ctx, 1) require.NoError(t, err) @@ -345,7 +338,7 @@ func TestGraphqlMutation(t *testing.T) { t.Run("Create api key mutation", func(t *testing.T) { keyName := "key1" query := fmt.Sprintf( - "mutation {createAPIKey(projectID:\"%s\",name:\"%s\"){key,keyInfo{id,name,projectID,partnerId}}}", + "mutation {createAPIKey(projectID:\"%s\",name:\"%s\"){key,keyInfo{id,name,projectID}}}", project.ID.String(), keyName, ) @@ -363,7 +356,6 @@ func TestGraphqlMutation(t *testing.T) { assert.Equal(t, keyName, keyInfo[consoleql.FieldName]) assert.Equal(t, project.ID.String(), keyInfo[consoleql.FieldProjectID]) - assert.Equal(t, rootUser.PartnerID.String(), keyInfo[consoleql.FieldPartnerID]) keyID = keyInfo[consoleql.FieldID].(string) }) diff --git a/satellite/console/consoleweb/consoleql/query_test.go b/satellite/console/consoleweb/consoleql/query_test.go index 49fcd8509..3bc3d1d42 100644 --- a/satellite/console/consoleweb/consoleql/query_test.go +++ b/satellite/console/consoleweb/consoleql/query_test.go @@ -28,7 +28,6 @@ import ( "storj.io/storj/satellite/payments" "storj.io/storj/satellite/payments/paymentsconfig" "storj.io/storj/satellite/payments/stripecoinpayments" - "storj.io/storj/satellite/rewards" ) func TestGraphqlQuery(t *testing.T) { @@ -37,11 +36,6 @@ func TestGraphqlQuery(t *testing.T) { db := sat.DB log := zaptest.NewLogger(t) - partnersService := rewards.NewPartnersService( - log.Named("partners"), - rewards.DefaultPartnersDB, - ) - analyticsService := analytics.NewService(log, analytics.Config{}, "test-satellite") redis, err := testredis.Mini(ctx) @@ -96,7 +90,6 @@ func TestGraphqlQuery(t *testing.T) { db.ProjectAccounting(), projectUsage, sat.API.Buckets.Service, - partnersService, paymentsService.Accounts(), // TODO: do we need a payment deposit wallet here? nil, diff --git a/satellite/console/consoleweb/consoleql/user.go b/satellite/console/consoleweb/consoleql/user.go index 0ac76b1bb..b810ecc14 100644 --- a/satellite/console/consoleweb/consoleql/user.go +++ b/satellite/console/consoleweb/consoleql/user.go @@ -24,8 +24,6 @@ const ( FieldShortName = "shortName" // FieldCreatedAt is a field name for created at timestamp. FieldCreatedAt = "createdAt" - // FieldPartnerID is a field name for partnerID. - FieldPartnerID = "partnerId" ) // base graphql config for user. @@ -48,9 +46,6 @@ func baseUserConfig() graphql.ObjectConfig { FieldCreatedAt: &graphql.Field{ Type: graphql.DateTime, }, - FieldPartnerID: &graphql.Field{ - Type: graphql.String, - }, }, } } @@ -78,9 +73,6 @@ func graphqlUserInput() *graphql.InputObject { FieldPassword: &graphql.InputObjectFieldConfig{ Type: graphql.String, }, - FieldPartnerID: &graphql.InputObjectFieldConfig{ - Type: graphql.String, - }, }, }) } diff --git a/satellite/console/consoleweb/server.go b/satellite/console/consoleweb/server.go index 6a73fc8a8..72302ef3f 100644 --- a/satellite/console/consoleweb/server.go +++ b/satellite/console/consoleweb/server.go @@ -42,7 +42,6 @@ import ( "storj.io/storj/satellite/console/consoleweb/consolewebauth" "storj.io/storj/satellite/mailservice" "storj.io/storj/satellite/oidc" - "storj.io/storj/satellite/rewards" ) const ( @@ -120,7 +119,6 @@ type Server struct { config Config service *console.Service mailService *mailservice.Service - partners *rewards.PartnersService analytics *analytics.Service abTesting *abtesting.Service @@ -202,14 +200,13 @@ func (a *apiAuth) RemoveAuthCookie(w http.ResponseWriter) { } // NewServer creates new instance of console server. -func NewServer(logger *zap.Logger, config Config, service *console.Service, oidcService *oidc.Service, mailService *mailservice.Service, partners *rewards.PartnersService, analytics *analytics.Service, abTesting *abtesting.Service, accountFreezeService *console.AccountFreezeService, listener net.Listener, stripePublicKey string, nodeURL storj.NodeURL) *Server { +func NewServer(logger *zap.Logger, config Config, service *console.Service, oidcService *oidc.Service, mailService *mailservice.Service, analytics *analytics.Service, abTesting *abtesting.Service, accountFreezeService *console.AccountFreezeService, listener net.Listener, stripePublicKey string, nodeURL storj.NodeURL) *Server { server := Server{ log: logger, config: config, listener: listener, service: service, mailService: mailService, - partners: partners, analytics: analytics, abTesting: abTesting, stripePublicKey: stripePublicKey, @@ -273,7 +270,7 @@ func NewServer(logger *zap.Logger, config Config, service *console.Service, oidc server.withAuth(http.HandlerFunc(usageLimitsController.DailyUsage)), ).Methods(http.MethodGet) - authController := consoleapi.NewAuth(logger, service, accountFreezeService, mailService, server.cookieAuth, partners, server.analytics, config.SatelliteName, server.config.ExternalAddress, config.LetUsKnowURL, config.TermsAndConditionsURL, config.ContactInfoURL, config.GeneralRequestURL) + authController := consoleapi.NewAuth(logger, service, accountFreezeService, mailService, server.cookieAuth, server.analytics, config.SatelliteName, server.config.ExternalAddress, config.LetUsKnowURL, config.TermsAndConditionsURL, config.ContactInfoURL, config.GeneralRequestURL) authRouter := router.PathPrefix("/api/v0/auth").Subrouter() authRouter.Handle("/account", server.withAuth(http.HandlerFunc(authController.GetAccount))).Methods(http.MethodGet) authRouter.Handle("/account", server.withAuth(http.HandlerFunc(authController.UpdateAccount))).Methods(http.MethodPatch) diff --git a/satellite/console/emailreminders/chore.go b/satellite/console/emailreminders/chore.go index 17e90b40a..b4b57a425 100644 --- a/satellite/console/emailreminders/chore.go +++ b/satellite/console/emailreminders/chore.go @@ -87,7 +87,7 @@ func (chore *Chore) Run(ctx context.Context) (err error) { chore.log.Error("error generating activation token", zap.Error(err)) return nil } - authController := consoleapi.NewAuth(chore.log, nil, nil, nil, nil, nil, nil, "", chore.address, "", "", "", "") + authController := consoleapi.NewAuth(chore.log, nil, nil, nil, nil, nil, "", chore.address, "", "", "", "") link := authController.ActivateAccountURL + "?token=" + token userName := u.ShortName diff --git a/satellite/console/projects.go b/satellite/console/projects.go index 443b86b7b..32262df0c 100644 --- a/satellite/console/projects.go +++ b/satellite/console/projects.go @@ -102,7 +102,6 @@ type Project struct { Name string `json:"name"` Description string `json:"description"` - PartnerID uuid.UUID `json:"partnerId"` UserAgent []byte `json:"userAgent"` OwnerID uuid.UUID `json:"ownerId"` RateLimit *int `json:"rateLimit"` diff --git a/satellite/console/service.go b/satellite/console/service.go index adfdc676f..2e7aa4811 100644 --- a/satellite/console/service.go +++ b/satellite/console/service.go @@ -38,7 +38,6 @@ import ( "storj.io/storj/satellite/mailservice" "storj.io/storj/satellite/payments" "storj.io/storj/satellite/payments/billing" - "storj.io/storj/satellite/rewards" ) var mon = monkit.Package() @@ -135,7 +134,6 @@ type Service struct { projectAccounting accounting.ProjectAccounting projectUsage *accounting.Service buckets buckets.DB - partners *rewards.PartnersService accounts payments.Accounts depositWallets payments.DepositWallets billing billing.TransactionsDB @@ -208,7 +206,7 @@ type Payments struct { } // NewService returns new instance of Service. -func NewService(log *zap.Logger, store DB, restKeys RESTKeys, projectAccounting accounting.ProjectAccounting, projectUsage *accounting.Service, buckets buckets.DB, partners *rewards.PartnersService, accounts payments.Accounts, depositWallets payments.DepositWallets, billing billing.TransactionsDB, analytics *analytics.Service, tokens *consoleauth.Service, mailService *mailservice.Service, satelliteAddress string, config Config) (*Service, error) { +func NewService(log *zap.Logger, store DB, restKeys RESTKeys, projectAccounting accounting.ProjectAccounting, projectUsage *accounting.Service, buckets buckets.DB, accounts payments.Accounts, depositWallets payments.DepositWallets, billing billing.TransactionsDB, analytics *analytics.Service, tokens *consoleauth.Service, mailService *mailservice.Service, satelliteAddress string, config Config) (*Service, error) { if store == nil { return nil, errs.New("store can't be nil") } @@ -244,7 +242,6 @@ func NewService(log *zap.Logger, store DB, restKeys RESTKeys, projectAccounting projectAccounting: projectAccounting, projectUsage: projectUsage, buckets: buckets, - partners: partners, accounts: accounts, depositWallets: depositWallets, billing: billing, @@ -1220,7 +1217,6 @@ func (s *Service) GenGetUser(ctx context.Context) (*ResponseUser, api.HTTPError) FullName: user.FullName, ShortName: user.ShortName, Email: user.Email, - PartnerID: user.PartnerID, UserAgent: user.UserAgent, ProjectLimit: user.ProjectLimit, IsProfessional: user.IsProfessional, @@ -1512,7 +1508,6 @@ func (s *Service) CreateProject(ctx context.Context, projectInfo ProjectInfo) (p Description: projectInfo.Description, Name: projectInfo.Name, OwnerID: user.ID, - PartnerID: user.PartnerID, UserAgent: user.UserAgent, StorageLimit: &storageLimit, BandwidthLimit: &bandwidthLimit, @@ -1580,7 +1575,6 @@ func (s *Service) GenCreateProject(ctx context.Context, projectInfo ProjectInfo) Description: projectInfo.Description, Name: projectInfo.Name, OwnerID: user.ID, - PartnerID: user.PartnerID, UserAgent: user.UserAgent, StorageLimit: &storageLimit, BandwidthLimit: &bandwidthLimit, @@ -2045,7 +2039,6 @@ func (s *Service) CreateAPIKey(ctx context.Context, projectID uuid.UUID, name st Name: name, ProjectID: projectID, Secret: secret, - PartnerID: user.PartnerID, UserAgent: user.UserAgent, } @@ -2116,7 +2109,6 @@ func (s *Service) GenCreateAPIKey(ctx context.Context, requestInfo CreateAPIKeyR Name: requestInfo.Name, ProjectID: projectID, Secret: secret, - PartnerID: user.PartnerID, UserAgent: user.UserAgent, } diff --git a/satellite/console/users.go b/satellite/console/users.go index cf772b7b1..7d1dc4ce2 100644 --- a/satellite/console/users.go +++ b/satellite/console/users.go @@ -71,7 +71,6 @@ type CreateUser struct { FullName string `json:"fullName"` ShortName string `json:"shortName"` Email string `json:"email"` - PartnerID string `json:"partnerId"` UserAgent []byte `json:"userAgent"` Password string `json:"password"` IsProfessional bool `json:"isProfessional"` @@ -99,13 +98,6 @@ func (user *CreateUser) IsValid() error { _, err := mail.ParseAddress(user.Email) errgrp.Add(err) - if user.PartnerID != "" { - _, err := uuid.FromString(user.PartnerID) - if err != nil { - errgrp.Add(err) - } - } - return ErrValidation.Wrap(errgrp.Err()) } @@ -156,7 +148,6 @@ type User struct { PasswordHash []byte `json:"passwordHash"` Status UserStatus `json:"status"` - PartnerID uuid.UUID `json:"partnerId"` UserAgent []byte `json:"userAgent"` CreatedAt time.Time `json:"createdAt"` @@ -195,7 +186,6 @@ type ResponseUser struct { FullName string `json:"fullName"` ShortName string `json:"shortName"` Email string `json:"email"` - PartnerID uuid.UUID `json:"partnerId"` UserAgent []byte `json:"userAgent"` ProjectLimit int `json:"projectLimit"` IsProfessional bool `json:"isProfessional"` diff --git a/satellite/console/users_test.go b/satellite/console/users_test.go index 01462e702..c4191693b 100644 --- a/satellite/console/users_test.go +++ b/satellite/console/users_test.go @@ -43,21 +43,8 @@ const ( func TestUserRepository(t *testing.T) { satellitedbtest.Run(t, func(ctx *testcontext.Context, t *testing.T, db satellite.DB) { repository := db.Console().Users() - partnerID := testrand.UUID() - // Test with and without partnerID user := &console.User{ - ID: testrand.UUID(), - FullName: name, - ShortName: lastName, - Email: email, - PartnerID: partnerID, - PasswordHash: []byte(passValid), - CreatedAt: time.Now(), - } - testUsers(ctx, t, repository, user) - - user = &console.User{ ID: testrand.UUID(), FullName: name, ShortName: lastName, @@ -191,7 +178,6 @@ func testUsers(ctx context.Context, t *testing.T, repository console.Users, user assert.NoError(t, err) assert.Equal(t, name, userByEmail.FullName) assert.Equal(t, lastName, userByEmail.ShortName) - assert.Equal(t, user.PartnerID, userByEmail.PartnerID) assert.Equal(t, user.SignupPromoCode, userByEmail.SignupPromoCode) assert.False(t, user.PaidTier) assert.False(t, user.MFAEnabled) @@ -214,7 +200,6 @@ func testUsers(ctx context.Context, t *testing.T, repository console.Users, user assert.NoError(t, err) assert.Equal(t, name, userByID.FullName) assert.Equal(t, lastName, userByID.ShortName) - assert.Equal(t, user.PartnerID, userByID.PartnerID) assert.Equal(t, user.SignupPromoCode, userByID.SignupPromoCode) assert.False(t, user.MFAEnabled) assert.Empty(t, user.MFASecretKey) @@ -237,7 +222,6 @@ func testUsers(ctx context.Context, t *testing.T, repository console.Users, user assert.Equal(t, userByID.ShortName, userByEmail.ShortName) assert.Equal(t, userByID.Email, userByEmail.Email) assert.Equal(t, userByID.PasswordHash, userByEmail.PasswordHash) - assert.Equal(t, userByID.PartnerID, userByEmail.PartnerID) assert.Equal(t, userByID.CreatedAt, userByEmail.CreatedAt) assert.Equal(t, userByID.IsProfessional, userByEmail.IsProfessional) assert.Equal(t, userByID.WorkingOn, userByEmail.WorkingOn) @@ -291,8 +275,6 @@ func testUsers(ctx context.Context, t *testing.T, repository console.Users, user assert.True(t, newUser.MFAEnabled) assert.Equal(t, mfaSecretKey, newUser.MFASecretKey) assert.Equal(t, newUserInfo.MFARecoveryCodes, newUser.MFARecoveryCodes) - // PartnerID should not change - assert.Equal(t, user.PartnerID, newUser.PartnerID) assert.Equal(t, oldUser.CreatedAt, newUser.CreatedAt) }) diff --git a/satellite/metainfo/attribution.go b/satellite/metainfo/attribution.go index 08bd33563..2e501de01 100644 --- a/satellite/metainfo/attribution.go +++ b/satellite/metainfo/attribution.go @@ -33,7 +33,7 @@ func (endpoint *Endpoint) ensureAttribution(ctx context.Context, header *pb.Requ if header == nil { return rpcstatus.Error(rpcstatus.InvalidArgument, "header is nil") } - if keyInfo.PartnerID.IsZero() && len(header.UserAgent) == 0 && len(keyInfo.UserAgent) == 0 && len(projectUserAgent) == 0 { + if len(header.UserAgent) == 0 && len(keyInfo.UserAgent) == 0 && len(projectUserAgent) == 0 { return nil } @@ -47,14 +47,13 @@ func (endpoint *Endpoint) ensureAttribution(ctx context.Context, header *pb.Requ } } - partnerID := keyInfo.PartnerID userAgent := keyInfo.UserAgent if len(projectUserAgent) > 0 { userAgent = projectUserAgent } // first check keyInfo (user) attribution - if partnerID.IsZero() && userAgent == nil { + if userAgent == nil { // otherwise, use header (partner tool) as attribution userAgent = header.UserAgent } @@ -64,7 +63,7 @@ func (endpoint *Endpoint) ensureAttribution(ctx context.Context, header *pb.Requ return err } - err = endpoint.tryUpdateBucketAttribution(ctx, header, keyInfo.ProjectID, bucketName, partnerID, userAgent) + err = endpoint.tryUpdateBucketAttribution(ctx, header, keyInfo.ProjectID, bucketName, userAgent) if errs2.IsRPC(err, rpcstatus.NotFound) || errs2.IsRPC(err, rpcstatus.AlreadyExists) { return nil } @@ -112,7 +111,7 @@ func TrimUserAgent(userAgent []byte) ([]byte, error) { return userAgent, nil } -func (endpoint *Endpoint) tryUpdateBucketAttribution(ctx context.Context, header *pb.RequestHeader, projectID uuid.UUID, bucketName []byte, partnerID uuid.UUID, userAgent []byte) (err error) { +func (endpoint *Endpoint) tryUpdateBucketAttribution(ctx context.Context, header *pb.RequestHeader, projectID uuid.UUID, bucketName []byte, userAgent []byte) (err error) { defer mon.Task()(&ctx)(&err) if header == nil { @@ -137,7 +136,7 @@ func (endpoint *Endpoint) tryUpdateBucketAttribution(ctx context.Context, header return rpcstatus.Error(rpcstatus.Internal, Error.Wrap(err).Error()) } if !empty { - return rpcstatus.Errorf(rpcstatus.AlreadyExists, "bucket %q is not empty, PartnerID %q cannot be attributed", bucketName, partnerID) + return rpcstatus.Errorf(rpcstatus.AlreadyExists, "bucket %q is not empty, Partner %q cannot be attributed", bucketName, userAgent) } // checks if bucket exists before updates it or makes a new entry @@ -149,12 +148,11 @@ func (endpoint *Endpoint) tryUpdateBucketAttribution(ctx context.Context, header endpoint.log.Error("error while getting bucket", zap.ByteString("bucketName", bucketName), zap.Error(err)) return rpcstatus.Error(rpcstatus.Internal, "unable to set bucket attribution") } - if !bucket.PartnerID.IsZero() || bucket.UserAgent != nil { - return rpcstatus.Errorf(rpcstatus.AlreadyExists, "bucket %q already has attribution, PartnerID %q cannot be attributed", bucketName, partnerID) + if bucket.UserAgent != nil { + return rpcstatus.Errorf(rpcstatus.AlreadyExists, "bucket %q already has attribution, Partner %q cannot be attributed", bucketName, userAgent) } // update bucket information - bucket.PartnerID = partnerID bucket.UserAgent = userAgent _, err = endpoint.buckets.UpdateBucket(ctx, bucket) if err != nil { @@ -166,7 +164,6 @@ func (endpoint *Endpoint) tryUpdateBucketAttribution(ctx context.Context, header _, err = endpoint.attributions.Insert(ctx, &attribution.Info{ ProjectID: projectID, BucketName: bucketName, - PartnerID: partnerID, UserAgent: userAgent, }) if err != nil { diff --git a/satellite/metainfo/attribution_test.go b/satellite/metainfo/attribution_test.go index 3563f58b1..7da468761 100644 --- a/satellite/metainfo/attribution_test.go +++ b/satellite/metainfo/attribution_test.go @@ -84,7 +84,6 @@ func TestBucketAttribution(t *testing.T) { user1, err := satellite.AddUser(ctx, console.CreateUser{ FullName: "Test User " + strconv.Itoa(i), Email: "user@test" + strconv.Itoa(i), - PartnerID: "", UserAgent: tt.signupPartner, }, 1) require.NoError(t, err, errTag) @@ -161,7 +160,6 @@ func TestQueryAttribution(t *testing.T) { user, err := satellite.AddUser(ctx, console.CreateUser{ FullName: "user@test", Email: "user@test", - PartnerID: "", UserAgent: []byte(userAgent), }, 1) require.NoError(t, err) @@ -228,12 +226,10 @@ func TestQueryAttribution(t *testing.T) { require.NoError(t, err) require.NotZero(t, usage.Egress) - partner, _ := planet.Satellites[0].API.Marketing.PartnersService.ByName(ctx, "") - userAgent := []byte("Minio") require.NoError(t, err) - rows, err := planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, partner.UUID, userAgent, before, after) + rows, err := planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, userAgent, before, after) require.NoError(t, err) require.NotZero(t, rows[0].ByteHours) require.Equal(t, rows[0].EgressData, usage.Egress) @@ -312,17 +308,13 @@ func TestAttributionReport(t *testing.T) { require.NoError(t, err) require.NotZero(t, usage.Egress) - partner, _ := planet.Satellites[0].API.Marketing.PartnersService.ByUserAgent(ctx, "") - - rows, err := planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, partner.UUID, []byte(zenkoStr), before, after) + rows, err := planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, []byte(zenkoStr), before, after) require.NoError(t, err) require.NotZero(t, rows[0].ByteHours) require.Equal(t, rows[0].EgressData, usage.Egress) // Minio should have no attribution because bucket was created by Zenko - partner, _ = planet.Satellites[0].API.Marketing.PartnersService.ByUserAgent(ctx, "") - - rows, err = planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, partner.UUID, []byte(minioStr), before, after) + rows, err = planet.Satellites[0].DB.Attribution().QueryAttribution(ctx, []byte(minioStr), before, after) require.NoError(t, err) require.Empty(t, rows) diff --git a/satellite/metainfo/endpoint.go b/satellite/metainfo/endpoint.go index f72017491..ae04884bd 100644 --- a/satellite/metainfo/endpoint.go +++ b/satellite/metainfo/endpoint.go @@ -29,7 +29,6 @@ import ( "storj.io/storj/satellite/orders" "storj.io/storj/satellite/overlay" "storj.io/storj/satellite/revocation" - "storj.io/storj/satellite/rewards" ) const ( @@ -66,7 +65,6 @@ type Endpoint struct { orders *orders.Service overlay *overlay.Service attributions attribution.DB - partners *rewards.PartnersService pointerVerification *pointerverification.Service projectUsage *accounting.Service projects console.Projects @@ -83,7 +81,7 @@ type Endpoint struct { // NewEndpoint creates new metainfo endpoint instance. func NewEndpoint(log *zap.Logger, buckets *buckets.Service, metabaseDB *metabase.DB, deletePieces *piecedeletion.Service, orders *orders.Service, cache *overlay.Service, - attributions attribution.DB, partners *rewards.PartnersService, peerIdentities overlay.PeerIdentities, + attributions attribution.DB, peerIdentities overlay.PeerIdentities, apiKeys APIKeys, projectUsage *accounting.Service, projects console.Projects, satellite signing.Signer, revocations revocation.DB, config Config) (*Endpoint, error) { // TODO do something with too many params @@ -113,7 +111,6 @@ func NewEndpoint(log *zap.Logger, buckets *buckets.Service, metabaseDB *metabase orders: orders, overlay: cache, attributions: attributions, - partners: partners, pointerVerification: pointerverification.NewService(peerIdentities), apiKeys: apiKeys, projectUsage: projectUsage, diff --git a/satellite/metainfo/validation.go b/satellite/metainfo/validation.go index 834f244c8..fd7fcd02c 100644 --- a/satellite/metainfo/validation.go +++ b/satellite/metainfo/validation.go @@ -166,7 +166,7 @@ func (endpoint *Endpoint) validateBasic(ctx context.Context, header *pb.RequestH ek.Event("auth", eventkit.String("user-agent", userAgent), eventkit.String("project", keyInfo.ProjectID.String()), - eventkit.String("partner", keyInfo.PartnerID.String()), + eventkit.String("partner", string(keyInfo.UserAgent)), ) if err = endpoint.checkRate(ctx, keyInfo.ProjectID); err != nil { diff --git a/satellite/payments/stripecoinpayments/accounts_test.go b/satellite/payments/stripecoinpayments/accounts_test.go index 080133a11..b83b72342 100644 --- a/satellite/payments/stripecoinpayments/accounts_test.go +++ b/satellite/payments/stripecoinpayments/accounts_test.go @@ -23,7 +23,6 @@ import ( "storj.io/storj/satellite/payments" "storj.io/storj/satellite/payments/paymentsconfig" "storj.io/storj/satellite/payments/stripecoinpayments" - "storj.io/storj/satellite/rewards" ) func TestSignupCouponCodes(t *testing.T) { @@ -32,11 +31,6 @@ func TestSignupCouponCodes(t *testing.T) { db := sat.DB log := zaptest.NewLogger(t) - partnersService := rewards.NewPartnersService( - log.Named("partners"), - rewards.DefaultPartnersDB, - ) - analyticsService := analytics.NewService(log, analytics.Config{}, "test-satellite") redis, err := testredis.Mini(ctx) @@ -90,7 +84,6 @@ func TestSignupCouponCodes(t *testing.T) { db.ProjectAccounting(), projectUsage, sat.API.Buckets.Service, - partnersService, paymentsService.Accounts(), // TODO: do we need a payment deposit wallet here? nil, diff --git a/satellite/rewards/partner.go b/satellite/rewards/partner.go deleted file mode 100644 index 46e5f60ab..000000000 --- a/satellite/rewards/partner.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2019 Storj Labs, Inc. -// See LICENSE for copying information. - -package rewards - -import ( - "encoding/json" - "os" - "strings" - - "github.com/zeebo/errs" - - "storj.io/common/uuid" -) - -// PartnerList defines a json struct for defining partners. -type PartnerList struct { - Partners []PartnerInfo -} - -// PartnerInfo contains information about a partner. -type PartnerInfo struct { - Name string - ID string - UUID uuid.UUID -} - -// UserAgent returns canonical user agent. -func (p *PartnerInfo) UserAgent() string { return p.Name } - -// CanonicalUserAgentProduct returns canonicalizes the user agent product, which is suitable for lookups. -func CanonicalUserAgentProduct(product string) string { return strings.ToLower(product) } - -// PartnersListFromJSONFile loads a json definition of partners. -func PartnersListFromJSONFile(path string) (*PartnerList, error) { - file, err := os.Open(path) - if err != nil { - return nil, ErrPartners.Wrap(err) - } - defer func() { - err = errs.Combine(err, ErrPartners.Wrap(file.Close())) - }() - - var list PartnerList - err = json.NewDecoder(file).Decode(&list) - return &list, ErrPartners.Wrap(err) -} diff --git a/satellite/rewards/partners.go b/satellite/rewards/partners.go deleted file mode 100644 index 401633031..000000000 --- a/satellite/rewards/partners.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright (C) 2019 Storj Labs, Inc. -// See LICENSE for copying information. - -package rewards - -import "storj.io/common/uuid" - -// DefaultPartnersDB is current default settings. -var DefaultPartnersDB = func() PartnersDB { - list := DefaultPartners() - db, err := NewPartnersStaticDB(&list) - if err != nil { - panic(err) - } - return db -}() - -// parseUUID parse string to UUID, should be used ONLY with hardcoded partner UUID's. -func parseUUID(s string) uuid.UUID { - u, err := uuid.FromString(s) - if err != nil { - panic(err) - } - return u -} - -// DefaultPartners lists Storj default open-source partners. -func DefaultPartners() PartnerList { - return PartnerList{ - Partners: []PartnerInfo{{ - Name: "Blocknify", - ID: "120bf202-8252-437e-ac12-0e364bee852e", - UUID: parseUUID("120bf202-8252-437e-ac12-0e364bee852e"), - }, { - Name: "Breaker", - ID: "53688ea5-8695-4060-a2c6-b56969217909", - UUID: parseUUID("53688ea5-8695-4060-a2c6-b56969217909"), - }, { - Name: "CloudBloq", - ID: "ba1feac3-5457-4fd0-bba3-9c7e673902ca", - UUID: parseUUID("ba1feac3-5457-4fd0-bba3-9c7e673902ca"), - }, { - Name: "Confluent", - ID: "2fb801c6-a6d7-4d82-a838-32fef98cc398", - UUID: parseUUID("2fb801c6-a6d7-4d82-a838-32fef98cc398"), - }, { - Name: "Consensys", - ID: "e28c8847-b323-4a7d-8111-25a0578a58bb", - UUID: parseUUID("e28c8847-b323-4a7d-8111-25a0578a58bb"), - }, { - Name: "Couchbase", - ID: "0af89ac1-0189-42c6-a47c-e169780b3818", - UUID: parseUUID("0af89ac1-0189-42c6-a47c-e169780b3818"), - }, { - Name: "Digital Ocean", - ID: "881b92f6-77aa-42ee-961a-b80009d45dd8", - UUID: parseUUID("881b92f6-77aa-42ee-961a-b80009d45dd8"), - }, { - Name: "Deloitte", - ID: "cadac3fb-6a3f-4d17-9748-cc66d0617d55", - UUID: parseUUID("cadac3fb-6a3f-4d17-9748-cc66d0617d55"), - }, { - Name: "Duplicati", - ID: "261e368e-d888-4d8e-8aa7-694aed20043a", - UUID: parseUUID("261e368e-d888-4d8e-8aa7-694aed20043a"), - }, { - Name: "DVLabs", - ID: "53fb82d7-73ff-4a1a-ab0c-6968cffc850e", - UUID: parseUUID("53fb82d7-73ff-4a1a-ab0c-6968cffc850e"), - }, { - Name: "Fastly", - ID: "464699ba-301a-4c92-a740-692926d57661", - UUID: parseUUID("464699ba-301a-4c92-a740-692926d57661"), - }, { - Name: "Fluree", - ID: "86c33256-cded-434c-aaac-405343974394", - UUID: parseUUID("86c33256-cded-434c-aaac-405343974394"), - }, { - Name: "Flexential", - ID: "3e1b911a-c778-47ea-878c-9f3f264f8bc1", - UUID: parseUUID("3e1b911a-c778-47ea-878c-9f3f264f8bc1"), - }, { - Name: "GroundX", - ID: "e56c6a65-d5bf-457a-a414-e55c36624f73", - UUID: parseUUID("e56c6a65-d5bf-457a-a414-e55c36624f73"), - }, { - Name: "Heroku", - ID: "706011f3-400e-45eb-a796-90cce2a7d67e", - UUID: parseUUID("706011f3-400e-45eb-a796-90cce2a7d67e"), - }, { - Name: "Hypernet", - ID: "5abfc372-1d59-44fa-bbcc-bc3aa03a9542", - UUID: parseUUID("5abfc372-1d59-44fa-bbcc-bc3aa03a9542"), - }, { - Name: "Infura", - ID: "1519bdee-ed18-45fe-86c6-4c7fa9668a14", - UUID: parseUUID("1519bdee-ed18-45fe-86c6-4c7fa9668a14"), - }, { - Name: "Innovoedge", - ID: "bc1276a5-4ba8-4761-a164-e5a4a9f8593c", - UUID: parseUUID("bc1276a5-4ba8-4761-a164-e5a4a9f8593c"), - }, { - Name: "Jaxcom", - ID: "efb7b35a-9765-4e74-855f-5004336dc951", - UUID: parseUUID("efb7b35a-9765-4e74-855f-5004336dc951"), - }, { - Name: "key4web", - ID: "9af99cf8-d68b-48c8-95ab-ef39641b8b06", - UUID: parseUUID("9af99cf8-d68b-48c8-95ab-ef39641b8b06"), - }, { - Name: "MariaDB", - ID: "8ee019ef-2aae-4867-9c18-41c65ea318c4", - UUID: parseUUID("8ee019ef-2aae-4867-9c18-41c65ea318c4"), - }, { - Name: "MAXN", - ID: "3934efec-2857-4703-8ce3-aabf2d3285c4", - UUID: parseUUID("3934efec-2857-4703-8ce3-aabf2d3285c4"), - }, { - Name: "MongoDB", - ID: "bbd340b2-0ae4-4254-af90-eaba6c273abb", - UUID: parseUUID("bbd340b2-0ae4-4254-af90-eaba6c273abb"), - }, { - Name: "Netki", - ID: "3405a882-0cb2-4f91-a6e0-21be193b80e5", - UUID: parseUUID("3405a882-0cb2-4f91-a6e0-21be193b80e5"), - }, { - Name: "FileZilla", - ID: "a1ba07a4-e095-4a43-914c-1d56c9ff5afd", - UUID: parseUUID("a1ba07a4-e095-4a43-914c-1d56c9ff5afd"), - }, { - Name: "InfluxDB", - ID: "e50a17b3-4d82-4da7-8719-09312a83685d", - UUID: parseUUID("e50a17b3-4d82-4da7-8719-09312a83685d"), - }, { - Name: "Mysterium Network", - ID: "c10228c2-af70-4e4d-be49-e8bfbe9ca8ef", - UUID: parseUUID("c10228c2-af70-4e4d-be49-e8bfbe9ca8ef"), - }, { - Name: "Kafka", - ID: "OSPP005", - }, { - Name: "Kesque", - ID: "c6b01830-920c-4895-93f5-c0bd74fb44d8", - UUID: parseUUID("c6b01830-920c-4895-93f5-c0bd74fb44d8"), - }, { - Name: "Minio", - ID: "5bffe844-5da7-4aa9-bf37-7d695cf819f2", - UUID: parseUUID("5bffe844-5da7-4aa9-bf37-7d695cf819f2"), - }, { - Name: "MSP360", - ID: "f184948c-06e8-4edb-9a19-96667572d120", - UUID: parseUUID("f184948c-06e8-4edb-9a19-96667572d120"), - }, { - Name: "Nextcloud", - ID: "42f588fb-f39d-4886-81af-b614ca16ce37", - UUID: parseUUID("42f588fb-f39d-4886-81af-b614ca16ce37"), - }, { - Name: "Node Haven", - ID: "3b53a9b3-2005-476c-9ffd-894ed832abe4", - UUID: parseUUID("3b53a9b3-2005-476c-9ffd-894ed832abe4"), - }, { - Name: "Plesk", - ID: "dc01ed96-2990-4819-9cb3-45d4846b9ad1", - UUID: parseUUID("dc01ed96-2990-4819-9cb3-45d4846b9ad1"), - }, { - Name: "Pydio", - ID: "b02b9f0d-fac7-439c-8ba2-0c4634d5826f", - UUID: parseUUID("b02b9f0d-fac7-439c-8ba2-0c4634d5826f"), - }, { - Name: "Raiden Network", - ID: "57855387-5a58-4a2b-97d2-15b1d76eea3c", - UUID: parseUUID("57855387-5a58-4a2b-97d2-15b1d76eea3c"), - }, { - Name: "Rclone", - ID: "f746681d-91c1-4226-85c5-0cea4b66473b", - UUID: parseUUID("f746681d-91c1-4226-85c5-0cea4b66473b"), - }, { - Name: "Restic", - ID: "c59d86e9-3d23-406c-a97a-9751b552df75", - UUID: parseUUID("c59d86e9-3d23-406c-a97a-9751b552df75"), - }, { - Name: "Satoshi Soup", - ID: "4400d796-3777-4964-8536-22a4ae439ed3", - UUID: parseUUID("4400d796-3777-4964-8536-22a4ae439ed3"), - }, { - Name: "SeaweedFS", - ID: "4d704e1f-2432-426b-b2ca-61950f9db5c6", - UUID: parseUUID("4d704e1f-2432-426b-b2ca-61950f9db5c6"), - }, { - Name: "Sirin Labs", - ID: "6e40f882-ef77-4a5d-b5ad-18525d3df023", - UUID: parseUUID("6e40f882-ef77-4a5d-b5ad-18525d3df023"), - }, { - Name: "Status Messenger", - ID: "b6114126-c06d-49f9-8d23-3e0dd2e350ab", - UUID: parseUUID("b6114126-c06d-49f9-8d23-3e0dd2e350ab"), - }, { - Name: "Solutico", - ID: "64dad10a-afad-454e-a045-fbae043469e7", - UUID: parseUUID("64dad10a-afad-454e-a045-fbae043469e7"), - }, { - Name: "Taloflow", - ID: "72ef94a4-c8ab-49fa-b5f1-4824532c4205", - UUID: parseUUID("72ef94a4-c8ab-49fa-b5f1-4824532c4205"), - }, { - Name: "Temporal", - ID: "aeedbe32-1519-4320-b2f4-33725c65af54", - UUID: parseUUID("aeedbe32-1519-4320-b2f4-33725c65af54"), - }, { - Name: "Terminal.co", - ID: "7bf23e53-6393-4bd0-8bf9-53ecf0de742f", - UUID: parseUUID("7bf23e53-6393-4bd0-8bf9-53ecf0de742f"), - }, { - Name: "Videocoin", - ID: "76db19c1-f777-4334-912c-1d3e563e4e21", - UUID: parseUUID("76db19c1-f777-4334-912c-1d3e563e4e21"), - }, { - Name: "Zenko", - ID: "8cd605fa-ad00-45b6-823e-550eddc611d6", - UUID: parseUUID("8cd605fa-ad00-45b6-823e-550eddc611d6"), - }}, - } -} diff --git a/satellite/rewards/partners_db_test.go b/satellite/rewards/partners_db_test.go deleted file mode 100644 index 2cc1ab45f..000000000 --- a/satellite/rewards/partners_db_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2019 Storj Labs, Inc. -// See LICENSE for copying information. - -package rewards_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "storj.io/common/testcontext" - "storj.io/storj/satellite/rewards" -) - -func TestStaticDB(t *testing.T) { - ctx := testcontext.New(t) - defer ctx.Cleanup() - - world := rewards.PartnerInfo{ - Name: "World", - ID: "WORLD0", - } - - hello := rewards.PartnerInfo{ - Name: "Hello", - ID: "11111111-1111-1111-1111-111111111111", - } - - db, err := rewards.NewPartnersStaticDB(&rewards.PartnerList{ - Partners: []rewards.PartnerInfo{world, hello}, - }) - require.NotNil(t, db) - require.NoError(t, err) - - byID, err := db.ByID(ctx, "WORLD0") - require.NoError(t, err) - require.Equal(t, world, byID) - - byName, err := db.ByName(ctx, "World") - require.NoError(t, err) - require.Equal(t, world, byName) - - byUserAgent, err := db.ByUserAgent(ctx, "wOrLd") - require.NoError(t, err) - require.Equal(t, world, byUserAgent) - - all, err := db.All(ctx) - require.NoError(t, err) - require.EqualValues(t, []rewards.PartnerInfo{hello, world}, all) -} diff --git a/satellite/rewards/partners_service.go b/satellite/rewards/partners_service.go deleted file mode 100644 index bcdbb3de7..000000000 --- a/satellite/rewards/partners_service.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2019 Storj Labs, Inc. -// See LICENSE for copying information. - -package rewards - -import ( - "context" - - "github.com/zeebo/errs" - "go.uber.org/zap" - - "storj.io/common/useragent" -) - -var ( - // ErrPartners is the default error class for partners package. - ErrPartners = errs.Class("partners") - - // ErrPartnerNotExist is returned when a particular partner does not exist. - ErrPartnerNotExist = errs.Class("partner does not exist") -) - -// PartnersDB allows access to partners database. -// -// architecture: Database -type PartnersDB interface { - // All returns all partners. - All(ctx context.Context) ([]PartnerInfo, error) - // ByName returns partner definitions for a given name. - ByName(ctx context.Context, name string) (PartnerInfo, error) - // ByID returns partner definition corresponding to an id. - ByID(ctx context.Context, id string) (PartnerInfo, error) - // ByUserAgent returns partner definition corresponding to an user agent string. - ByUserAgent(ctx context.Context, agent string) (PartnerInfo, error) -} - -// PartnersService allows manipulating and accessing partner information. -// -// architecture: Service -type PartnersService struct { - log *zap.Logger - db PartnersDB -} - -// NewPartnersService returns a service for handling partner information. -func NewPartnersService(log *zap.Logger, db PartnersDB) *PartnersService { - return &PartnersService{ - log: log, - db: db, - } -} - -// ByName looks up partner by name. -func (service *PartnersService) ByName(ctx context.Context, name string) (PartnerInfo, error) { - return service.db.ByName(ctx, name) -} - -// ByUserAgent looks up partner by user agent. -func (service *PartnersService) ByUserAgent(ctx context.Context, userAgentString string) (PartnerInfo, error) { - info, err := useragent.Parse(userAgentString) - if err != nil { - return PartnerInfo{}, ErrPartners.Wrap(err) - } - - return service.db.ByUserAgent(ctx, info.Product.Name) -} - -// All returns all partners. -func (service *PartnersService) All(ctx context.Context) ([]PartnerInfo, error) { - return service.db.All(ctx) -} diff --git a/satellite/rewards/partners_staticdb.go b/satellite/rewards/partners_staticdb.go deleted file mode 100644 index 432509550..000000000 --- a/satellite/rewards/partners_staticdb.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (C) 2019 Storj Labs, Inc. -// See LICENSE for copying information. - -package rewards - -import ( - "context" - "sort" - "strings" - - "github.com/zeebo/errs" -) - -// PartnersStaticDB implements partner lookup based on a static definition. -// -// architecture: Database Implementation -type PartnersStaticDB struct { - list *PartnerList - byName map[string]PartnerInfo - byID map[string]PartnerInfo - byUserAgent map[string]PartnerInfo -} - -var _ PartnersDB = (*PartnersStaticDB)(nil) - -// NewPartnersStaticDB creates a new PartnersStaticDB. -func NewPartnersStaticDB(list *PartnerList) (*PartnersStaticDB, error) { - db := &PartnersStaticDB{ - list: list, - byName: map[string]PartnerInfo{}, - byID: map[string]PartnerInfo{}, - byUserAgent: map[string]PartnerInfo{}, - } - - sort.Slice(list.Partners, func(i, k int) bool { - return list.Partners[i].Name < list.Partners[k].Name - }) - - var errg errs.Group - for _, p := range list.Partners { - name := strings.ToLower(p.Name) - if _, exists := db.byName[name]; exists { - errg.Add(ErrPartners.New("name %q already exists", p.Name)) - } else { - db.byName[name] = p - } - - if _, exists := db.byID[p.ID]; exists { - errg.Add(ErrPartners.New("id %q already exists", p.ID)) - } else { - db.byID[p.ID] = p - } - - useragent := CanonicalUserAgentProduct(p.UserAgent()) - if _, exists := db.byUserAgent[useragent]; exists { - errg.Add(ErrPartners.New("user agent %q already exists", useragent)) - } else { - db.byUserAgent[useragent] = p - } - } - - return db, errg.Err() -} - -// All returns all partners. -func (db *PartnersStaticDB) All(ctx context.Context) ([]PartnerInfo, error) { - return append([]PartnerInfo{}, db.list.Partners...), nil -} - -// ByName returns partner definitions for a given name. Name is case insensitive. -func (db *PartnersStaticDB) ByName(ctx context.Context, name string) (PartnerInfo, error) { - partner, ok := db.byName[strings.ToLower(name)] - if !ok { - return PartnerInfo{}, ErrPartnerNotExist.New("%q", name) - } - return partner, nil -} - -// ByID returns partner definition corresponding to an id. -func (db *PartnersStaticDB) ByID(ctx context.Context, id string) (PartnerInfo, error) { - partner, ok := db.byID[id] - if !ok { - return PartnerInfo{}, ErrPartnerNotExist.New("%q", id) - } - return partner, nil -} - -// ByUserAgent returns partner definition corresponding to an user agent product string. -func (db *PartnersStaticDB) ByUserAgent(ctx context.Context, agent string) (PartnerInfo, error) { - partner, ok := db.byUserAgent[CanonicalUserAgentProduct(agent)] - if !ok { - return PartnerInfo{}, ErrPartnerNotExist.New("%q", agent) - } - return partner, nil -} diff --git a/satellite/satellitedb/apikeys.go b/satellite/satellitedb/apikeys.go index 96efb2a89..193ec3042 100644 --- a/satellite/satellitedb/apikeys.go +++ b/satellite/satellitedb/apikeys.go @@ -74,7 +74,7 @@ func (keys *apikeys) GetPagedByProjectID(ctx context.Context, projectID uuid.UUI } repoundQuery := keys.db.Rebind(` - SELECT ak.id, ak.project_id, ak.name, ak.partner_id, ak.user_agent, ak.created_at + SELECT ak.id, ak.project_id, ak.name, ak.user_agent, ak.created_at FROM api_keys ak WHERE ak.project_id = ? AND lower(ak.name) LIKE ? @@ -97,14 +97,12 @@ func (keys *apikeys) GetPagedByProjectID(ctx context.Context, projectID uuid.UUI var apiKeys []console.APIKeyInfo for rows.Next() { ak := console.APIKeyInfo{} - var partnerID uuid.NullUUID - err = rows.Scan(&ak.ID, &ak.ProjectID, &ak.Name, &partnerID, &ak.UserAgent, &ak.CreatedAt) + err = rows.Scan(&ak.ID, &ak.ProjectID, &ak.Name, &ak.UserAgent, &ak.CreatedAt) if err != nil { return nil, err } - ak.PartnerID = partnerID.UUID apiKeys = append(apiKeys, ak) } @@ -176,10 +174,6 @@ func (keys *apikeys) Create(ctx context.Context, head []byte, info console.APIKe } optional := dbx.ApiKey_Create_Fields{} - if !info.PartnerID.IsZero() { - optional.PartnerId = dbx.ApiKey_PartnerId(info.PartnerID[:]) - } - if info.UserAgent != nil { optional.UserAgent = dbx.ApiKey_UserAgent(info.UserAgent) } @@ -242,13 +236,6 @@ func fromDBXAPIKey(ctx context.Context, key *dbx.ApiKey) (_ *console.APIKeyInfo, Secret: key.Secret, } - if key.PartnerId != nil { - result.PartnerID, err = uuid.FromBytes(key.PartnerId) - if err != nil { - return nil, err - } - } - if key.UserAgent != nil { result.UserAgent = key.UserAgent } diff --git a/satellite/satellitedb/attribution.go b/satellite/satellitedb/attribution.go index e5d528103..acd68f395 100644 --- a/satellite/satellitedb/attribution.go +++ b/satellite/satellitedb/attribution.go @@ -23,7 +23,6 @@ const ( -- A union of both the storage tally and bandwidth rollups. -- Should be 1 row per project/bucket by partner within the timeframe specified SELECT - o.partner_id as partner_id, o.user_agent as user_agent, o.project_id as project_id, o.bucket_name as bucket_name, @@ -39,7 +38,6 @@ const ( -- SUM the storage and hours -- Hours are used to calculate byte hours above SELECT - bsti.partner_id as partner_id, bsti.user_agent as user_agent, bsto.project_id as project_id, bsto.bucket_name as bucket_name, @@ -55,7 +53,6 @@ const ( -- Collapse entries by the latest record in the hour -- If there are more than 1 records within the hour, only the latest will be considered SELECT - va.partner_id, va.user_agent, date_trunc('hour', bst.interval_start) as hours, bst.project_id, @@ -68,12 +65,10 @@ const ( AND bst.bucket_name = va.bucket_name ) WHERE - va.partner_id = ? - AND va.user_agent = ? + va.user_agent = ? AND bst.interval_start >= ? AND bst.interval_start < ? GROUP BY - va.partner_id, va.user_agent, bst.project_id, bst.bucket_name, @@ -87,14 +82,12 @@ const ( AND bsto.interval_start = bsti.max_interval ) GROUP BY - bsti.partner_id, bsti.user_agent, bsto.project_id, bsto.bucket_name UNION - -- SUM the bandwidth for the timeframe specified grouping by the partner_id, user_agent, project_id, and bucket_name + -- SUM the bandwidth for the timeframe specified grouping by the user_agent, project_id, and bucket_name SELECT - va.partner_id as partner_id, va.user_agent as user_agent, bbr.project_id as project_id, bbr.bucket_name as bucket_name, @@ -112,20 +105,17 @@ const ( AND bbr.bucket_name = va.bucket_name ) WHERE - va.partner_id = ? - AND va.user_agent = ? + va.user_agent = ? AND bbr.interval_start >= ? AND bbr.interval_start < ? -- action 2 is GET AND bbr.action = 2 GROUP BY - va.partner_id, va.user_agent, bbr.project_id, bbr.bucket_name ) AS o GROUP BY - o.partner_id, o.user_agent, o.project_id, o.bucket_name; @@ -134,7 +124,6 @@ const ( -- A union of both the storage tally and bandwidth rollups. -- Should be 1 row per project/bucket by partner within the timeframe specified SELECT - o.partner_id as partner_id, o.user_agent as user_agent, o.project_id as project_id, o.bucket_name as bucket_name, @@ -150,7 +139,6 @@ const ( -- SUM the storage and hours -- Hours are used to calculate byte hours above SELECT - bsti.partner_id as partner_id, bsti.user_agent as user_agent, bsto.project_id as project_id, bsto.bucket_name as bucket_name, @@ -166,7 +154,6 @@ const ( -- Collapse entries by the latest record in the hour -- If there are more than 1 records within the hour, only the latest will be considered SELECT - va.partner_id, va.user_agent, date_trunc('hour', bst.interval_start) as hours, bst.project_id, @@ -182,7 +169,6 @@ const ( bst.interval_start >= $1 AND bst.interval_start < $2 GROUP BY - va.partner_id, va.user_agent, bst.project_id, bst.bucket_name, @@ -196,14 +182,12 @@ const ( AND bsto.interval_start = bsti.max_interval ) GROUP BY - bsti.partner_id, bsti.user_agent, bsto.project_id, bsto.bucket_name UNION - -- SUM the bandwidth for the timeframe specified grouping by the partner_id, user_agent, project_id, and bucket_name + -- SUM the bandwidth for the timeframe specified grouping by the user_agent, project_id, and bucket_name SELECT - va.partner_id as partner_id, va.user_agent as user_agent, bbr.project_id as project_id, bbr.bucket_name as bucket_name, @@ -226,13 +210,11 @@ const ( -- action 2 is GET AND bbr.action = 2 GROUP BY - va.partner_id, va.user_agent, bbr.project_id, bbr.bucket_name ) AS o GROUP BY - o.partner_id, o.user_agent, o.project_id, o.bucket_name; @@ -270,7 +252,7 @@ func (keys *attributionDB) Insert(ctx context.Context, info *attribution.Info) ( VALUES ($1, $2, $3, $4, now()) ON CONFLICT (project_id, bucket_name) DO NOTHING RETURNING last_updated - `, info.ProjectID[:], info.BucketName, info.PartnerID[:], info.UserAgent).Scan(&info.CreatedAt) + `, info.ProjectID[:], info.BucketName, "", info.UserAgent).Scan(&info.CreatedAt) // TODO when sql.ErrNoRows is returned then CreatedAt is not set if errors.Is(err, sql.ErrNoRows) { return info, nil @@ -283,10 +265,10 @@ func (keys *attributionDB) Insert(ctx context.Context, info *attribution.Info) ( } // QueryAttribution queries partner bucket attribution data. -func (keys *attributionDB) QueryAttribution(ctx context.Context, partnerID uuid.UUID, userAgent []byte, start time.Time, end time.Time) (_ []*attribution.BucketUsage, err error) { +func (keys *attributionDB) QueryAttribution(ctx context.Context, userAgent []byte, start time.Time, end time.Time) (_ []*attribution.BucketUsage, err error) { defer mon.Task()(&ctx)(&err) - rows, err := keys.db.DB.QueryContext(ctx, keys.db.Rebind(valueAttrQuery), partnerID[:], userAgent, start.UTC(), end.UTC(), partnerID[:], userAgent, start.UTC(), end.UTC()) + rows, err := keys.db.DB.QueryContext(ctx, keys.db.Rebind(valueAttrQuery), userAgent, start.UTC(), end.UTC(), userAgent, start.UTC(), end.UTC()) if err != nil { return nil, Error.Wrap(err) } @@ -296,7 +278,7 @@ func (keys *attributionDB) QueryAttribution(ctx context.Context, partnerID uuid. for rows.Next() { r := &attribution.BucketUsage{} var inline, remote float64 - err := rows.Scan(&r.PartnerID, &r.UserAgent, &r.ProjectID, &r.BucketName, &r.ByteHours, &inline, &remote, &r.SegmentHours, &r.ObjectHours, &r.EgressData, &r.Hours) + err := rows.Scan(&r.UserAgent, &r.ProjectID, &r.BucketName, &r.ByteHours, &inline, &remote, &r.SegmentHours, &r.ObjectHours, &r.EgressData, &r.Hours) if err != nil { return results, Error.Wrap(err) } @@ -324,7 +306,7 @@ func (keys *attributionDB) QueryAllAttribution(ctx context.Context, start time.T for rows.Next() { r := &attribution.BucketUsage{} var inline, remote float64 - err := rows.Scan(&r.PartnerID, &r.UserAgent, &r.ProjectID, &r.BucketName, &r.ByteHours, &inline, &remote, &r.SegmentHours, &r.ObjectHours, &r.EgressData, &r.Hours) + err := rows.Scan(&r.UserAgent, &r.ProjectID, &r.BucketName, &r.ByteHours, &inline, &remote, &r.SegmentHours, &r.ObjectHours, &r.EgressData, &r.Hours) if err != nil { return results, Error.Wrap(err) } @@ -338,14 +320,7 @@ func (keys *attributionDB) QueryAllAttribution(ctx context.Context, start time.T } func attributionFromDBX(info *dbx.ValueAttribution) (*attribution.Info, error) { - partnerID, err := uuid.FromBytes(info.PartnerId) - if err != nil { - return nil, Error.Wrap(err) - } userAgent := info.UserAgent - if err != nil { - return nil, Error.Wrap(err) - } projectID, err := uuid.FromBytes(info.ProjectId) if err != nil { return nil, Error.Wrap(err) @@ -354,7 +329,6 @@ func attributionFromDBX(info *dbx.ValueAttribution) (*attribution.Info, error) { return &attribution.Info{ ProjectID: projectID, BucketName: info.BucketName, - PartnerID: partnerID, UserAgent: userAgent, CreatedAt: info.LastUpdated, }, nil diff --git a/satellite/satellitedb/projects.go b/satellite/satellitedb/projects.go index 3d3df00fe..db1372aca 100644 --- a/satellite/satellitedb/projects.go +++ b/satellite/satellitedb/projects.go @@ -151,9 +151,6 @@ func (projects *projects) Insert(ctx context.Context, project *console.Project) } createFields := dbx.Project_Create_Fields{} - if !project.PartnerID.IsZero() { - createFields.PartnerId = dbx.Project_PartnerId(project.PartnerID[:]) - } if project.UserAgent != nil { createFields.UserAgent = dbx.Project_UserAgent(project.UserAgent) } @@ -402,14 +399,6 @@ func projectFromDBX(ctx context.Context, project *dbx.Project) (_ *console.Proje } } - var partnerID uuid.UUID - if len(project.PartnerId) > 0 { - partnerID, err = uuid.FromBytes(project.PartnerId) - if err != nil { - return nil, err - } - } - var userAgent []byte if len(project.UserAgent) > 0 { userAgent = project.UserAgent @@ -425,7 +414,6 @@ func projectFromDBX(ctx context.Context, project *dbx.Project) (_ *console.Proje PublicID: publicID, Name: project.Name, Description: project.Description, - PartnerID: partnerID, UserAgent: userAgent, OwnerID: ownerID, RateLimit: project.RateLimit, diff --git a/satellite/satellitedb/users.go b/satellite/satellitedb/users.go index de62565ce..2b4d1566f 100644 --- a/satellite/satellitedb/users.go +++ b/satellite/satellitedb/users.go @@ -150,9 +150,6 @@ func (users *users) Insert(ctx context.Context, user *console.User) (_ *console. IsProfessional: dbx.User_IsProfessional(user.IsProfessional), SignupPromoCode: dbx.User_SignupPromoCode(user.SignupPromoCode), } - if !user.PartnerID.IsZero() { - optional.PartnerId = dbx.User_PartnerId(user.PartnerID[:]) - } if user.UserAgent != nil { optional.UserAgent = dbx.User_UserAgent(user.UserAgent) } @@ -404,13 +401,6 @@ func userFromDBX(ctx context.Context, user *dbx.User) (_ *console.User, err erro SignupCaptcha: user.SignupCaptcha, } - if user.PartnerId != nil { - result.PartnerID, err = uuid.FromBytes(user.PartnerId) - if err != nil { - return nil, err - } - } - if user.UserAgent != nil { result.UserAgent = user.UserAgent } diff --git a/web/satellite/src/api/auth.ts b/web/satellite/src/api/auth.ts index cb3176c6d..f9e35429f 100644 --- a/web/satellite/src/api/auth.ts +++ b/web/satellite/src/api/auth.ts @@ -162,7 +162,6 @@ export class AuthHttpApi implements UsersApi { userResponse.shortName, userResponse.email, userResponse.partner, - userResponse.partnerId, userResponse.password, userResponse.projectLimit, userResponse.paidTier, @@ -256,7 +255,6 @@ export class AuthHttpApi implements UsersApi { shortName: user.shortName, email: user.email, partner: user.partner || '', - partnerId: user.partnerId || '', isProfessional: user.isProfessional, position: user.position, companyName: user.companyName, diff --git a/web/satellite/src/api/v0.gen.ts b/web/satellite/src/api/v0.gen.ts index 915d6cd0d..35ba297a7 100644 --- a/web/satellite/src/api/v0.gen.ts +++ b/web/satellite/src/api/v0.gen.ts @@ -6,7 +6,6 @@ import { HttpClient } from '@/utils/httpClient'; class APIKeyInfo { id: string; projectId: string; - partnerId: string; userAgent: string; name: string; createdAt: string; @@ -53,7 +52,6 @@ class Project { publicId: string; name: string; description: string; - partnerId: string; userAgent: string; ownerId: string; rateLimit: number; @@ -63,6 +61,8 @@ class Project { memberCount: number; storageLimit: string; bandwidthLimit: string; + userSpecifiedStorageLimit: string; + userSpecifiedBandwidthLimit: string; segmentLimit: number; } @@ -79,7 +79,6 @@ class ResponseUser { fullName: string; shortName: string; email: string; - partnerId: string; userAgent: string; projectLimit: number; isProfessional: boolean; diff --git a/web/satellite/src/types/users.ts b/web/satellite/src/types/users.ts index 656f8acb7..7a547babf 100644 --- a/web/satellite/src/types/users.ts +++ b/web/satellite/src/types/users.ts @@ -63,7 +63,6 @@ export class User { public shortName: string = '', public email: string = '', public partner: string = '', - public partnerId: string = '', public password: string = '', public projectLimit: number = 0, public paidTier: boolean = false, diff --git a/web/satellite/tests/unit/ignore/views/DashboardArea.spec.ts b/web/satellite/tests/unit/ignore/views/DashboardArea.spec.ts index b38ab1947..420e6168b 100644 --- a/web/satellite/tests/unit/ignore/views/DashboardArea.spec.ts +++ b/web/satellite/tests/unit/ignore/views/DashboardArea.spec.ts @@ -35,7 +35,7 @@ localVue.use(Vuex); const usersApi = new UsersApiMock(); const projectsApi = new ProjectsApiMock(); -usersApi.setMockUser(new User('1', '2', '3', '4', '5', '6', '7', 1)); +usersApi.setMockUser(new User('1', '2', '3', '4', '5', '6', 1)); projectsApi.setMockProjects([]); const usersModule = makeUsersModule(usersApi); diff --git a/web/satellite/tests/unit/store/projectMembers.spec.ts b/web/satellite/tests/unit/store/projectMembers.spec.ts index 81f9aab7d..65f482da9 100644 --- a/web/satellite/tests/unit/store/projectMembers.spec.ts +++ b/web/satellite/tests/unit/store/projectMembers.spec.ts @@ -208,7 +208,6 @@ describe('actions', () => { expect(state.page.projectMembers[0].joinedAt).toBe(projectMember1.joinedAt); expect(state.page.projectMembers[0].user.email).toBe(projectMember1.user.email); expect(state.page.projectMembers[0].user.id).toBe(projectMember1.user.id); - expect(state.page.projectMembers[0].user.partnerId).toBe(projectMember1.user.partnerId); expect(state.page.projectMembers[0].user.fullName).toBe(projectMember1.user.fullName); expect(state.page.projectMembers[0].user.shortName).toBe(projectMember1.user.shortName); }); diff --git a/web/satellite/tests/unit/store/users.spec.ts b/web/satellite/tests/unit/store/users.spec.ts index 68300c005..af2f39296 100644 --- a/web/satellite/tests/unit/store/users.spec.ts +++ b/web/satellite/tests/unit/store/users.spec.ts @@ -88,7 +88,6 @@ describe('actions', () => { expect(store.state.user.fullName).toBe(''); expect(store.state.user.shortName).toBe(''); expect(store.state.user.email).toBe(''); - expect(store.state.user.partnerId).toBe(''); expect(store.state.user.id).toBe(''); });