diff options
author | FChannel <> | 2022-05-02 12:44:41 -0700 |
---|---|---|
committer | FChannel <> | 2022-06-19 12:53:29 -0700 |
commit | 1ee6552559141dd5dba91abec7c81d68c56abda0 (patch) | |
tree | 4ac21571a27980e8ebf83a065c270b36cc3ecfd6 /routes/actor.go | |
parent | 733f911fadc872933481bcbe087d519ce00372df (diff) |
removed all unneeded .go files from root directory
Diffstat (limited to 'routes/actor.go')
-rw-r--r-- | routes/actor.go | 177 |
1 files changed, 174 insertions, 3 deletions
diff --git a/routes/actor.go b/routes/actor.go index 7b57309..d8b6631 100644 --- a/routes/actor.go +++ b/routes/actor.go @@ -18,10 +18,176 @@ import ( "github.com/gofiber/fiber/v2" ) -func ActorInbox(c *fiber.Ctx) error { - // STUB +func ActorInbox(ctx *fiber.Ctx) error { + activity, err := activitypub.GetActivityFromJson(ctx) + if err != nil { + return err + } + + if activity.Actor.PublicKey.Id == "" { + nActor, err := webfinger.FingerActor(activity.Actor.Id) + if err != nil { + return err + } + + activity.Actor = &nActor + } + + if !db.VerifyHeaderSignature(ctx, *activity.Actor) { + response := activitypub.RejectActivity(activity) + + return db.MakeActivityRequest(response) + } + + switch activity.Type { + case "Create": + + for _, e := range activity.To { + if res, err := activitypub.IsActorLocal(e); err == nil && res { + if res, err := activitypub.IsActorLocal(activity.Actor.Id); err == nil && res { + col, err := activitypub.GetCollectionFromID(activity.Object.Id) + if err != nil { + return err + } + + if len(col.OrderedItems) < 1 { + break + } + + if _, err := activitypub.WriteObjectToCache(*activity.Object); err != nil { + return err + } + + actor, err := activitypub.GetActorFromDB(e) + if err != nil { + return err + } + + if err := db.ArchivePosts(actor); err != nil { + return err + } + + //SendToFollowers(e, activity) + } else if err != nil { + return err + } + } else if err != nil { + return err + } + } + + break + + case "Delete": + for _, e := range activity.To { + actor, err := activitypub.GetActorFromDB(e) + if err != nil { + return err + } + + if actor.Id != "" && actor.Id != config.Domain { + if activity.Object.Replies != nil { + for _, k := range activity.Object.Replies.OrderedItems { + if err := activitypub.TombstoneObject(k.Id); err != nil { + return err + } + } + } + + if err := activitypub.TombstoneObject(activity.Object.Id); err != nil { + return err + } + if err := db.UnArchiveLast(actor.Id); err != nil { + return err + } + break + } + } + break + + case "Follow": + for _, e := range activity.To { + if res, err := activitypub.GetActorFromDB(e); err == nil && res.Id != "" { + response := db.AcceptFollow(activity) + response, err := activitypub.SetActorFollowerDB(response) + if err != nil { + return err + } + + if err := db.MakeActivityRequest(response); err != nil { + return err + } + + alreadyFollow := false + alreadyFollowing := false + autoSub, err := activitypub.GetActorAutoSubscribeDB(response.Actor.Id) + if err != nil { + return err + } + + following, err := activitypub.GetActorFollowingDB(response.Actor.Id) + if err != nil { + return err + } + + for _, e := range following { + if e.Id == response.Object.Id { + alreadyFollow = true + } + } + + actor, err := webfinger.FingerActor(response.Object.Actor) + if err != nil { + return err + } + + remoteActorFollowingCol, err := webfinger.GetCollectionFromReq(actor.Following) + if err != nil { + return err + } + + for _, e := range remoteActorFollowingCol.Items { + if e.Id == response.Actor.Id { + alreadyFollowing = true + } + } + + if autoSub && !alreadyFollow && alreadyFollowing { + followActivity, err := db.MakeFollowActivity(response.Actor.Id, response.Object.Actor) + if err != nil { + return err + } + + if res, err := webfinger.FingerActor(response.Object.Actor); err == nil && res.Id != "" { + if err := db.MakeActivityRequestOutbox(followActivity); err != nil { + return err + } + } else if err != nil { + return err + } + } + } else if err != nil { + return err + } else { + fmt.Println("follow request for rejected") + response := activitypub.RejectActivity(activity) - return c.SendString("actor inbox") + return db.MakeActivityRequest(response) + } + } + break + + case "Reject": + if activity.Object.Object.Type == "Follow" { + fmt.Println("follow rejected") + if _, err := db.SetActorFollowingDB(activity); err != nil { + return err + } + } + break + } + + return nil } func ActorOutbox(ctx *fiber.Ctx) error { @@ -31,6 +197,11 @@ func ActorOutbox(ctx *fiber.Ctx) error { return err } + if activitypub.AcceptActivity(ctx.Get("Accept")) { + activitypub.GetActorOutbox(ctx, actor) + return nil + } + contentType := util.GetContentType(ctx.Get("content-type")) if contentType == "multipart/form-data" || contentType == "application/x-www-form-urlencoded" { |