mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 04:12:25 -05:00 
			
		
		
		
	Update webfingering a little, add tests (#236)
* Update webfingering a little, add tests * fix broken tests oops
This commit is contained in:
		
					parent
					
						
							
								92186c8c6f
							
						
					
				
			
			
				commit
				
					
						b315eee43b
					
				
			
		
					 9 changed files with 325 additions and 74 deletions
				
			
		|  | @ -15,7 +15,6 @@ import ( | |||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/s2s/user" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/security" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
|  | @ -23,35 +22,6 @@ type RepliesGetTestSuite struct { | |||
| 	UserStandardTestSuite | ||||
| } | ||||
| 
 | ||||
| func (suite *RepliesGetTestSuite) SetupSuite() { | ||||
| 	suite.testTokens = testrig.NewTestTokens() | ||||
| 	suite.testClients = testrig.NewTestClients() | ||||
| 	suite.testApplications = testrig.NewTestApplications() | ||||
| 	suite.testUsers = testrig.NewTestUsers() | ||||
| 	suite.testAccounts = testrig.NewTestAccounts() | ||||
| 	suite.testAttachments = testrig.NewTestAttachments() | ||||
| 	suite.testStatuses = testrig.NewTestStatuses() | ||||
| } | ||||
| 
 | ||||
| func (suite *RepliesGetTestSuite) SetupTest() { | ||||
| 	suite.config = testrig.NewTestConfig() | ||||
| 	suite.db = testrig.NewTestDB() | ||||
| 	suite.tc = testrig.NewTestTypeConverter(suite.db) | ||||
| 	suite.storage = testrig.NewTestStorage() | ||||
| 	suite.log = testrig.NewTestLog() | ||||
| 	suite.federator = testrig.NewTestFederator(suite.db, testrig.NewTestTransportController(testrig.NewMockHTTPClient(nil), suite.db), suite.storage) | ||||
| 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator) | ||||
| 	suite.userModule = user.New(suite.config, suite.processor, suite.log).(*user.Module) | ||||
| 	suite.securityModule = security.New(suite.config, suite.db, suite.log).(*security.Module) | ||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||
| } | ||||
| 
 | ||||
| func (suite *RepliesGetTestSuite) TearDownTest() { | ||||
| 	testrig.StandardDBTeardown(suite.db) | ||||
| 	testrig.StandardStorageTeardown(suite.storage) | ||||
| } | ||||
| 
 | ||||
| func (suite *RepliesGetTestSuite) TestGetReplies() { | ||||
| 	// the dereference we're gonna use | ||||
| 	derefRequests := testrig.NewTestDereferenceRequests(suite.testAccounts) | ||||
|  |  | |||
|  | @ -12,9 +12,9 @@ import ( | |||
| 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/processing" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/typeutils" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
| // nolint | ||||
| type UserStandardTestSuite struct { | ||||
| 	// standard suite interfaces | ||||
| 	suite.Suite | ||||
|  | @ -39,3 +39,32 @@ type UserStandardTestSuite struct { | |||
| 	// module being tested | ||||
| 	userModule *user.Module | ||||
| } | ||||
| 
 | ||||
| func (suite *UserStandardTestSuite) SetupSuite() { | ||||
| 	suite.testTokens = testrig.NewTestTokens() | ||||
| 	suite.testClients = testrig.NewTestClients() | ||||
| 	suite.testApplications = testrig.NewTestApplications() | ||||
| 	suite.testUsers = testrig.NewTestUsers() | ||||
| 	suite.testAccounts = testrig.NewTestAccounts() | ||||
| 	suite.testAttachments = testrig.NewTestAttachments() | ||||
| 	suite.testStatuses = testrig.NewTestStatuses() | ||||
| } | ||||
| 
 | ||||
| func (suite *UserStandardTestSuite) SetupTest() { | ||||
| 	suite.config = testrig.NewTestConfig() | ||||
| 	suite.db = testrig.NewTestDB() | ||||
| 	suite.tc = testrig.NewTestTypeConverter(suite.db) | ||||
| 	suite.storage = testrig.NewTestStorage() | ||||
| 	suite.log = testrig.NewTestLog() | ||||
| 	suite.federator = testrig.NewTestFederator(suite.db, testrig.NewTestTransportController(testrig.NewMockHTTPClient(nil), suite.db), suite.storage) | ||||
| 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator) | ||||
| 	suite.userModule = user.New(suite.config, suite.processor, suite.log).(*user.Module) | ||||
| 	suite.securityModule = security.New(suite.config, suite.db, suite.log).(*security.Module) | ||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||
| } | ||||
| 
 | ||||
| func (suite *UserStandardTestSuite) TearDownTest() { | ||||
| 	testrig.StandardDBTeardown(suite.db) | ||||
| 	testrig.StandardStorageTeardown(suite.storage) | ||||
| } | ||||
|  |  | |||
|  | @ -14,7 +14,6 @@ import ( | |||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/s2s/user" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/security" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
|  | @ -22,35 +21,6 @@ type UserGetTestSuite struct { | |||
| 	UserStandardTestSuite | ||||
| } | ||||
| 
 | ||||
| func (suite *UserGetTestSuite) SetupSuite() { | ||||
| 	suite.testTokens = testrig.NewTestTokens() | ||||
| 	suite.testClients = testrig.NewTestClients() | ||||
| 	suite.testApplications = testrig.NewTestApplications() | ||||
| 	suite.testUsers = testrig.NewTestUsers() | ||||
| 	suite.testAccounts = testrig.NewTestAccounts() | ||||
| 	suite.testAttachments = testrig.NewTestAttachments() | ||||
| 	suite.testStatuses = testrig.NewTestStatuses() | ||||
| } | ||||
| 
 | ||||
| func (suite *UserGetTestSuite) SetupTest() { | ||||
| 	suite.config = testrig.NewTestConfig() | ||||
| 	suite.db = testrig.NewTestDB() | ||||
| 	suite.tc = testrig.NewTestTypeConverter(suite.db) | ||||
| 	suite.storage = testrig.NewTestStorage() | ||||
| 	suite.log = testrig.NewTestLog() | ||||
| 	suite.federator = testrig.NewTestFederator(suite.db, testrig.NewTestTransportController(testrig.NewMockHTTPClient(nil), suite.db), suite.storage) | ||||
| 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator) | ||||
| 	suite.userModule = user.New(suite.config, suite.processor, suite.log).(*user.Module) | ||||
| 	suite.securityModule = security.New(suite.config, suite.db, suite.log).(*security.Module) | ||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||
| } | ||||
| 
 | ||||
| func (suite *UserGetTestSuite) TearDownTest() { | ||||
| 	testrig.StandardDBTeardown(suite.db) | ||||
| 	testrig.StandardStorageTeardown(suite.storage) | ||||
| } | ||||
| 
 | ||||
| func (suite *UserGetTestSuite) TestGetUser() { | ||||
| 	// the dereference we're gonna use | ||||
| 	derefRequests := testrig.NewTestDereferenceRequests(suite.testAccounts) | ||||
|  |  | |||
							
								
								
									
										124
									
								
								internal/api/s2s/webfinger/webfinger_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								internal/api/s2s/webfinger/webfinger_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,124 @@ | |||
| /* | ||||
|    GoToSocial | ||||
|    Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org | ||||
| 
 | ||||
|    This program is free software: you can redistribute it and/or modify | ||||
|    it under the terms of the GNU Affero General Public License as published by | ||||
|    the Free Software Foundation, either version 3 of the License, or | ||||
|    (at your option) any later version. | ||||
| 
 | ||||
|    This program is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    GNU Affero General Public License for more details. | ||||
| 
 | ||||
|    You should have received a copy of the GNU Affero General Public License | ||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| */ | ||||
| 
 | ||||
| package webfinger_test | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/rand" | ||||
| 	"crypto/rsa" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"git.iim.gay/grufwub/go-store/kv" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/ap" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/s2s/webfinger" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/security" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/config" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/db" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/federation" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/processing" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/typeutils" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
| type WebfingerStandardTestSuite struct { | ||||
| 	// standard suite interfaces | ||||
| 	suite.Suite | ||||
| 	config         *config.Config | ||||
| 	db             db.DB | ||||
| 	log            *logrus.Logger | ||||
| 	tc             typeutils.TypeConverter | ||||
| 	federator      federation.Federator | ||||
| 	processor      processing.Processor | ||||
| 	storage        *kv.KVStore | ||||
| 	securityModule *security.Module | ||||
| 
 | ||||
| 	// standard suite models | ||||
| 	testTokens       map[string]*gtsmodel.Token | ||||
| 	testClients      map[string]*gtsmodel.Client | ||||
| 	testApplications map[string]*gtsmodel.Application | ||||
| 	testUsers        map[string]*gtsmodel.User | ||||
| 	testAccounts     map[string]*gtsmodel.Account | ||||
| 	testAttachments  map[string]*gtsmodel.MediaAttachment | ||||
| 	testStatuses     map[string]*gtsmodel.Status | ||||
| 
 | ||||
| 	// module being tested | ||||
| 	webfingerModule *webfinger.Module | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerStandardTestSuite) SetupSuite() { | ||||
| 	suite.testTokens = testrig.NewTestTokens() | ||||
| 	suite.testClients = testrig.NewTestClients() | ||||
| 	suite.testApplications = testrig.NewTestApplications() | ||||
| 	suite.testUsers = testrig.NewTestUsers() | ||||
| 	suite.testAccounts = testrig.NewTestAccounts() | ||||
| 	suite.testAttachments = testrig.NewTestAttachments() | ||||
| 	suite.testStatuses = testrig.NewTestStatuses() | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerStandardTestSuite) SetupTest() { | ||||
| 	suite.config = testrig.NewTestConfig() | ||||
| 	suite.db = testrig.NewTestDB() | ||||
| 	suite.tc = testrig.NewTestTypeConverter(suite.db) | ||||
| 	suite.storage = testrig.NewTestStorage() | ||||
| 	suite.log = testrig.NewTestLog() | ||||
| 	suite.federator = testrig.NewTestFederator(suite.db, testrig.NewTestTransportController(testrig.NewMockHTTPClient(nil), suite.db), suite.storage) | ||||
| 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator) | ||||
| 	suite.webfingerModule = webfinger.New(suite.config, suite.processor, suite.log).(*webfinger.Module) | ||||
| 	suite.securityModule = security.New(suite.config, suite.db, suite.log).(*security.Module) | ||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerStandardTestSuite) TearDownTest() { | ||||
| 	testrig.StandardDBTeardown(suite.db) | ||||
| 	testrig.StandardStorageTeardown(suite.storage) | ||||
| } | ||||
| 
 | ||||
| func accountDomainAccount() *gtsmodel.Account { | ||||
| 	privateKey, err := rsa.GenerateKey(rand.Reader, 2048) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	publicKey := &privateKey.PublicKey | ||||
| 
 | ||||
| 	acct := >smodel.Account{ | ||||
| 		ID:                    "01FG1K8EA7SYHEC7V6XKVNC4ZA", | ||||
| 		CreatedAt:             time.Now(), | ||||
| 		UpdatedAt:             time.Now(), | ||||
| 		Username:              "aaaaa", | ||||
| 		Domain:                "", | ||||
| 		Privacy:               gtsmodel.VisibilityDefault, | ||||
| 		Language:              "en", | ||||
| 		URI:                   "http://gts.example.org/users/aaaaa", | ||||
| 		URL:                   "http://gts.example.org/@aaaaa", | ||||
| 		InboxURI:              "http://gts.example.org/users/aaaaa/inbox", | ||||
| 		OutboxURI:             "http://gts.example.org/users/aaaaa/outbox", | ||||
| 		FollowingURI:          "http://gts.example.org/users/aaaaa/following", | ||||
| 		FollowersURI:          "http://gts.example.org/users/aaaaa/followers", | ||||
| 		FeaturedCollectionURI: "http://gts.example.org/users/aaaaa/collections/featured", | ||||
| 		ActorType:             ap.ActorPerson, | ||||
| 		PrivateKey:            privateKey, | ||||
| 		PublicKey:             publicKey, | ||||
| 		PublicKeyURI:          "http://gts.example.org/users/aaaaa/main-key", | ||||
| 	} | ||||
| 
 | ||||
| 	return acct | ||||
| } | ||||
|  | @ -43,19 +43,21 @@ func (m *Module) WebfingerGETRequest(c *gin.Context) { | |||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	withAcct := strings.Split(q, "acct:") | ||||
| 	if len(withAcct) != 2 { | ||||
| 		l.Debugf("aborting request because resource query %s could not be split by 'acct:'", q) | ||||
| 	// remove the acct: prefix if it's present | ||||
| 	trimAcct := strings.TrimPrefix(q, "acct:") | ||||
| 	// remove the first @ in @whatever@example.org if it's present | ||||
| 	namestring := strings.TrimPrefix(trimAcct, "@") | ||||
| 
 | ||||
| 	// at this point we should have a string like some_user@example.org | ||||
| 	l.Debugf("got finger request for '%s'", namestring) | ||||
| 
 | ||||
| 	usernameAndAccountDomain := strings.Split(namestring, "@") | ||||
| 	if len(usernameAndAccountDomain) != 2 { | ||||
| 		l.Debugf("aborting request because username and domain could not be parsed from %s", namestring) | ||||
| 		c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	usernameAndAccountDomain := strings.Split(withAcct[1], "@") | ||||
| 	if len(usernameAndAccountDomain) != 2 { | ||||
| 		l.Debugf("aborting request because username and domain could not be parsed from %s", withAcct[1]) | ||||
| 		c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) | ||||
| 		return | ||||
| 	} | ||||
| 	username := strings.ToLower(usernameAndAccountDomain[0]) | ||||
| 	accountDomain := strings.ToLower(usernameAndAccountDomain[1]) | ||||
| 	if username == "" || accountDomain == "" { | ||||
|  | @ -77,7 +79,7 @@ func (m *Module) WebfingerGETRequest(c *gin.Context) { | |||
| 		ctx = context.WithValue(ctx, util.APRequestingPublicKeyVerifier, verifier) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err := m.processor.GetWebfingerAccount(ctx, username, c.Request.URL) | ||||
| 	resp, err := m.processor.GetWebfingerAccount(ctx, username) | ||||
| 	if err != nil { | ||||
| 		l.Debugf("aborting request with an error: %s", err.Error()) | ||||
| 		c.JSON(err.Code(), gin.H{"error": err.Safe()}) | ||||
|  |  | |||
							
								
								
									
										155
									
								
								internal/api/s2s/webfinger/webfingerget_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								internal/api/s2s/webfinger/webfingerget_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,155 @@ | |||
| /* | ||||
|    GoToSocial | ||||
|    Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org | ||||
| 
 | ||||
|    This program is free software: you can redistribute it and/or modify | ||||
|    it under the terms of the GNU Affero General Public License as published by | ||||
|    the Free Software Foundation, either version 3 of the License, or | ||||
|    (at your option) any later version. | ||||
| 
 | ||||
|    This program is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    GNU Affero General Public License for more details. | ||||
| 
 | ||||
|    You should have received a copy of the GNU Affero General Public License | ||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| */ | ||||
| 
 | ||||
| package webfinger_test | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/gin-gonic/gin" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/s2s/webfinger" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/processing" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
| type WebfingerGetTestSuite struct { | ||||
| 	WebfingerStandardTestSuite | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerGetTestSuite) TestFingerUser() { | ||||
| 	targetAccount := suite.testAccounts["local_account_1"] | ||||
| 
 | ||||
| 	// setup request | ||||
| 	requestPath := fmt.Sprintf("/%s?resource=acct:%s@%s", webfinger.WebfingerBasePath, targetAccount.Username, suite.config.Host) | ||||
| 
 | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx, _ := gin.CreateTestContext(recorder) | ||||
| 	ctx.Request = httptest.NewRequest(http.MethodGet, requestPath, nil) // the endpoint we're hitting | ||||
| 
 | ||||
| 	// trigger the function being tested | ||||
| 	suite.webfingerModule.WebfingerGETRequest(ctx) | ||||
| 
 | ||||
| 	// check response | ||||
| 	suite.EqualValues(http.StatusOK, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 	b, err := ioutil.ReadAll(result.Body) | ||||
| 	assert.NoError(suite.T(), err) | ||||
| 
 | ||||
| 	suite.Equal(`{"subject":"acct:the_mighty_zork@localhost:8080","aliases":["http://localhost:8080/users/the_mighty_zork","http://localhost:8080/@the_mighty_zork"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"http://localhost:8080/@the_mighty_zork"},{"rel":"self","type":"application/activity+json","href":"http://localhost:8080/users/the_mighty_zork"}]}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerGetTestSuite) TestFingerUserWithDifferentAccountDomainByHost() { | ||||
| 	suite.config.Host = "gts.example.org" | ||||
| 	suite.config.AccountDomain = "example.org" | ||||
| 	suite.processor = processing.NewProcessor(suite.config, suite.tc, suite.federator, testrig.NewTestOauthServer(suite.db), testrig.NewTestMediaHandler(suite.db, suite.storage), suite.storage, testrig.NewTestTimelineManager(suite.db), suite.db, suite.log) | ||||
| 	suite.webfingerModule = webfinger.New(suite.config, suite.processor, suite.log).(*webfinger.Module) | ||||
| 
 | ||||
| 	targetAccount := accountDomainAccount() | ||||
| 	if err := suite.db.Put(context.Background(), targetAccount); err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// setup request | ||||
| 	requestPath := fmt.Sprintf("/%s?resource=acct:%s@%s", webfinger.WebfingerBasePath, targetAccount.Username, suite.config.Host) | ||||
| 
 | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx, _ := gin.CreateTestContext(recorder) | ||||
| 	ctx.Request = httptest.NewRequest(http.MethodGet, requestPath, nil) // the endpoint we're hitting | ||||
| 
 | ||||
| 	// trigger the function being tested | ||||
| 	suite.webfingerModule.WebfingerGETRequest(ctx) | ||||
| 
 | ||||
| 	// check response | ||||
| 	suite.EqualValues(http.StatusOK, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 	b, err := ioutil.ReadAll(result.Body) | ||||
| 	assert.NoError(suite.T(), err) | ||||
| 
 | ||||
| 	suite.Equal(`{"subject":"acct:aaaaa@example.org","aliases":["http://gts.example.org/users/aaaaa","http://gts.example.org/@aaaaa"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"http://gts.example.org/@aaaaa"},{"rel":"self","type":"application/activity+json","href":"http://gts.example.org/users/aaaaa"}]}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerGetTestSuite) TestFingerUserWithDifferentAccountDomainByAccountDomain() { | ||||
| 	suite.config.Host = "gts.example.org" | ||||
| 	suite.config.AccountDomain = "example.org" | ||||
| 	suite.processor = processing.NewProcessor(suite.config, suite.tc, suite.federator, testrig.NewTestOauthServer(suite.db), testrig.NewTestMediaHandler(suite.db, suite.storage), suite.storage, testrig.NewTestTimelineManager(suite.db), suite.db, suite.log) | ||||
| 	suite.webfingerModule = webfinger.New(suite.config, suite.processor, suite.log).(*webfinger.Module) | ||||
| 
 | ||||
| 	targetAccount := accountDomainAccount() | ||||
| 	if err := suite.db.Put(context.Background(), targetAccount); err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// setup request | ||||
| 	requestPath := fmt.Sprintf("/%s?resource=acct:%s@%s", webfinger.WebfingerBasePath, targetAccount.Username, suite.config.AccountDomain) | ||||
| 
 | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx, _ := gin.CreateTestContext(recorder) | ||||
| 	ctx.Request = httptest.NewRequest(http.MethodGet, requestPath, nil) // the endpoint we're hitting | ||||
| 
 | ||||
| 	// trigger the function being tested | ||||
| 	suite.webfingerModule.WebfingerGETRequest(ctx) | ||||
| 
 | ||||
| 	// check response | ||||
| 	suite.EqualValues(http.StatusOK, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 	b, err := ioutil.ReadAll(result.Body) | ||||
| 	assert.NoError(suite.T(), err) | ||||
| 
 | ||||
| 	suite.Equal(`{"subject":"acct:aaaaa@example.org","aliases":["http://gts.example.org/users/aaaaa","http://gts.example.org/@aaaaa"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"http://gts.example.org/@aaaaa"},{"rel":"self","type":"application/activity+json","href":"http://gts.example.org/users/aaaaa"}]}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func (suite *WebfingerGetTestSuite) TestFingerUserWithoutAcct() { | ||||
| 	targetAccount := suite.testAccounts["local_account_1"] | ||||
| 
 | ||||
| 	// setup request -- leave out the 'acct:' prefix, which is prettymuch what pixelfed currently does | ||||
| 	requestPath := fmt.Sprintf("/%s?resource=%s@%s", webfinger.WebfingerBasePath, targetAccount.Username, suite.config.Host) | ||||
| 
 | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx, _ := gin.CreateTestContext(recorder) | ||||
| 	ctx.Request = httptest.NewRequest(http.MethodGet, requestPath, nil) // the endpoint we're hitting | ||||
| 
 | ||||
| 	// trigger the function being tested | ||||
| 	suite.webfingerModule.WebfingerGETRequest(ctx) | ||||
| 
 | ||||
| 	// check response | ||||
| 	suite.EqualValues(http.StatusOK, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 	b, err := ioutil.ReadAll(result.Body) | ||||
| 	assert.NoError(suite.T(), err) | ||||
| 
 | ||||
| 	suite.Equal(`{"subject":"acct:the_mighty_zork@localhost:8080","aliases":["http://localhost:8080/users/the_mighty_zork","http://localhost:8080/@the_mighty_zork"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"http://localhost:8080/@the_mighty_zork"},{"rel":"self","type":"application/activity+json","href":"http://localhost:8080/users/the_mighty_zork"}]}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func TestWebfingerGetTestSuite(t *testing.T) { | ||||
| 	suite.Run(t, new(WebfingerGetTestSuite)) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue