go-fed / activity

ActivityStreams & ActivityPub in golang, oh my!
BSD 3-Clause "New" or "Revised" License
702 stars 111 forks source link

peer gave an Accept wrapping a Follow but was not an object in the original Follow #129

Closed sentriz closed 4 years ago

sentriz commented 4 years ago

Please Describe The Problematic Behavior we are using go-fed/activity@master error as above when receiving an accept of a follow activity. we have a user alice on node a.funk.dev, a user bob on b.funk.dev. alice would like to follow bob. alice sends follow (s2s only, federatingActor.Send()). the issue seems to be when accept with follow inside as object is sent back to alice. (please see logs later)

(logs) node `a.funk.dev`, where follow it sent by `Send()` ``` INFO[0000]/funk.pub/backend/cmd/funk/main.go:50 main.main() config: {PublicHost:a.funk.dev PublicPort:443 ListenAddr::3801 DBDB:backend_a DBHost:localhost DBPort:5432 DBUsername:admin DBPassword:admin} INFO[0000]/funk.pub/backend/cmd/funk/main.go:56 main.main() about to listen INFO[0029]/funk.pub/backend/internal/handler/handler.go:101 github.com/funk.pub/backend/internal/handler.(*Controller).ServeGraph() adding user "alice" to context INFO[0029]/funk.pub/backend/internal/fed/database.go:485 github.com/funk.pub/backend/internal/fed.(*Database).NewId() INFO[0029]/funk.pub/backend/internal/fed/database.go:495 github.com/funk.pub/backend/internal/fed.(*Database).NewId() generated id "https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce" INFO[0029]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() 2019/11/17 16:48:28 [debugJSON] type is "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"actor\":\"https://a.funk.dev/user/alice\",\"id\":\"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce\",\"object\":\"https://b.funk.dev/user/bob\",\"to\":\"https://b.funk.dev/user/bob\",\"type\":\"Follow\"}" INFO[0029]/funk.pub/backend/internal/fed/database.go:329 github.com/funk.pub/backend/internal/fed.(*Database).Create() type "Follow" INFO[0029]/funk.pub/backend/internal/fed/database.go:352 github.com/funk.pub/backend/internal/fed.(*Database).Create() *** inserted {0 https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC {"@context":"https://www.w3.org/ns/activitystreams","actor":"https://a.funk.dev/user/alice","id":"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce","object":"https://b.funk.dev/user/bob","to":"https://b.funk.dev/user/bob","type":"Follow"}} INFO[0029]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0029]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0029]/funk.pub/backend/internal/fed/database.go:381 github.com/funk.pub/backend/internal/fed.(*Database).GetOutbox() INFO[0029]/funk.pub/backend/internal/fed/database.go:409 github.com/funk.pub/backend/internal/fed.(*Database).SetOutbox() INFO[0029]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0029]/funk.pub/backend/internal/fed/common_behavior.go:54 github.com/funk.pub/backend/internal/fed.(*CommonBehavior).NewTransport() INFO[0029]/funk.pub/backend/internal/fed/protocol.go:102 github.com/funk.pub/backend/internal/fed.(*Protocol).MaxDeliveryRecursionDepth() INFO[0029]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0029]/funk.pub/backend/internal/fed/common_behavior.go:17 github.com/funk.pub/backend/internal/fed.(*mockSigner).SignRequest() INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:250 github.com/funk.pub/backend/internal/fed.(*Database).ActorForOutbox() INFO[0030]/funk.pub/backend/internal/fed/database.go:253 github.com/funk.pub/backend/internal/fed.(*Database).ActorForOutbox() using actor iri "https://a.funk.dev/user/alice" INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0030]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://a.funk.dev/user/alice INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/fed/common_behavior.go:54 github.com/funk.pub/backend/internal/fed.(*CommonBehavior).NewTransport() INFO[0030]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0030]/funk.pub/backend/internal/fed/common_behavior.go:17 github.com/funk.pub/backend/internal/fed.(*mockSigner).SignRequest() INFO[0030]/funk.pub/backend/internal/handler/handler.go:77 github.com/funk.pub/backend/internal/handler.(*Controller).ServeStreamType() INFO[0030]/funk.pub/backend/internal/handler/handler.go:78 github.com/funk.pub/backend/internal/handler.(*Controller).ServeStreamType() request for /user/alice INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0030]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://a.funk.dev/user/alice INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0030]/funk.pub/backend/internal/handler/handler.go:60 github.com/funk.pub/backend/internal/handler.(*Controller).PostInbox() INFO[0030]/funk.pub/backend/internal/handler/handler.go:62 github.com/funk.pub/backend/internal/handler.(*Controller).PostInbox() ##### request: "POST /user/alice/inbox HTTP/1.1\r\nHost: a.funk.dev\r\nAccept-Charset: utf-8\r\nAccept-Encoding: gzip\r\nContent-Length: 416\r\nContent-Type: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"\r\nDate: Sun, 17 Nov 2019 16:48:28 GMT\r\nUser-Agent: (go-fed/activity v1.0.0) (go-fed/activity v1.0.0)\r\nX-Forwarded-For: 127.0.0.1\r\n\r\n{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"actor\":\"https://b.funk.dev/user/bob\",\"id\":\"https://b.funk.dev/id/b9217e18-bc0d-4745-4d8a-713b7377c7ff\",\"object\":{\"actor\":\"https://a.funk.dev/user/alice\",\"id\":\"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce\",\"object\":\"https://b.funk.dev/user/bob\",\"to\":\"https://b.funk.dev/user/bob\",\"type\":\"Follow\"},\"to\":\"https://a.funk.dev/user/alice\",\"type\":\"Accept\"}" INFO[0030]/funk.pub/backend/internal/fed/protocol.go:24 github.com/funk.pub/backend/internal/fed.(*Protocol).AuthenticatePostInbox() INFO[0030]/funk.pub/backend/internal/fed/protocol.go:19 github.com/funk.pub/backend/internal/fed.(*Protocol).PostInboxRequestBodyHook() INFO[0030]/funk.pub/backend/internal/fed/protocol.go:29 github.com/funk.pub/backend/internal/fed.(*Protocol).Blocked() INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:108 github.com/funk.pub/backend/internal/fed.(*Database).InboxContains() INFO[0030]/funk.pub/backend/internal/fed/database.go:125 github.com/funk.pub/backend/internal/fed.(*Database).InboxContains() does not contain https://b.funk.dev/id/b9217e18-bc0d-4745-4d8a-713b7377c7ff INFO[0030]/funk.pub/backend/internal/fed/database.go:131 github.com/funk.pub/backend/internal/fed.(*Database).GetInbox() INFO[0030]/funk.pub/backend/internal/fed/database.go:159 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() INFO[0030]/funk.pub/backend/internal/fed/database.go:199 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() OI LEN 1 INFO[0030]/funk.pub/backend/internal/fed/database.go:219 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() INSERT https://a.funk.dev/user/alice/inbox / https://b.funk.dev/id/b9217e18-bc0d-4745-4d8a-713b7377c7ff INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/fed/protocol.go:34 github.com/funk.pub/backend/internal/fed.(*Protocol).Callbacks() INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:263 github.com/funk.pub/backend/internal/fed.(*Database).ActorForInbox() INFO[0030]/funk.pub/backend/internal/fed/database.go:266 github.com/funk.pub/backend/internal/fed.(*Database).ActorForInbox() using actor iri "https://a.funk.dev/user/alice" INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0030]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0030]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce INFO[0030]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0030]/funk.pub/backend/internal/handler/handler.go:65 github.com/funk.pub/backend/internal/handler.(*Controller).PostInbox() error: peer gave an Accept wrapping a Follow but was not an object in the original Follow ```
(logs) node `b.funk.dev`, should be sending back the accept ``` INFO[0000]/funk.pub/backend/cmd/funk/main.go:50 main.main() config: {PublicHost:b.funk.dev PublicPort:443 ListenAddr::3802 DBDB:backend_b DBHost:localhost DBPort:5432 DBUsername:admin DBPassword:admin} INFO[0000]/funk.pub/backend/cmd/funk/main.go:56 main.main() about to listen INFO[0027]/funk.pub/backend/internal/handler/handler.go:77 github.com/funk.pub/backend/internal/handler.(*Controller).ServeStreamType() INFO[0027]/funk.pub/backend/internal/handler/handler.go:78 github.com/funk.pub/backend/internal/handler.(*Controller).ServeStreamType() request for /user/bob INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0027]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://b.funk.dev/user/bob INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0027]/funk.pub/backend/internal/handler/handler.go:60 github.com/funk.pub/backend/internal/handler.(*Controller).PostInbox() INFO[0027]/funk.pub/backend/internal/handler/handler.go:62 github.com/funk.pub/backend/internal/handler.(*Controller).PostInbox() ##### request: "POST /user/bob/inbox HTTP/1.1\r\nHost: b.funk.dev\r\nAccept-Charset: utf-8\r\nAccept-Encoding: gzip\r\nContent-Length: 248\r\nContent-Type: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"\r\nDate: Sun, 17 Nov 2019 16:48:28 GMT\r\nUser-Agent: (go-fed/activity v1.0.0) (go-fed/activity v1.0.0)\r\nX-Forwarded-For: 127.0.0.1\r\n\r\n{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"actor\":\"https://a.funk.dev/user/alice\",\"id\":\"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce\",\"object\":\"https://b.funk.dev/user/bob\",\"to\":\"https://b.funk.dev/user/bob\",\"type\":\"Follow\"}" INFO[0027]/funk.pub/backend/internal/fed/protocol.go:24 github.com/funk.pub/backend/internal/fed.(*Protocol).AuthenticatePostInbox() INFO[0027]/funk.pub/backend/internal/fed/protocol.go:19 github.com/funk.pub/backend/internal/fed.(*Protocol).PostInboxRequestBodyHook() INFO[0027]/funk.pub/backend/internal/fed/protocol.go:29 github.com/funk.pub/backend/internal/fed.(*Protocol).Blocked() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:108 github.com/funk.pub/backend/internal/fed.(*Database).InboxContains() INFO[0027]/funk.pub/backend/internal/fed/database.go:125 github.com/funk.pub/backend/internal/fed.(*Database).InboxContains() does not contain https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce INFO[0027]/funk.pub/backend/internal/fed/database.go:131 github.com/funk.pub/backend/internal/fed.(*Database).GetInbox() INFO[0027]/funk.pub/backend/internal/fed/database.go:159 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() INFO[0027]/funk.pub/backend/internal/fed/database.go:199 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() OI LEN 1 INFO[0027]/funk.pub/backend/internal/fed/database.go:219 github.com/funk.pub/backend/internal/fed.(*Database).SetInbox() INSERT https://b.funk.dev/user/bob/inbox / https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/protocol.go:34 github.com/funk.pub/backend/internal/fed.(*Protocol).Callbacks() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:263 github.com/funk.pub/backend/internal/fed.(*Database).ActorForInbox() INFO[0027]/funk.pub/backend/internal/fed/database.go:266 github.com/funk.pub/backend/internal/fed.(*Database).ActorForInbox() using actor iri "https://b.funk.dev/user/bob" INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:500 github.com/funk.pub/backend/internal/fed.(*Database).Followers() INFO[0027]/funk.pub/backend/internal/fed/database.go:357 github.com/funk.pub/backend/internal/fed.(*Database).Update() INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:276 github.com/funk.pub/backend/internal/fed.(*Database).OutboxForInbox() INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:485 github.com/funk.pub/backend/internal/fed.(*Database).NewId() INFO[0027]/funk.pub/backend/internal/fed/database.go:495 github.com/funk.pub/backend/internal/fed.(*Database).NewId() generated id "https://b.funk.dev/id/b9217e18-bc0d-4745-4d8a-713b7377c7ff" INFO[0027]/funk.pub/backend/internal/fed/common_behavior.go:54 github.com/funk.pub/backend/internal/fed.(*CommonBehavior).NewTransport() INFO[0027]/funk.pub/backend/internal/fed/protocol.go:102 github.com/funk.pub/backend/internal/fed.(*Protocol).MaxDeliveryRecursionDepth() INFO[0027]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0027]/funk.pub/backend/internal/fed/common_behavior.go:17 github.com/funk.pub/backend/internal/fed.(*mockSigner).SignRequest() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:250 github.com/funk.pub/backend/internal/fed.(*Database).ActorForOutbox() INFO[0027]/funk.pub/backend/internal/fed/database.go:253 github.com/funk.pub/backend/internal/fed.(*Database).ActorForOutbox() using actor iri "https://b.funk.dev/user/bob" INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0027]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://b.funk.dev/user/bob INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/common_behavior.go:54 github.com/funk.pub/backend/internal/fed.(*CommonBehavior).NewTransport() INFO[0027]/funk.pub/backend/internal/fed/clock.go:15 github.com/funk.pub/backend/internal/fed.Clock.Now() INFO[0027]/funk.pub/backend/internal/fed/common_behavior.go:17 github.com/funk.pub/backend/internal/fed.(*mockSigner).SignRequest() INFO[0027]/funk.pub/backend/internal/fed/protocol.go:49 github.com/funk.pub/backend/internal/fed.(*Protocol).Callbacks.func4() a new follow: "https://a.funk.dev/user/alice" -> "https://b.funk.dev/user/bob" INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:288 github.com/funk.pub/backend/internal/fed.(*Database).Exists() 2019/11/17 16:48:28 [debugJSON] type is "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"actor\":\"https://a.funk.dev/user/alice\",\"id\":\"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce\",\"object\":\"https://b.funk.dev/user/bob\",\"to\":\"https://b.funk.dev/user/bob\",\"type\":\"Follow\"}" INFO[0027]/funk.pub/backend/internal/fed/database.go:329 github.com/funk.pub/backend/internal/fed.(*Database).Create() type "Follow" INFO[0027]/funk.pub/backend/internal/fed/database.go:352 github.com/funk.pub/backend/internal/fed.(*Database).Create() *** inserted {0 https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC {"@context":"https://www.w3.org/ns/activitystreams","actor":"https://a.funk.dev/user/alice","id":"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce","object":"https://b.funk.dev/user/bob","to":"https://b.funk.dev/user/bob","type":"Follow"}} INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:237 github.com/funk.pub/backend/internal/fed.(*Database).Owns() INFO[0027]/funk.pub/backend/internal/fed/database.go:240 github.com/funk.pub/backend/internal/fed.(*Database).Owns() we own https://b.funk.dev/user/bob INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() INFO[0027]/funk.pub/backend/internal/fed/database.go:98 github.com/funk.pub/backend/internal/fed.(*Database).Lock() INFO[0027]/funk.pub/backend/internal/fed/database.go:304 github.com/funk.pub/backend/internal/fed.(*Database).Get() INFO[0027]/funk.pub/backend/internal/fed/database.go:305 github.com/funk.pub/backend/internal/fed.(*Database).Get() getting https://b.funk.dev/user/bob INFO[0027]/funk.pub/backend/internal/fed/database.go:103 github.com/funk.pub/backend/internal/fed.(*Database).Unlock() ```

