From dadfb29ae944e18c02678a2eff433d235578c914 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Wed, 29 May 2024 08:44:00 +0200
Subject: [PATCH] relax validation

---
 modules/forgefed/actor.go                 | 21 +++------------------
 modules/forgefed/actor_test.go            |  2 +-
 services/federation/federation_service.go |  4 ++--
 3 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/modules/forgefed/actor.go b/modules/forgefed/actor.go
index 8c6621ee36..92114690dd 100644
--- a/modules/forgefed/actor.go
+++ b/modules/forgefed/actor.go
@@ -8,7 +8,6 @@ import (
 	"net/url"
 	"strings"
 
-	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/modules/validation"
 
 	ap "github.com/go-ap/activitypub"
@@ -71,10 +70,7 @@ type PersonID struct {
 
 // Factory function for PersonID. Created struct is asserted to be valid
 func NewPersonID(uri, source string) (PersonID, error) {
-	// TODO: remove after test
-	//if !validation.IsValidExternalURL(uri) {
-	//	return PersonId{}, fmt.Errorf("uri %s is not a valid external url", uri)
-	//}
+
 	result, err := newActorID(uri)
 	if err != nil {
 		return PersonID{}, err
@@ -125,18 +121,7 @@ type RepositoryID struct {
 }
 
 // Factory function for RepositoryID. Created struct is asserted to be valid.
-// ToDo: Add a NewForeignRepositoryID
-func NewRepositoryID(uri, source string, isFollowing bool) (RepositoryID, error) {
-
-	if isFollowing {
-		if !validation.IsValidURL(uri) {
-			return RepositoryID{}, fmt.Errorf("uri %s is not a valid url on their host: %s", uri, setting.AppURL+"api")
-		}
-	} else {
-		if !validation.IsAPIURL(uri) {
-			return RepositoryID{}, fmt.Errorf("uri %s is not a valid repo url on our host: %s", uri, setting.AppURL+"api")
-		}
-	}
+func NewRepositoryID(uri, source string) (RepositoryID, error) {
 
 	result, err := newActorID(uri)
 	if err != nil {
@@ -144,7 +129,7 @@ func NewRepositoryID(uri, source string, isFollowing bool) (RepositoryID, error)
 	}
 	result.Source = source
 
-	// validate Person specific path
+	// validate Person specific
 	repoID := RepositoryID{result}
 	if valid, err := validation.IsValid(repoID); !valid {
 		return RepositoryID{}, err
diff --git a/modules/forgefed/actor_test.go b/modules/forgefed/actor_test.go
index 9f41a359ad..a3c01eceb0 100644
--- a/modules/forgefed/actor_test.go
+++ b/modules/forgefed/actor_test.go
@@ -52,7 +52,7 @@ func TestNewRepositoryId(t *testing.T) {
 	expected.Host = "localhost"
 	expected.Port = "3000"
 	expected.UnvalidatedInput = "http://localhost:3000/api/activitypub/repository-id/1"
-	sut, _ := NewRepositoryID("http://localhost:3000/api/activitypub/repository-id/1", "forgejo", false)
+	sut, _ := NewRepositoryID("http://localhost:3000/api/activitypub/repository-id/1", "forgejo")
 	if sut != expected {
 		t.Errorf("expected: %v\n but was: %v\n", expected, sut)
 	}
diff --git a/services/federation/federation_service.go b/services/federation/federation_service.go
index 9a54b569ed..a7d9b6ef80 100644
--- a/services/federation/federation_service.go
+++ b/services/federation/federation_service.go
@@ -55,7 +55,7 @@ func ProcessLikeActivity(ctx context.Context, form any, repositoryID int64) (int
 	log.Info("Actor accepted:%v", actorID)
 
 	// parse objectID (repository)
-	objectID, err := fm.NewRepositoryID(activity.Object.GetID().String(), string(forgefed.ForgejoSourceType), false)
+	objectID, err := fm.NewRepositoryID(activity.Object.GetID().String(), string(forgefed.ForgejoSourceType))
 	if err != nil {
 		return http.StatusNotAcceptable, "Invalid objectId", err
 	}
@@ -222,7 +222,7 @@ func StoreFollowingRepoList(ctx context.Context, localRepoID int64, followingRep
 		if err != nil {
 			return http.StatusInternalServerError, "Wrong FederationHost", err
 		}
-		followingRepoID, err := fm.NewRepositoryID(uri, string(federationHost.NodeInfo.SoftwareName), true)
+		followingRepoID, err := fm.NewRepositoryID(uri, string(federationHost.NodeInfo.SoftwareName))
 		if err != nil {
 			return http.StatusNotAcceptable, "Invalid federated repo", err
 		}