verbb / comments

A Craft CMS plugin for managing comments directly within the CMS.
Other
137 stars 33 forks source link

Getting 500 error on comment form submission #228

Closed rowansentesy closed 2 years ago

rowansentesy commented 3 years ago

Description I was working on setting up Blitz on a site and was in the midst of pushing my changes to the live site, when I noticed the comment forms were not submitting. I turned off Blitz and tested the forms, and still the forms are showing an error.

I have tested an update to this plugin from 1.6.6 to the latest 1.7.5, but the error persists.

Can you please let me know if this is a known issue?

We cannot find any record of the error in the apache or transfer logs.

This was working yesterday prior to doing this work with Blitz. Blitz has been uninstalled on the production site and this issue persists.

We observed that there are 2 CSRF tokens in the request header.

Let me know if you have any suggestions.

Thanks, Rowan Sentesy Hop Studios

Steps to reproduce

  1. Submit comment form (logged in or logged out, same issue)
  2. Look at response headers

Additional info

Additional context

{error: "A server error occurred."}

Response Headers:

Request URL: https://www.roslynlandmarks.org/index.php?p=actions/comments/comments/save
Request Method: POST
Status Code: 500 
Remote Address: [2606:4700:3035::ac43:b3cd]:443
Referrer Policy: strict-origin-when-cross-origin

Request headers to request URL: https://www.roslynlandmarks.org/index.php?p=actions/comments/comments/save

------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="action"

comments/comments/save
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="elementId"

15997
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="siteId"

1
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="newParentId"

------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="commentId"

------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="CRAFT_CSRF_TOKEN"

8xR28IhL_Cv9kr_O1aiG0qpO-gvL1rcMXqFmTLFWIVVuFTQXE-cKlJolAbW8PrRhjuDxkeKQ84HLY7E5uazGTi37VjrhH1ASHXtEInzQQcQ=
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="__UAHOME"

868966f32841f27ee5d0272781912e40
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="__UAHASH"

9de267b0edef1455b8d8b52ac9ec0f5a
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="beesknees"

------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="__JSCHK"

60b97928a60ba
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="fields[name]"

rowan testing
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="fields[email]"

rowan@hopstudios.com
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="fields[comment]"

test the form
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="CRAFT_CSRF_TOKEN"

8xR28IhL_Cv9kr_O1aiG0qpO-gvL1rcMXqFmTLFWIVVuFTQXE-cKlJolAbW8PrRhjuDxkeKQ84HLY7E5uazGTi37VjrhH1ASHXtEInzQQcQ=
------WebKitFormBoundaryQW1173BvV1YSJ9wS
Content-Disposition: form-data; name="g-recaptcha-response"

03AGdBq24II6OSp8wS6kymjbRTJSE8f8id35Q4ZcovOIY7TSm4hjNdzR0TkkKzv8N_Un0BrwFYpu3qtREQSk10Odl2dtYJ3iIK2qw9nGxzZese91nOngp8It9wRFXG0BfgJVMsoP4JlTGH73PYNyYYkOjDbkFYrKhiIhaxz1j8SIFsisPDPBXbbL1-TmwicqS8rfOnP3In3c01EhTW1VgIwV8ObszBWtDcO448Jp_Dh_sjmyWZyKy4jiiMP0x40Goi6M1xCtbsv899ASVbDhoA0WbWrD9Lkk2HuMZSri-Pe8hkKL-2xO90Vqu6ZOyO5NWsm0rgHL0oBgSaYIRll6igBTrzSBUxN9gLpKYRNGBy3CvFTqIuJH3p7cb88neaPfJyJCobmR5CEMM-TW4BTpPVzH3hSor7Edvf25nAtVNXi6yIssGbSv4OFOMtMAyBmHD97kYucL_T7huT9T0VGouYZpkK7oSiP8UOhUeaFE5y41cEgHvcKBQJxooM8t5ZB8embw8ypbGBoCEPQePXTlvjKrRGWj9q0L4Yuw
------WebKitFormBoundaryQW1173BvV1YSJ9wS--
engram-design commented 3 years ago

