diff options
Diffstat (limited to 'internal/processing')
| -rw-r--r-- | internal/processing/account/move.go | 4 | ||||
| -rw-r--r-- | internal/processing/account/move_test.go | 7 | ||||
| -rw-r--r-- | internal/processing/app.go | 4 | ||||
| -rw-r--r-- | internal/processing/processor_test.go | 5 | ||||
| -rw-r--r-- | internal/processing/stream/authorize.go | 21 | ||||
| -rw-r--r-- | internal/processing/timeline/faved.go | 4 | ||||
| -rw-r--r-- | internal/processing/timeline/home.go | 4 | ||||
| -rw-r--r-- | internal/processing/timeline/home_test.go | 4 | ||||
| -rw-r--r-- | internal/processing/timeline/list.go | 4 | ||||
| -rw-r--r-- | internal/processing/timeline/notification.go | 6 | ||||
| -rw-r--r-- | internal/processing/workers/workers_test.go | 6 |
11 files changed, 46 insertions, 23 deletions
diff --git a/internal/processing/account/move.go b/internal/processing/account/move.go index 44f8da268..1c5209e70 100644 --- a/internal/processing/account/move.go +++ b/internal/processing/account/move.go @@ -27,6 +27,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/ap" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/federation/dereferencing" "github.com/superseriousbusiness/gotosocial/internal/gtscontext" @@ -34,14 +35,13 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/id" "github.com/superseriousbusiness/gotosocial/internal/messages" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/uris" "golang.org/x/crypto/bcrypt" ) func (p *Processor) MoveSelf( ctx context.Context, - authed *oauth.Auth, + authed *apiutil.Auth, form *apimodel.AccountMoveRequest, ) gtserror.WithCode { // Ensure valid MovedToURI. diff --git a/internal/processing/account/move_test.go b/internal/processing/account/move_test.go index 9d06829ca..76cbe1512 100644 --- a/internal/processing/account/move_test.go +++ b/internal/processing/account/move_test.go @@ -24,6 +24,7 @@ import ( "github.com/stretchr/testify/suite" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/oauth" ) @@ -56,7 +57,7 @@ func (suite *MoveTestSuite) TestMoveAccountOK() { // Trigger move from zork to admin. if err := suite.accountProcessor.MoveSelf( ctx, - &oauth.Auth{ + &apiutil.Auth{ Token: oauth.DBTokenToToken(suite.testTokens["local_account_1"]), Application: suite.testApplications["local_account_1"], User: suite.testUsers["local_account_1"], @@ -120,7 +121,7 @@ func (suite *MoveTestSuite) TestMoveAccountNotAliased() { // not aliased back to zork. err := suite.accountProcessor.MoveSelf( ctx, - &oauth.Auth{ + &apiutil.Auth{ Token: oauth.DBTokenToToken(suite.testTokens["local_account_1"]), Application: suite.testApplications["local_account_1"], User: suite.testUsers["local_account_1"], @@ -150,7 +151,7 @@ func (suite *MoveTestSuite) TestMoveAccountBadPassword() { // not aliased back to zork. err := suite.accountProcessor.MoveSelf( ctx, - &oauth.Auth{ + &apiutil.Auth{ Token: oauth.DBTokenToToken(suite.testTokens["local_account_1"]), Application: suite.testApplications["local_account_1"], User: suite.testUsers["local_account_1"], diff --git a/internal/processing/app.go b/internal/processing/app.go index d492b3bc4..2a43c5212 100644 --- a/internal/processing/app.go +++ b/internal/processing/app.go @@ -22,13 +22,13 @@ import ( "github.com/google/uuid" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/id" - "github.com/superseriousbusiness/gotosocial/internal/oauth" ) -func (p *Processor) AppCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.ApplicationCreateRequest) (*apimodel.Application, gtserror.WithCode) { +func (p *Processor) AppCreate(ctx context.Context, authed *apiutil.Auth, form *apimodel.ApplicationCreateRequest) (*apimodel.Application, gtserror.WithCode) { // set default 'read' for scopes if it's not set var scopes string if form.Scopes == "" { diff --git a/internal/processing/processor_test.go b/internal/processing/processor_test.go index 84ab9ef48..9cf6cbd60 100644 --- a/internal/processing/processor_test.go +++ b/internal/processing/processor_test.go @@ -22,6 +22,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/superseriousbusiness/gotosocial/internal/admin" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/cleaner" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/email" @@ -66,7 +67,7 @@ type ProcessingStandardTestSuite struct { testStatuses map[string]*gtsmodel.Status testTags map[string]*gtsmodel.Tag testMentions map[string]*gtsmodel.Mention - testAutheds map[string]*oauth.Auth + testAutheds map[string]*apiutil.Auth testBlocks map[string]*gtsmodel.Block testActivities map[string]testrig.ActivityWithSignature testLists map[string]*gtsmodel.List @@ -85,7 +86,7 @@ func (suite *ProcessingStandardTestSuite) SetupSuite() { suite.testStatuses = testrig.NewTestStatuses() suite.testTags = testrig.NewTestTags() suite.testMentions = testrig.NewTestMentions() - suite.testAutheds = map[string]*oauth.Auth{ + suite.testAutheds = map[string]*apiutil.Auth{ "local_account_1": { Application: suite.testApplications["local_account_1"], User: suite.testUsers["local_account_1"], diff --git a/internal/processing/stream/authorize.go b/internal/processing/stream/authorize.go index 0baea29f1..cedd21e0b 100644 --- a/internal/processing/stream/authorize.go +++ b/internal/processing/stream/authorize.go @@ -19,8 +19,12 @@ package stream import ( "context" + "errors" "fmt" + "slices" + "strings" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" @@ -58,5 +62,22 @@ func (p *Processor) Authorize(ctx context.Context, accessToken string) (*gtsmode return nil, gtserror.NewErrorInternalError(err) } + // Ensure read scope. + // + // TODO: make this more granular + // depending on stream type. + hasScopes := strings.Split(ti.GetScope(), " ") + scopeOK := slices.ContainsFunc( + hasScopes, + func(hasScope string) bool { + return apiutil.Scope(hasScope).Permits(apiutil.ScopeRead) + }, + ) + + if !scopeOK { + const errText = "token has insufficient scope permission" + return nil, gtserror.NewErrorForbidden(errors.New(errText), errText) + } + return acct, nil } diff --git a/internal/processing/timeline/faved.go b/internal/processing/timeline/faved.go index bb7f03fff..6e915f4ef 100644 --- a/internal/processing/timeline/faved.go +++ b/internal/processing/timeline/faved.go @@ -23,15 +23,15 @@ import ( "fmt" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/log" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/util" ) -func (p *Processor) FavedTimelineGet(ctx context.Context, authed *oauth.Auth, maxID string, minID string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) { +func (p *Processor) FavedTimelineGet(ctx context.Context, authed *apiutil.Auth, maxID string, minID string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) { statuses, nextMaxID, prevMinID, err := p.state.DB.GetFavedTimeline(ctx, authed.Account.ID, maxID, minID, limit) if err != nil && !errors.Is(err, db.ErrNoEntries) { err = fmt.Errorf("FavedTimelineGet: db error getting statuses: %w", err) diff --git a/internal/processing/timeline/home.go b/internal/processing/timeline/home.go index 215000933..38cf38405 100644 --- a/internal/processing/timeline/home.go +++ b/internal/processing/timeline/home.go @@ -22,6 +22,7 @@ import ( "errors" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status" "github.com/superseriousbusiness/gotosocial/internal/filter/usermute" @@ -29,7 +30,6 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtscontext" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/timeline" "github.com/superseriousbusiness/gotosocial/internal/typeutils" @@ -118,7 +118,7 @@ func HomeTimelineStatusPrepare(state *state.State, converter *typeutils.Converte } } -func (p *Processor) HomeTimelineGet(ctx context.Context, authed *oauth.Auth, maxID string, sinceID string, minID string, limit int, local bool) (*apimodel.PageableResponse, gtserror.WithCode) { +func (p *Processor) HomeTimelineGet(ctx context.Context, authed *apiutil.Auth, maxID string, sinceID string, minID string, limit int, local bool) (*apimodel.PageableResponse, gtserror.WithCode) { statuses, err := p.state.Timelines.Home.GetTimeline(ctx, authed.Account.ID, maxID, sinceID, minID, limit, local) if err != nil && !errors.Is(err, db.ErrNoEntries) { err = gtserror.Newf("error getting statuses: %w", err) diff --git a/internal/processing/timeline/home_test.go b/internal/processing/timeline/home_test.go index c73c209a3..ea56418f6 100644 --- a/internal/processing/timeline/home_test.go +++ b/internal/processing/timeline/home_test.go @@ -23,10 +23,10 @@ import ( "github.com/stretchr/testify/suite" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/filter/visibility" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/id" - "github.com/superseriousbusiness/gotosocial/internal/oauth" tlprocessor "github.com/superseriousbusiness/gotosocial/internal/processing/timeline" "github.com/superseriousbusiness/gotosocial/internal/timeline" "github.com/superseriousbusiness/gotosocial/internal/typeutils" @@ -64,7 +64,7 @@ func (suite *HomeTestSuite) TestHomeTimelineGetHideFiltered() { var ( ctx = context.Background() requester = suite.testAccounts["local_account_1"] - authed = &oauth.Auth{Account: requester} + authed = &apiutil.Auth{Account: requester} maxID = "" sinceID = "" minID = "01F8MHAAY43M6RJ473VQFCVH36" // 1 before filteredStatus diff --git a/internal/processing/timeline/list.go b/internal/processing/timeline/list.go index a7f5e9d71..147f87ab4 100644 --- a/internal/processing/timeline/list.go +++ b/internal/processing/timeline/list.go @@ -22,6 +22,7 @@ import ( "errors" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status" "github.com/superseriousbusiness/gotosocial/internal/filter/usermute" @@ -29,7 +30,6 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtscontext" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/timeline" "github.com/superseriousbusiness/gotosocial/internal/typeutils" @@ -130,7 +130,7 @@ func ListTimelineStatusPrepare(state *state.State, converter *typeutils.Converte } } -func (p *Processor) ListTimelineGet(ctx context.Context, authed *oauth.Auth, listID string, maxID string, sinceID string, minID string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) { +func (p *Processor) ListTimelineGet(ctx context.Context, authed *apiutil.Auth, listID string, maxID string, sinceID string, minID string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) { // Ensure list exists + is owned by this account. list, err := p.state.DB.GetListByID(ctx, listID) if err != nil { diff --git a/internal/processing/timeline/notification.go b/internal/processing/timeline/notification.go index 09636e7eb..04a898198 100644 --- a/internal/processing/timeline/notification.go +++ b/internal/processing/timeline/notification.go @@ -24,6 +24,7 @@ import ( "net/url" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/filter/status" "github.com/superseriousbusiness/gotosocial/internal/filter/usermute" @@ -31,14 +32,13 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/log" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/paging" "github.com/superseriousbusiness/gotosocial/internal/util" ) func (p *Processor) NotificationsGet( ctx context.Context, - authed *oauth.Auth, + authed *apiutil.Auth, page *paging.Page, types []gtsmodel.NotificationType, excludeTypes []gtsmodel.NotificationType, @@ -164,7 +164,7 @@ func (p *Processor) NotificationGet(ctx context.Context, account *gtsmodel.Accou return apiNotif, nil } -func (p *Processor) NotificationsClear(ctx context.Context, authed *oauth.Auth) gtserror.WithCode { +func (p *Processor) NotificationsClear(ctx context.Context, authed *apiutil.Auth) gtserror.WithCode { // Delete all notifications of all types that target the authorized account. if err := p.state.DB.DeleteNotifications(ctx, nil, authed.Account.ID, ""); err != nil && !errors.Is(err, db.ErrNoEntries) { return gtserror.NewErrorInternalError(err) diff --git a/internal/processing/workers/workers_test.go b/internal/processing/workers/workers_test.go index ffd40d8fb..b7ec54c1e 100644 --- a/internal/processing/workers/workers_test.go +++ b/internal/processing/workers/workers_test.go @@ -21,8 +21,8 @@ import ( "context" "github.com/stretchr/testify/suite" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/processing" "github.com/superseriousbusiness/gotosocial/internal/stream" "github.com/superseriousbusiness/gotosocial/testrig" @@ -48,7 +48,7 @@ type WorkersTestSuite struct { testStatuses map[string]*gtsmodel.Status testTags map[string]*gtsmodel.Tag testMentions map[string]*gtsmodel.Mention - testAutheds map[string]*oauth.Auth + testAutheds map[string]*apiutil.Auth testBlocks map[string]*gtsmodel.Block testActivities map[string]testrig.ActivityWithSignature testLists map[string]*gtsmodel.List @@ -66,7 +66,7 @@ func (suite *WorkersTestSuite) SetupSuite() { suite.testStatuses = testrig.NewTestStatuses() suite.testTags = testrig.NewTestTags() suite.testMentions = testrig.NewTestMentions() - suite.testAutheds = map[string]*oauth.Auth{ + suite.testAutheds = map[string]*apiutil.Auth{ "local_account_1": { Application: suite.testApplications["local_account_1"], User: suite.testUsers["local_account_1"], |
