mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[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
This commit is contained in:
@@ -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())
|
||||
|
Reference in New Issue
Block a user