Hmmm, not a known issue as far as I know. Is the response from the server just {error: "A server error occurred."}?

Thanks for ruling out Blitz, most commonly the issue is needing to refresh the CSRF token for the form.

<script src="https://cdn.polyfill.io/v2/polyfill.js?features=fetch,Promise"></script>

<script>
    // Wait until the DOM is ready
    document.addEventListener('DOMContentLoaded', (event) => {
        // Fetch the form we want to deal with
        let $form = document.querySelector('#comments-form');

        // Find the CSRF token hidden input, so we can replace it
        let $csrfInput = $form.querySelector('input[name="CRAFT_CSRF_TOKEN"]');

        // Fetch the new token for the form and replace the CSRF input with our new one
        fetch('/actions/blitz/csrf/input')
            .then(result => { return result.text(); })
            .then(result => { $csrfInput.outerHTML = result; });
    });
</script>

Is this happening locally, or just on your production environment? I've seen cases where this (unhelpful) error has come back on server environments due to other issues.

rowansentesy commented 3 years ago

Thanks for the JS code above, that looks similar to the freeform work-around I had implemented alongside Blitz. The Blitz plugin has been uninstalled and CSRF JS code commented out on production and still the issue persists.

The error is occurring across all environments including local at the moment.

Thanks for the tip that this is a non comment issue, I will do a little more research. If you have any further guidance I would be most appreciative.

thanks Rowan

engram-design commented 3 years ago

Not saying its not a comments plugin issue by the way, just that I've often seen the A server error occurred. happen from something else. What seems strange is that there's no error, even on local, with devMode enabled.

And yep, just wanted to add that JS snippet when you do add Blitz back in.

