Changes
4 changed files (+49/-9)
-
-
@@ -7,8 +7,8 @@ import ("net/http" "strconv" user_model "code.gitea.io/gitea/models/user" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/forgefed" "code.gitea.io/gitea/modules/setting"
-
@@ -44,7 +44,7 @@ return} err = createPerson(ctx, person) if err != nil { ctx.ServerError("FederatedUserNew", err) ctx.ServerError("CreatePerson", err) return } user, err := user_model.GetUserByIRI(ctx, object.GetLink().String())
-
@@ -59,7 +59,7 @@ err = forgefed.OnRepository(object, func(r *forgefed.Repository) error {return createRepository(ctx, r) }) if err != nil { ctx.ServerError("FederatedRepoNew", err) ctx.ServerError("CreateRepository", err) return } repo, err := repo_model.GetRepositoryByIRI(ctx, object.GetLink().String())
-
-
-
@@ -126,12 +126,13 @@ }// Create a new federated repo from a Repository object func createRepository(ctx context.Context, repository *forgefed.Repository) error { err := createPersonFromIRI(ctx, repository.AttributedTo.GetLink()) if err != nil { return err } user, err := user_model.GetUserByIRI(ctx, repository.AttributedTo.GetLink().String()) if err != nil { if user_model.IsErrUserNotExist(err) { err := createPersonFromIRI(ctx, repository.AttributedTo.GetLink()) if err != nil { return err } } else if err != nil { return err }
-
@@ -181,6 +182,7 @@ }// Create an issue func createIssue(ctx context.Context, ticket *forgefed.Ticket) error { // TODO: don't call this function here err := createRepositoryFromIRI(ctx, ticket.Context.GetLink()) if err != nil { return err
-
@@ -215,6 +217,7 @@ }// Create a pull request func createPullRequest(ctx context.Context, ticket *forgefed.Ticket) error { // TODO: don't call this function here err := createRepositoryFromIRI(ctx, ticket.Context.GetLink()) if err != nil { return err
-
@@ -271,6 +274,7 @@ }// Create a comment func createComment(ctx context.Context, note *ap.Note) error { // Make sure repo exists user, err := user_model.GetUserByIRI(ctx, note.AttributedTo.GetLink().String()) if err != nil { return err
-
-
-
@@ -108,6 +108,7 @@ }if activity.Type == ap.UndoType { return ap.OnActivity(activity.Object, func(a *ap.Activity) error { if a.Actor != nil && keyID != a.Actor.GetLink().String()+"#main-key" { // TODO: This doesn't necessarily mean impersonation since the object might be created by someone else return errors.New("actor does not match HTTP signature keyID") } if a.AttributedTo != nil && keyID != a.AttributedTo.GetLink().String()+"#main-key" {
-
-
-
@@ -7,6 +7,7 @@ import ("context" "code.gitea.io/gitea/models/auth" "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/services/activitypub"
-
@@ -41,5 +42,39 @@ if err != nil {return err } } return repo_model.StarRepo(userID, repoID, star) err = repo_model.StarRepo(userID, repoID, star) if err != nil { return err } user, err := user_model.GetUserByID(ctx, userID) if err != nil { return err } followers, count, err := user_model.GetUserFollowers(ctx, user, user, db.ListOptions{}) if err != nil { return err } note := ap.Note{ Type: ap.NoteType, ID: ap.IRI(repo.GetIRI()), // TODO: serve the note at an API endpoint AttributedTo: ap.IRI(user.GetIRI()), To: ap.ItemCollection{ap.IRI("https://www.w3.org/ns/activitystreams#Public")}, } note.Content = ap.NaturalLanguageValuesNew() err = note.Content.Set("en", ap.Content(user.Name+" starred <a href=\""+repo.HTMLURL()+"\">"+repo.FullName()+"</a>")) if err != nil { return err } create := ap.Create{ Type: ap.CreateType, Actor: ap.PersonNew(ap.IRI(user.GetIRI())), Object: note, To: ap.ItemCollection{}, } for i := int64(0); i < count; i++ { if followers[i].LoginType == auth.Federated { create.To.Append(ap.IRI(followers[i].GetIRI()+"/inbox")) } } return activitypub.Send(user, &create) }
-