sorry, the logs are a bit of a mess. but you can see on node a, the inbox recieves the accept request

POST /user/alice/inbox HTTP/1.1\r\n
Host: a.funk.dev\r\n
Accept-Charset: utf-8\r\n
Accept-Encoding: gzip\r\n
Content-Length: 416\r\n
Content-Type: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"\r\n
Date: Sun, 17 Nov 2019 16:48:28 GMT\r\n
User-Agent: (go-fed/activity v1.0.0) (go-fed/activity v1.0.0)\r\n
X-Forwarded-For: 127.0.0.1\r\n\r\n
{
    \"@context\":\"https://www.w3.org/ns/activitystreams\",
    \"actor\":\"https://b.funk.dev/user/bob\",
    \"id\":\"https://b.funk.dev/id/b9217e18-bc0d-4745-4d8a-713b7377c7ff\",
    \"object\":{
        \"actor\":\"https://a.funk.dev/user/alice\",
        \"id\":\"https://a.funk.dev/id/85c5bb48-2318-4976-6292-0b06f27f26ce\",
        \"object\":\"https://b.funk.dev/user/bob\",
        \"to\":\"https://b.funk.dev/user/bob\",
        \"type\":\"Follow\"
    },
    \"to\":\"https://a.funk.dev/user/alice\",
    \"type\":\"Accept\"
}"

