mirror of
				https://github.com/owncast/owncast.git
				synced 2025-11-04 05:17:27 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package inbox
 | 
						|
 | 
						|
import (
 | 
						|
	"net/url"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/go-fed/activity/streams"
 | 
						|
	"github.com/go-fed/activity/streams/vocab"
 | 
						|
	"github.com/owncast/owncast/activitypub/apmodels"
 | 
						|
	"github.com/owncast/owncast/activitypub/persistence"
 | 
						|
	"github.com/owncast/owncast/core/data"
 | 
						|
)
 | 
						|
 | 
						|
func makeFakePerson() vocab.ActivityStreamsPerson {
 | 
						|
	iri, _ := url.Parse("https://freedom.eagle/user/mrfoo")
 | 
						|
	name := "Mr Foo"
 | 
						|
	username := "foodawg"
 | 
						|
	inbox, _ := url.Parse("https://fake.fediverse.server/user/mrfoo/inbox")
 | 
						|
	userAvatarURL, _ := url.Parse("https://fake.fediverse.server/user/mrfoo/avatar.png")
 | 
						|
 | 
						|
	person := streams.NewActivityStreamsPerson()
 | 
						|
 | 
						|
	id := streams.NewJSONLDIdProperty()
 | 
						|
	id.Set(iri)
 | 
						|
	person.SetJSONLDId(id)
 | 
						|
 | 
						|
	nameProperty := streams.NewActivityStreamsNameProperty()
 | 
						|
	nameProperty.AppendXMLSchemaString(name)
 | 
						|
	person.SetActivityStreamsName(nameProperty)
 | 
						|
 | 
						|
	preferredUsernameProperty := streams.NewActivityStreamsPreferredUsernameProperty()
 | 
						|
	preferredUsernameProperty.SetXMLSchemaString(username)
 | 
						|
	person.SetActivityStreamsPreferredUsername(preferredUsernameProperty)
 | 
						|
 | 
						|
	inboxProp := streams.NewActivityStreamsInboxProperty()
 | 
						|
	inboxProp.SetIRI(inbox)
 | 
						|
	person.SetActivityStreamsInbox(inboxProp)
 | 
						|
 | 
						|
	image := streams.NewActivityStreamsImage()
 | 
						|
	imgProp := streams.NewActivityStreamsUrlProperty()
 | 
						|
	imgProp.AppendIRI(userAvatarURL)
 | 
						|
	image.SetActivityStreamsUrl(imgProp)
 | 
						|
	icon := streams.NewActivityStreamsIconProperty()
 | 
						|
	icon.AppendActivityStreamsImage(image)
 | 
						|
	person.SetActivityStreamsIcon(icon)
 | 
						|
 | 
						|
	return person
 | 
						|
}
 | 
						|
 | 
						|
func TestMain(m *testing.M) {
 | 
						|
	data.SetupPersistence(":memory:")
 | 
						|
	data.SetServerURL("https://my.cool.site.biz")
 | 
						|
	persistence.Setup(data.GetDatastore())
 | 
						|
	m.Run()
 | 
						|
}
 | 
						|
 | 
						|
func TestBlockedDomains(t *testing.T) {
 | 
						|
	person := makeFakePerson()
 | 
						|
 | 
						|
	data.SetBlockedFederatedDomains([]string{"freedom.eagle", "guns.life"})
 | 
						|
 | 
						|
	if len(data.GetBlockedFederatedDomains()) != 2 {
 | 
						|
		t.Error("Blocked federated domains is not set correctly")
 | 
						|
	}
 | 
						|
 | 
						|
	for _, domain := range data.GetBlockedFederatedDomains() {
 | 
						|
		if domain == person.GetJSONLDId().GetIRI().Host {
 | 
						|
			return
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	t.Error("Failed to catch blocked domain")
 | 
						|
}
 | 
						|
 | 
						|
func TestBlockedActors(t *testing.T) {
 | 
						|
	person := makeFakePerson()
 | 
						|
	fakeRequest := streams.NewActivityStreamsFollow()
 | 
						|
	persistence.AddFollow(apmodels.ActivityPubActor{
 | 
						|
		ActorIri:         person.GetJSONLDId().GetIRI(),
 | 
						|
		Inbox:            person.GetJSONLDId().GetIRI(),
 | 
						|
		FollowRequestIri: person.GetJSONLDId().GetIRI(),
 | 
						|
		RequestObject:    fakeRequest,
 | 
						|
	}, false)
 | 
						|
	persistence.BlockOrRejectFollower(person.GetJSONLDId().GetIRI().String())
 | 
						|
 | 
						|
	blocked, err := isBlockedActor(person.GetJSONLDId().GetIRI())
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if !blocked {
 | 
						|
		t.Error("Failed to block actor")
 | 
						|
	}
 | 
						|
 | 
						|
	failedBlockIRI, _ := url.Parse("https://freedom.eagle/user/mrbar")
 | 
						|
	failedBlock, err := isBlockedActor(failedBlockIRI)
 | 
						|
 | 
						|
	if failedBlock {
 | 
						|
		t.Error("Invalid blocking of unblocked actor IRI")
 | 
						|
	}
 | 
						|
}
 |