From 976256bf3d8ea4e9fccabe2e0c9011e582ad1106 Mon Sep 17 00:00:00 2001
From: erik <erik.seiert@meissa-gmbh.de>
Date: Thu, 7 Dec 2023 13:21:26 +0100
Subject: [PATCH] Refactor if conditional to switch, use split up functions

---
 routers/api/v1/activitypub/repository.go | 44 ++++++++++++++++--------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/routers/api/v1/activitypub/repository.go b/routers/api/v1/activitypub/repository.go
index c7e20dbe74..0b077f7b91 100644
--- a/routers/api/v1/activitypub/repository.go
+++ b/routers/api/v1/activitypub/repository.go
@@ -229,6 +229,8 @@ func RepositoryInbox(ctx *context.APIContext) {
 	//   "204":
 	//     "$ref": "#/responses/empty"
 
+	var user *user_model.User
+
 	log.Info("RepositoryInbox: repo %v, %v", ctx.Repo.Repository.OwnerName, ctx.Repo.Repository.Name)
 	activity := web.GetForm(ctx).(*forgefed.Star)
 	log.Info("RepositoryInbox: Activity.Source %v", activity.Source)
@@ -264,24 +266,36 @@ func RepositoryInbox(ctx *context.APIContext) {
 		panic(fmt.Errorf("searching for user failed: %v", err))
 	}
 
-	if len(users) == 0 {
-		//	ToDo:	We need a remote server with federation enabled to properly test this
-
-		body, err := getBody(remoteStargazer, ctx.Repo.Owner.HTMLURL(), ctx)
-		if err != nil {
-			panic(fmt.Errorf("http get failed: %v", err))
+	switch len(users) {
+	case 0:
+		{
+			body, err := getBody(remoteStargazer, ctx.Repo.Owner.HTMLURL(), ctx)
+			if err != nil {
+				panic(fmt.Errorf("http get failed: %v", err))
+			}
+			person, err := unmarshallPersonJSON(body)
+			if err != nil {
+				panic(fmt.Errorf("getting user failed: %v", err))
+			}
+			user, err = createFederatedUserFromPerson(person, remoteStargazer)
+			if err != nil {
+				panic(fmt.Errorf("create federated user: %w", err))
+			}
+			err = saveFederatedUserRecord(ctx, user)
+			if err != nil {
+				panic(fmt.Errorf("save user: %w", err))
+			}
 		}
-
-		person, err := unmarshallPersonJSON(body)
-		if err != nil {
-			panic(fmt.Errorf("getting user failed: %v", err))
+	case 1:
+		{
+			user = users[0]
+			log.Info("%v", user)
 		}
-
-		// create user
-		err = createFederatedUserFromPerson(ctx, person, remoteStargazer)
-		if err != nil {
-			panic(fmt.Errorf("createUser: %w", err))
+	default:
+		{
+			panic(fmt.Errorf("found more than one matches for federated users"))
 		}
+	}
 
 	} else {
 		// use first user