followed by the message peer gave an Accept wrapping a Follow but was not an object in the original Follow. so we're wondering if the accept json malformed or something else?


if any more info is requied please let me know

p.s. in this block

                // Build map of original Accept actors
                acceptActors := make(map[string]bool)
                for iter := actors.Begin(); iter != actors.End(); iter = iter.Next() {
                    id, err := ToId(iter)
                    if err != nil {
                        return err
                    }
                    acceptActors[id.String()] = false
                }

making actors variable for the acceptActors loop not shadow the one above in the file defined as actors := a.GetActivityStreamsActor(), above the closure

index 36afe15..e8980eb 100644
--- a/pub/federating_wrapped_callbacks.go
+++ b/pub/federating_wrapped_callbacks.go
@@ -580,9 +583,10 @@ func (w FederatingWrappedCallbacks) accept(c context.Context, a vocab.ActivitySt
                }
                // Ensure that we are one of the actors on the Follow.
                ok = false
-               actors := follow.GetActivityStreamsActor()
-               for iter := actors.Begin(); iter != actors.End(); iter = iter.Next() {
+               actorsInner := follow.GetActivityStreamsActor()
+               for iter := actorsInner.Begin(); iter != actorsInner.End(); iter = iter.Next() {
                    id, err := ToId(iter)
                    if err != nil {
                        return err
                    }

this seems to fix things, at least that alice's following activity has bob, and bob's followers activity has alice.

but really not sure if this is the right thing to do.

thank you very much!

cjslep commented 4 years ago

Ack, will look into this over the next week (been unavailable the past week).

Thank you for the detailed report!

cjslep commented 4 years ago

Still on my radar to take a look at. :)

cjslep commented 4 years ago

Hi @sentriz !

First off: you were TOTALLY right! I am so sorry you had to go through the painful debugging process, and that it took me more than half a year to come around to look back at this. You did the heavy lifting and are right: it was a shadowing bug.

I was cleaning up the tests and decided to jump ahead to do the Accept tests for the federating case, and was able to prove with unit tests that the shadowing was indeed the problem.

The latest commit c994dc39f033db6f73a7fa57c23af3d623db88ca introduces both the bugfix and the suite of tests for the Accept handling!

Thanks so much for providing all the documentation that you did, and for correctly identifying the root cause!