2022-05-09 21:20:21 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-05-09 21:20:21 +03:00
2022-09-02 22:18:23 +03:00
package integration
2022-05-09 21:20:21 +03:00
import (
"fmt"
"net/http"
"net/url"
"testing"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2022-05-09 21:20:21 +03:00
"github.com/stretchr/testify/assert"
)
func TestWebfinger ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2022-05-09 21:20:21 +03:00
setting . Federation . Enabled = true
defer func ( ) {
setting . Federation . Enabled = false
} ( )
2022-08-16 05:22:25 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2022-05-09 21:20:21 +03:00
appURL , _ := url . Parse ( setting . AppURL )
type webfingerLink struct {
2023-07-04 21:36:08 +03:00
Rel string ` json:"rel,omitempty" `
Type string ` json:"type,omitempty" `
Href string ` json:"href,omitempty" `
Titles map [ string ] string ` json:"titles,omitempty" `
Properties map [ string ] any ` json:"properties,omitempty" `
2022-05-09 21:20:21 +03:00
}
type webfingerJRD struct {
2023-07-04 21:36:08 +03:00
Subject string ` json:"subject,omitempty" `
Aliases [ ] string ` json:"aliases,omitempty" `
Properties map [ string ] any ` json:"properties,omitempty" `
Links [ ] * webfingerLink ` json:"links,omitempty" `
2022-05-09 21:20:21 +03:00
}
session := loginUser ( t , "user1" )
req := NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=acct:%s@%s" , user . LowerName , appURL . Host ) )
resp := MakeRequest ( t , req , http . StatusOK )
2024-04-02 11:41:47 +03:00
assert . Equal ( t , resp . Header ( ) . Get ( "Content-Type" ) , "application/jrd+json" )
2022-05-09 21:20:21 +03:00
var jrd webfingerJRD
DecodeJSON ( t , resp , & jrd )
assert . Equal ( t , "acct:user2@" + appURL . Host , jrd . Subject )
2023-04-04 05:08:23 +03:00
assert . ElementsMatch ( t , [ ] string { user . HTMLURL ( ) , appURL . String ( ) + "api/v1/activitypub/user-id/" + fmt . Sprint ( user . ID ) } , jrd . Aliases )
2022-05-09 21:20:21 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=acct:%s@%s" , user . LowerName , "unknown.host" ) )
MakeRequest ( t , req , http . StatusBadRequest )
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=acct:%s@%s" , "user31" , appURL . Host ) )
MakeRequest ( t , req , http . StatusNotFound )
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=acct:%s@%s" , "user31" , appURL . Host ) )
session . MakeRequest ( t , req , http . StatusOK )
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=mailto:%s" , user . Email ) )
MakeRequest ( t , req , http . StatusNotFound )
2024-03-24 09:07:01 +03:00
2024-03-30 16:52:29 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=https://%s/%s/" , appURL . Host , user . Name ) )
session . MakeRequest ( t , req , http . StatusOK )
2024-03-24 09:07:01 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=https://%s/%s" , appURL . Host , user . Name ) )
session . MakeRequest ( t , req , http . StatusOK )
2024-03-30 18:25:53 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=http://%s/%s/foo" , appURL . Host , user . Name ) )
session . MakeRequest ( t , req , http . StatusNotFound )
2024-03-24 09:07:01 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=http://%s" , appURL . Host ) )
2024-03-30 18:25:53 +03:00
MakeRequest ( t , req , http . StatusNotFound )
2024-03-24 09:07:01 +03:00
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/.well-known/webfinger?resource=http://%s/%s/foo" , "example.com" , user . Name ) )
MakeRequest ( t , req , http . StatusBadRequest )
2022-05-09 21:20:21 +03:00
}