45 lines
1.4 KiB
Go
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
|
|
}
|