Are you able to share the settings for the Comments plugin, just so I can see if I can replicate on my end? It seems like it might be something to do with your setup that I can't replicate. If you'd be willing to sent through your database (totally understand if you can't), shoot us an email at web at verbb.io.

iamtompickering commented 3 years ago

Just installed Comments and run into this same issue.

I haven't adjusted any of the settings since installed, all I've done is include {{ craft.comments.render(entry.id) }} in my template. The form outputs, but when I click Submit, I get a console error:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

/index.php?p=actions/comments/comments/save:1 

I am also running Blitz on the site, but this is disabled locally, and I am hitting the error locally.

Have you managed to find anything else out on this issue yet? Any help would be appreciated!

Craft CMS: 3.6.15 Comments: 1.8.7

engram-design commented 3 years ago

Can you click on the "preview" in the network request for this in developer tools (Chrome)? I'm wanting to know the response back from the server, with devMode enabled.

iamtompickering commented 3 years ago

This is the error showing in the Network Preview

"Argument 1 passed to craft\\services\\Structures::appendToRoot() must be of the type int, null given, called in /xxxxxx/craft-3/vendor/verbb/comments/src/elements/Comment.php on line 1065"
engram-design commented 3 years ago

That might be an unrelated issue where the structure that Comments uses is missing. This is created when you first install the plugin, but I've seen it go awry on upgrades from Craft 2, or older Craft 3 versions.

Go to Comments > Settings and down the bottom of the page is a "Structure Info" section. Can you check the results of that?

It's worth running the following console command to fix the structure for Comments.

./craft comments/base/resave-structure

rowansentesy commented 3 years ago

Hey all, I spent a bunch of hours sleuthing this. There were some issues with my multi-environment setup and various environments being out of sync. What I ended up finding useful was the instructions outlined here: https://craftcms.com/docs/3.x/project-config.html#propagating-changes

I found this to be a revelation, something that I never really understood fully until after this little glitch.

Instructions to rebuild/reset your vendor/config

  1. remove vendor folder & composer.lock
  2. run: composer install
  3. run: php craft project-config/apply

This basically nukes the vendor folder and rebuilds the lock file and all the components in the composer.json file. This solved my problem.

The versions that I have working and stable on our production environment are: Blitz: 3.6.12 Comments: 1.7.5 Craft: 3.5.5

I think I reverted to the 1.7.5 and found that it worked OK. I haven't tried to update to the latest version yet. Getting this working again was a huge learning experience.

I hope that helps. Rowan

engram-design commented 3 years ago

Thanks for sharing @rowansentesy project config in general can be a massive pain when it doesn't work right. We've seen countless issues where environments have gotten out of sync, or just odd things going on. This rarely is an issue with individual plugins, but usually Craft itself.

I note you're on Craft 3.5.x - and I'll comment that there are a number of project config improvements in Craft 3.6.x (after an upgrade and rebuild), which we've found has helped quite a lot.

rowansentesy commented 3 years ago

Hey again, I have been meaning to follow-up with this. I was mistaken with my last post to re-sync composer etc. as this did not solve the issue after all. We also have another site that my colleague is working on that has a similar issue with Comments and Blitz. The CSRF token is not being freshly generated for each form. The tag: {{ craft.blitz.csrfInput() }} Does not appear to grab a unique token. It will work on first load after cache purge, but when loading the same page via incognito, the token is identical. The token appears to be cached.

I reckon this is an issue with Blitz and not Comments, but I thought I would update the thread as my post 11 days ago is not the solution.

Thanks, Rowan

engram-design commented 3 years ago

Appreciate the follow-up - I'm aware there are some tweaks on my end to fix up to make it work properly with static caching. Will have them done soon!

engram-design commented 3 years ago

@rowansentesy Can you confirm if using the JS posted in https://github.com/verbb/comments/issues/228#issuecomment-854629247 helps? My testing shows that this is enough to refresh the CSRF token without any other changes (no craft.blitz.csrfInput(), no custom comments templates).

engram-design commented 3 years ago

Should be fixed for the next release. Just note all you'll need is the JS via https://github.com/verbb/comments/issues/228#issuecomment-854629247.

To get the fix early, change your verbb/comments requirement in composer.json to:

"require": {
  "verbb/comments": "dev-craft-3 as 1.8.7",
  "...": "..."
}

Then run composer update.

rowansentesy commented 3 years ago

Hey engram-design, I updated Craft to 3.5.8, and verbb/comments as described above. I implemented the JS code in #228 (comment) and its all working smoothly now! (finally!) thanks for the snappy support with this and for helping to patch your plugin to get this working.

Cheers, Rowan

rowansentesy commented 3 years ago

Hey again,

With the CSRF working OK above, I'm running into an issue with the Spam Protection. The reCaptcha is being cached and then failing the spam checks. Are there instructions to keep reCaptcha and not cache this part of the comment form?

I couldn't find a work-around for this in your documentation, but tried the following:

Add blitz get Uri - dynamic tag

change: {{ craft.comments.protect() }} to {{ craft.blitz.getUri('/dynamic/comment_protect') }}

/dynamic/comment_protect has code: {{ craft.comments.protect() }}

JS:

document.addEventListener('afterBlitzInject', function (event) { 
    let uri = event.detail.uri;
    if (uri == '/dynamic/comment_protect'){
        let el = event.detail.element;
        console.log(el.id);
        console.log(typeof(el));

        let script = $("#" + el.id).find("script").html();
        console.log(script);
        eval(script);
        // console.log(el.find("script").html());
        // console.log("match");
        // console.log(el);
    }
});

This works as far as evaluating the script from the dynamic script I setup. The js injected via ajax works i.e.

document.getElementById("__JSCHK_60e34ba7795e1").value = "60e34ba7795e1";

However, comment submission just fails with no warning.

Freeform has the following instructions which worked well to integrate Blitz with their forms. https://docs.solspace.com/craft/freeform/v3/templating/caching.html#refresh-form-hash-js-honeypot-csrf-token They basically handle the CSRF and the honeypot at the same time.

Any help or support would be appreciated.

Thanks! Rowan

engram-design commented 2 years ago

Hmmm, I don't believe reCAPTCHA being cached will be of any issue as it's all JS-based. From my testing, it doesn't seem to miss a beat. The other spam protections shouldn't be an issue either, as they don't really rely on the values on the form, so they don't need refreshing (unlike the honeypot data in Freeform for example). So long as they exist, they should pass.

I actually can't get it not to work. I'm using Blitz with Apache rewrites, so it's not hitting the server at all when rendering the page. Apart from the JS used to refresh the CSRF token, it's seemingly working well for me.

When happens on your end in this scenario (without the craft.blitz.getUri stuff)? You mention "the reCAPTCHA is being cached and then failing the spam checks" but that shouldn't happen, as it's initialised via JS, which doesn't get affected by static cache.

rowansentesy commented 2 years ago

Hey engram-design,

Thanks for the suggestion above. I ended up just turning off Blitz on all pages with comments as a work-around. We're having an issue presently which is related to this due to the 500 error, but Blitz is not part of the problem because it is disabled.

Here's what is happening: Top level commenting works without a hitch. Adding replies to some top level comments is working. Only some comments seem to generate this issue.

I have recorded a screen shot of the situation here and you can watch it here: https://www.dropbox.com/s/jeb5jthn0vz5etk/Screen%20Recording%202021-08-04%20at%2011.06.22%20AM.mov?dl=0

  1. Create top level comment - OK
  2. Add reply to top level comment from step 1 - OK
  3. Add reply to another pre-existing top level comment - 500 error!

I'm using Comments version 'dev-craft-3', composer.json looks like: "verbb/comments": "dev-craft-3 as 1.8.7", Craft version 3.5.8.

Any help with this issue would be greatly appreciated.

Rowan

engram-design commented 2 years ago

@rowansentesy Thanks for the video, that's helpful to see what's going on (although not something I can replicate). Would you be able to delete your storage/logs folder and try that exact process again? It should contain at least some clue on the issue in log files.

rowansentesy commented 2 years ago

Hey @engram-design Thanks for the reply. I checked out the comments.log file and tested a few different scenarios, and I cannot see any difference in the different comment reply attempts. They look the same in the log.

I've attached it here for reference. The first failed comment appears on line 58 for 'newParentId' => '24160' The items in the log before this are OK and all showed up instantly.

Let me know if you see anything I'm not seeing. I don't understand what is different with these comments to be honest. Maybe you can tell?

comments_not_working.log

What else might you need to help me debug this? Rowan

rowansentesy commented 2 years ago

@engram-design I have one more thought about this when looking at the 'reply' button links in the comment.twig template we are using.

There are two variables recentComments and allComments which are being checked.

The code looks like this:


                    {% if recentComments is not defined and allComments is not defined and comment.can('reply') %}
                        <span class="cc-ll-i">
                            <a href="#" class="cc-i-reply" data-action="reply" itemprop="replyToUrl">
                                {{ 'Reply' | t('comments') }}
                            </a>
                        </span>
                    {% endif %}```

Now, the reply button is showing up on all comments, but I wonder if this snippet is out of date perhaps? The commenting was setup by a previous developer, so is it possible this code is incorrect somehow? 

I'm looking at all the configuration options, but not seeing any relevant ones that might cause replies to fail on old comments, but not new ones.

Thanks
Rowan
engram-design commented 2 years ago

I might suggest you have a look in your error.log file, or a phperrors.log file. The error message you're getting (A server error occurred) is usually a low-level server issue more than anything. It might not be recorded in the comments.log file.

Doesn't seem anything too wrong with that, but your recentComments and allComments variables are specific to your custom template, not part of Comments.

Whenever you hit the reply button, JS kicks in to generate the form and submit. Looking at the payload data being sent when you make a comment, it all looks good to me...

One other thought is to maybe disable the spam checks, to see if that improves behaviour?

inconsiderate commented 2 years ago

I have an update, seeing this same problem. On save of replies to very old comments, I'm getting the 500. This doesn't happen on any newly posted comments. I'm able to post new comments, and reply to new comments without any problem.

At vendor/verbb/comments/src/elements/Comment.php:1070 at the bottom of afterSave() inside the last if statement I've dumped out $this->getParent() and compared it with a working Comment parent. I don't notice anything that looks suspicious to me, but it's the parent element causing issues. See the log printout below. Any ideas?!

2021-08-20 17:27:26 [-][14642][-][error][yii\base\Exception] yii\base\Exception: There was a problem getting the parent element. in /chroot/home/ad0eac9d/staging.roslynlandmarks.org/vendor/craftcms/cms/src/services/Structures.php:313

Stack trace:

0 /chroot/home/ad0eac9d/staging.roslynlandmarks.org/vendor/verbb/comments/src/elements/Comment.php(1070): craft\services\Structures->append(4, Object(verbb\comments\elements\Comment), Object(verbb\comments\elements\Comment))

1 /chroot/home/ad0eac9d/staging.roslynlandmarks.org/vendor/craftcms/cms/src/services/Elements.php(2666): verbb\comments\elements\Comment->afterSave(true)

2 /chroot/home/ad0eac9d/staging.roslynlandmarks.org/vendor/craftcms/cms/src/services/Elements.php(773): craft\services\Elements->_saveElementInternal(Object(verbb\comments\elements\Comment), true, false, true)

3 /chroot/home/ad0eac9d/staging.roslynlandmarks.org/vendor/verbb/comments/src/controllers/CommentsController.php(140): craft\services\Elements->saveElement(Object(verbb\comments\elements\Comment), true, true)

4 [internal function]: verbb\comments\controllers\CommentsController->actionSave()

engram-design commented 2 years ago

@inconsiderate Can't say I've seen that error before. It's almost like the comment element has lost its reference to the structure. This can happen, but it usually fixed via https://github.com/verbb/comments/issues/228#issuecomment-863628691 it's very possible this element is missing from the structureelements table, which I don't have an immediate fix for...

rowansentesy commented 2 years ago

Hey @engram-design thanks for the reminder about https://github.com/verbb/comments/issues/228#issuecomment-863628691 Here is what is shown in the Structure Info section:

Screen Shot 2021-08-30 at 12 55 14 PM

I tried running php craft comments/base/resave-structure as suggested, but the values didn't change and there is no change in the behavior.

Is there any advanced support we can get for this? Can we set up a zoom call to debug?

thanks, Rowan

engram-design commented 2 years ago

Yep, if those values are set then the structure should be all okay. As for advanced support, it's often tricky to align our timezones, so we don't often have the chance to provide it.

Wondering if you'd be up for sharing your database? Feel free to reach out via web at verbb.io

rowansentesy commented 2 years ago

Hey @engram-design I sent you an email using the form on your site verbb.io last week did you get it? A link to the DB was provided in the email.

Thanks Rowan

engram-design commented 2 years ago

I did @rowansentesy and sorry for the delay, have just been flat-out. Planning to look at it today.

engram-design commented 2 years ago

This should be fixed in 1.8.8 with the addition of a new command for fixing comment elements that've lost their reference to the structure.

You can use ./craft comments/base/set-structure UID to achieve this.

Where the UID there is the UID n your Comments > Settings > Structure Info. There are a number of comments that are referring to the old structure. Running that utility will update the “structureelements” database table, for every Comment that isn’t set to the correct structure, to the correct one.

This was uncovered by adding the comment with devMode enabled, and inspecting the network request. If you're on production, you'll often get an unhelpful and generic A server error occurred. which is down to Craft.

This thread has covered a few different causes for the same issue now, so please open a new issue after checking the above items.

leeaston commented 2 years ago

Please unscribe. My husband passed away and there is no way I'm going to look for a password to your newsletter!

Regards

On Fri, 4 Jun 2021, 03:55 Rowan Sentesy, @.***> wrote:

Description I was working on setting up Blitz on a site and was in the midst of pushing my changes to the live site, when I noticed the comment forms were not submitting. I turned off Blitz and tested the forms, and still the forms are showing an error.

I have tested an update to this plugin from 1.6.6 to the latest 1.7.5, but the error persists.

Can you please let me know if this is a known issue?

We cannot find any record of the error in the apache or transfer logs.

This was working yesterday prior to doing this work with Blitz. Blitz has been uninstalled on the production site and this issue persists.

We observed that there are 2 CSRF tokens in the request header.

Let me know if you have any suggestions.

Thanks, Rowan Sentesy Hop Studios

Steps to reproduce

  1. Submit comment form (logged in or logged out, same issue)
  2. Look at response headers

Additional info

  • Plugin version: 1.6.6 & 1.7.5
  • Craft version: 3.5.5
  • Multi-site: No

Additional context

Response headers to request URL: https://www.roslynlandmarks.org/index.php?p=actions/comments/comments/save

------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="action"

comments/comments/save ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="elementId"

15997 ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="siteId"

1 ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="newParentId"

------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="commentId"

------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="CRAFT_CSRF_TOKEN"

8xR28IhL_Cv9kr_O1aiG0qpO-gvL1rcMXqFmTLFWIVVuFTQXE-cKlJolAbW8PrRhjuDxkeKQ84HLY7E5uazGTi37VjrhH1ASHXtEInzQQcQ= ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="__UAHOME"

868966f32841f27ee5d0272781912e40 ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="__UAHASH"

9de267b0edef1455b8d8b52ac9ec0f5a ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="beesknees"

------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="__JSCHK"

60b97928a60ba ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="fields[name]"

rowan testing ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="fields[email]" @.*** ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="fields[comment]"

test the form ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="CRAFT_CSRF_TOKEN"

8xR28IhL_Cv9kr_O1aiG0qpO-gvL1rcMXqFmTLFWIVVuFTQXE-cKlJolAbW8PrRhjuDxkeKQ84HLY7E5uazGTi37VjrhH1ASHXtEInzQQcQ= ------WebKitFormBoundaryQW1173BvV1YSJ9wS Content-Disposition: form-data; name="g-recaptcha-response"

03AGdBq24II6OSp8wS6kymjbRTJSE8f8id35Q4ZcovOIY7TSm4hjNdzR0TkkKzv8N_Un0BrwFYpu3qtREQSk10Odl2dtYJ3iIK2qw9nGxzZese91nOngp8It9wRFXG0BfgJVMsoP4JlTGH73PYNyYYkOjDbkFYrKhiIhaxz1j8SIFsisPDPBXbbL1-TmwicqS8rfOnP3In3c01EhTW1VgIwV8ObszBWtDcO448Jp_Dh_sjmyWZyKy4jiiMP0x40Goi6M1xCtbsv899ASVbDhoA0WbWrD9Lkk2HuMZSri-Pe8hkKL-2xO90Vqu6ZOyO5NWsm0rgHL0oBgSaYIRll6igBTrzSBUxN9gLpKYRNGBy3CvFTqIuJH3p7cb88neaPfJyJCobmR5CEMM-TW4BTpPVzH3hSor7Edvf25nAtVNXi6yIssGbSv4OFOMtMAyBmHD97kYucL_T7huT9T0VGouYZpkK7oSiP8UOhUeaFE5y41cEgHvcKBQJxooM8t5ZB8embw8ypbGBoCEPQePXTlvjKrRGWj9q0L4Yuw ------WebKitFormBoundaryQW1173BvV1YSJ9wS--

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/verbb/comments/issues/228, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAUN7GPYLAJQOVSVCIDSCLTRAXBZANCNFSM46B3MHIA .