amark / gun

An open source cybersecurity protocol for syncing decentralized graph data.
https://gun.eco/docs
Other
18.08k stars 1.16k forks source link

Silent Failure on Incorrect Certificate and Delayed put #1338

Open gustavcorpas opened 11 months ago

gustavcorpas commented 11 months ago

Description

I've encountered an issue where subsequent calls to put break if a wrong certificate is passed in. The issue is observed when there's a delay between calls, causing both node.put and user.put to silently fail.

Steps to Reproduce

  1. Setup an authenticated user with gun.user().
  2. Generate a new key pair with SEA.pair().
  3. Get a node from the pub-key of the pair.
  4. Pass in a wrong certificate to node.put.
  5. Wait for one second.
  6. Call user.put.

Expected result

Actual result

Noteworthy

Example code:

           (async () => {

                // ... user is an authenticated gun.user().

                const pair1 = await SEA.pair();
                const node = gun.get(`~${pair1.pub}`);

                node.get("public").map().once(res => console.log(res));
                user.get("public").map().once(res => console.log(res));

                const options = { opt: { cert: "this-is-not-a-valid-certificate" }};

                node.get("public").get("item").put("node says hello", (ack) => {
                    console.log(ack);
                }, options);

                console.log(options); // this is mutated btw.

                await delay(); // wait for one second.

                user.get("public").get("item").put("user says hello", (ack) => {
                    console.log(ack)
                });   

            })();
amark commented 11 months ago

Thanks for finding this and making an excellent issue + code to add to tests. IDK my timing to get to it, but if you want to help I can do a video call to get you started on debugging (DM me).