From f0cded88bfa4ea2d135232862bc96fcaafcd3cb2 Mon Sep 17 00:00:00 2001 From: Anthony Wang Date: Wed, 27 Jul 2022 10:24:04 -0500 Subject: [PATCH] Start cleaning up fork.go --- modules/activitypub/fork.go | 37 +++++++++++++++++++----------- modules/activitypub/star.go | 16 +++++++++++++ routers/api/v1/activitypub/repo.go | 14 ++++++----- 3 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 modules/activitypub/star.go diff --git a/modules/activitypub/fork.go b/modules/activitypub/fork.go index 5a89ed3540..aa0893dd0f 100644 --- a/modules/activitypub/fork.go +++ b/modules/activitypub/fork.go @@ -6,12 +6,10 @@ package activitypub import ( "context" - "strings" "code.gitea.io/gitea/models/forgefed" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/services/migrations" repo_service "code.gitea.io/gitea/services/repository" @@ -19,17 +17,21 @@ import ( ap "github.com/go-ap/activitypub" ) -func Fork(ctx context.Context, instance, username, reponame, destUsername string) error { +func CreateFork(ctx context.Context, instance, username, reponame, destUsername string) error { // TODO: Clean this up // Migrate repository code - user, _ := user_model.GetUserByName(ctx, destUsername) - _, err := migrations.MigrateRepository(ctx, user, destUsername, migrations.MigrateOptions{ + user, err := user_model.GetUserByName(ctx, destUsername) + if err != nil { + return err + } + + _, err = migrations.MigrateRepository(ctx, user, destUsername, migrations.MigrateOptions{ CloneAddr: "https://" + instance + "/" + username + "/" + reponame + ".git", RepoName: reponame, }, nil) if err != nil { - log.Warn("Couldn't create fork", err) + return err } // TODO: Make the migrated repo a fork @@ -45,26 +47,33 @@ func Fork(ctx context.Context, instance, username, reponame, destUsername string return Send(user, &create) } -func ForkFromCreate(ctx context.Context, repository forgefed.Repository) error { +func ReceiveFork(ctx context.Context, create ap.Create) error { // TODO: Clean this up + + repository := create.Object.(*forgefed.Repository) + + actor, err := personIRIToUser(ctx, create.Actor.GetLink()) + if err != nil { + return err + } // Don't create an actual copy of the remote repo! // https://gitea.com/Ta180m/gitea/issues/7 // Create the fork repoIRI := repository.GetLink() - repoIRISplit := strings.Split(repoIRI.String(), "/") - instance := repoIRISplit[2] - username := repoIRISplit[7] - reponame := repoIRISplit[8] + username, reponame, err := repositoryIRIToName(repoIRI) + if err != nil { + return err + } // FederatedUserNew(username + "@" + instance, ) - user, _ := user_model.GetUserByName(ctx, username+"@"+instance) + user, _ := user_model.GetUserByName(ctx, username) // var repo forgefed.Repository // repo = activity.Object - repo, _ := repo_model.GetRepositoryByOwnerAndName("Ta180m", reponame) // hardcoded for now :( + repo, _ := repo_model.GetRepositoryByOwnerAndName(actor.Name, reponame) // hardcoded for now :( - _, err := repo_service.ForkRepository(ctx, user, user, repo_service.ForkRepoOptions{BaseRepo: repo, Name: reponame, Description: "this is a remote fork"}) + _, err = repo_service.ForkRepository(ctx, user, user, repo_service.ForkRepoOptions{BaseRepo: repo, Name: reponame, Description: "this is a remote fork"}) return err } diff --git a/modules/activitypub/star.go b/modules/activitypub/star.go new file mode 100644 index 0000000000..e44084fa49 --- /dev/null +++ b/modules/activitypub/star.go @@ -0,0 +1,16 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package activitypub + +import ( + "context" + + ap "github.com/go-ap/activitypub" +) + +// Star a repo +func Star(ctx context.Context, like ap.Like) error { + return nil +} diff --git a/routers/api/v1/activitypub/repo.go b/routers/api/v1/activitypub/repo.go index 3c7712a1c9..188bda2037 100644 --- a/routers/api/v1/activitypub/repo.go +++ b/routers/api/v1/activitypub/repo.go @@ -114,18 +114,18 @@ func RepoInbox(ctx *context.APIContext) { return } + if activity.Object == nil { + ctx.ServerError("Activity does not contain object", err) + return + } + // Process activity switch activity.Type { case ap.CreateType: - if activity.Object == nil { - ctx.ServerError("Activity does not contain object", err) - return - } - switch activity.Object.(ap.Object).Type { case forgefed.RepositoryType: // Fork created by remote instance - activitypub.ForkFromCreate(ctx, activity.Object.(forgefed.Repository)) + activitypub.ReceiveFork(ctx, activity) case forgefed.TicketType: // New issue or pull request ticket := activity.Object.(forgefed.Ticket) @@ -140,6 +140,8 @@ func RepoInbox(ctx *context.APIContext) { // New comment activitypub.Comment(ctx, activity.Object.(ap.Note)) } + case ap.LikeType: + activitypub.Star(ctx, activity) default: log.Info("Incoming unsupported ActivityStreams type: %s", activity.Type) ctx.PlainText(http.StatusNotImplemented, "ActivityStreams type not supported")