This repository has been archived on 2024-01-11. You can view files and clone it, but cannot push or open issues or pull requests.
gitea/modules/activitypub/follow.go
2022-05-21 13:15:59 -05:00

45 lines
1.4 KiB
Go

// 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"
"strings"
user_model "code.gitea.io/gitea/models/user"
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
)
func Follow(ctx context.Context, activity vocab.ActivityStreamsFollow) error {
actorIRI := activity.GetActivityStreamsActor().Begin().GetIRI()
objectIRI := activity.GetActivityStreamsObject().Begin().GetIRI()
actorIRISplit := strings.Split(actorIRI.String(), "/")
objectIRISplit := strings.Split(objectIRI.String(), "/")
users, _ := user_model.GetUserIDsByNames([]string{actorIRISplit[len(actorIRISplit)-1], objectIRISplit[len(objectIRISplit)-1]}, false)
user_model.FollowUser(users[0], users[1])
// Send accept activity
accept := streams.NewActivityStreamsAccept()
tp := streams.NewJSONLDTypeProperty()
tp.AppendXMLSchemaString("Accept")
accept.SetJSONLDType(tp)
actor := streams.NewActivityStreamsActorProperty()
actor.AppendIRI(objectIRI)
accept.SetActivityStreamsActor(actor)
object := streams.NewActivityStreamsObjectProperty()
object.AppendActivityStreamsFollow(activity)
accept.SetActivityStreamsObject(object)
user, _ := user_model.GetUserByName(ctx, objectIRISplit[len(objectIRISplit)-1])
AddToOutbox(accept, user, actorIRI)
return nil
}