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

45 lines
1.4 KiB
Go
Raw Normal View History

2022-04-14 02:49:27 +00:00
// 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 (
2022-04-14 16:53:00 +00:00
"context"
"strings"
user_model "code.gitea.io/gitea/models/user"
2022-04-14 03:09:01 +00:00
"github.com/go-fed/activity/streams"
2022-04-14 02:49:27 +00:00
"github.com/go-fed/activity/streams/vocab"
)
2022-04-14 16:53:00 +00:00
func Follow(ctx context.Context, activity vocab.ActivityStreamsFollow) error {
actorIRI := activity.GetActivityStreamsActor().Begin().GetIRI()
2022-04-14 03:09:01 +00:00
objectIRI := activity.GetActivityStreamsObject().Begin().GetIRI()
2022-04-14 16:53:00 +00:00
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])
2022-04-14 03:09:01 +00:00
// 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)
2022-05-21 18:15:59 +00:00
user, _ := user_model.GetUserByName(ctx, objectIRISplit[len(objectIRISplit)-1])
AddToOutbox(accept, user, actorIRI)
2022-04-14 16:53:00 +00:00
return nil
2022-04-14 02:49:27 +00:00
}