diff options
author | 2023-09-11 18:38:31 +0200 | |
---|---|---|
committer | 2023-09-11 18:38:31 +0200 | |
commit | 2cac5a4613ab51a5ac33a16cb54bb1210be9e8ce (patch) | |
tree | 96db54305c3208bb6458c015ac774b229561596a /internal/api | |
parent | [chore] bump bun v1.1.14 -> v1.1.15 (#2195) (diff) | |
download | gotosocial-2cac5a4613ab51a5ac33a16cb54bb1210be9e8ce.tar.xz |
[feature] Support Actor URIs for webfinger queries (#2187)
* [feature] Support Actor URIs for webfinger queries
It's now possible to pass an Actor URI as the resource to query for when
doing a webfinger query. The code now extracts the username and domain
from the URI. The URI needs to be fully qualified, including having a
scheme of http or https to be recognised as such.
The acct scheme is handled as we used to, including dealing with an
erroneous leading @ on the username. We retain the ability to handle
resources without a scheme by parsing them again with the acct scheme if
the original parse failed. This can happen due to parsing ambiguities
when dealing with a string like user@domain.tld:port.
* [bugfix] Remove debugging changes
* [chore] Make TestExtractNamestring table-driven
* [chore] Unnest Trim and Split for readability
Diffstat (limited to 'internal/api')
-rw-r--r-- | internal/api/wellknown/webfinger/webfingerget_test.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/api/wellknown/webfinger/webfingerget_test.go b/internal/api/wellknown/webfinger/webfingerget_test.go index 5b1cc47dd..fb450470f 100644 --- a/internal/api/wellknown/webfinger/webfingerget_test.go +++ b/internal/api/wellknown/webfinger/webfingerget_test.go @@ -143,6 +143,45 @@ func (suite *WebfingerGetTestSuite) TestFingerUser() { }`, resp) } +func (suite *WebfingerGetTestSuite) TestFingerUserActorURI() { + targetAccount := suite.testAccounts["local_account_1"] + host := config.GetHost() + + tests := []struct { + resource string + }{ + {resource: fmt.Sprintf("https://%s/@%s", host, targetAccount.Username)}, + {resource: fmt.Sprintf("https://%s/users/%s", host, targetAccount.Username)}, + } + + for _, tt := range tests { + tt := tt + suite.Run(tt.resource, func() { + requestPath := fmt.Sprintf("/%s?resource=%s", webfinger.WebfingerBasePath, tt.resource) + resp := suite.finger(requestPath) + 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" + } + ] +}`, resp) + }) + } +} + func (suite *WebfingerGetTestSuite) TestFingerUserWithDifferentAccountDomainByHost() { targetAccount := suite.funkifyAccountDomain("gts.example.org", "example.org") requestPath := fmt.Sprintf("/%s?resource=acct:%s@%s", webfinger.WebfingerBasePath, targetAccount.Username, config.GetHost()) |