[DigitalPoint] App for Cloudflare®

[DigitalPoint] App for Cloudflare® 1.8.2

No permission to download
This addon is a full time job.
Ya... I definitely did not think I'd be adding all this stuff to it when I originally released it, that's for sure. Things like R2 and Worker-based image proxies wasn't even a thought back then. hah

Now the WordPress version is getting interesting stuff as well (even though I can't stand WordPress). Like the 1.8.0 version for WordPress has the ability to use a singular R2 bucket for all the media in all the sites if they want (can still do a bucket per site also) for general WordPress hosting setups. The hosting company manages the Cloudflare stuff in the Network Admin area rather than the normal WordPress area:


One of these days I'll stop thinking of things to add... 😂
 
Having a weird issue with firefox showing ascii characters and wondering if anyone else has seen this. This is a fresh install of firefox with no addons turned on. Works fine in google so I know its something specific to FF.

1700057379173.webp
 
Does it work if you disable presigned URLs? My guess is you uploaded that object outside of the addon (maybe moved it to the bucket with rclone or something) with the wrong content type. If you disable presigned URLs, the content type is set by the application (XenForo) to override whatever it’s set to in the bucket.

And Firefox probably just isn’t as good as other browsers as far as dealing with the wrong content type header.
 
Does it work if you disable presigned URLs? My guess is you uploaded that object outside of the addon (maybe moved it to the bucket with rclone or something) with the wrong content type. If you disable presigned URLs, the content type is set by the application (XenForo) to override whatever it’s set to in the bucket.

And Firefox probably just isn’t as good as other browsers as far as dealing with the wrong content type header.
Just disabled presigned url and it worked. Weird though because this was uploaded to the bucket after the migration. Is there anything you recommend me running on the bucket or changing in r2? I dont want to turn off presigned urls for the security of the expiring link
 
Just disabled presigned url and it worked. Weird though because this was uploaded to the bucket after the migration. Is there anything you recommend me running on the bucket or changing in r2? I dont want to turn off presigned urls for the security of the expiring link
Well turning off presigned URLs isn’t going to be any less secure than not using it. Security is handled by XenForo user permissions just fine.

What type of content is the attachment?
 
Well turning off presigned URLs isn’t going to be any less secure than not using it. Security is handled by XenForo user permissions just fine.

What type of content is the attachment?
so if someone has the link and they forward it, then it wont bypass permissions if its cached in Cloudflare?

Its a jpeg
 
so if someone has the link and they forward it, then it wont bypass permissions if its cached in Cloudflare?

Its a jpeg
It wouldn’t be cached in Cloudflare unless you specifically instruct it to. Presigned URLs aren’t cached, so if you made a rule to forcibly cache attachment URLs, just remove that and normal XenForo permissions will apply.

Caching attachment URLs and then using presigned URLs ultimately does nothing as far as caching because presigned URLs don’t use the attachment URL.

Basically you can’t edge cache something and use something permission based (XenForo permissions or presigned URLs). Have to pick one or the other.
 
It wouldn’t be cached in Cloudflare unless you specifically instruct it to. Presigned URLs aren’t cached, so if you made a rule to forcibly cache attachment URLs, just remove that and normal XenForo permissions will apply.

Caching attachment URLs and then using presigned URLs ultimately does nothing as far as caching because presigned URLs don’t use the attachment URL.

Basically you can’t edge cache something and use something permission based (XenForo permissions or presigned URLs). Have to pick one or the other.
I dont believe I'm caching the attachments. Maybe I misspoke from lack of understanding.

1700059186064.webp

1700059262195.webp
 
Ya, then just disable presigned URLs and you should be good to go.

Also, if those two cache rules for the public bucket are identical, you can delete one just to keep things clean.
 
Ya, then just disable presigned URLs and you should be good to go.

Also, if those two cache rules for the public bucket are identical, you can delete one just to keep things clean.
awesome thank you - Last silly question - if I disable presigned URL will it get hit for ingress/egress on the AWS host since it downloads and sends from the server? I'm assuming it doesnt since the main storage is R2 and the xenforo aws hosts is pointed to that.
 
If your hosting charges for ingress/egress, yes you probably would incur that charge because the "normal" way XenForo does attachments is it does the permission check, if the user can view it, it will fetch the attachment from the abstracted filesystem (R2 in this case) and then pass it through to the user. So it would be both ingress and egress as far as the web server is concerned.
 
@digitalpoint

Updated to 1.8.0 yesterday and we've been getting a lot of these errors (usually in pairs) since. Any ideas?

Code:
Server error log

    ErrorException: Cloudflare: cURL error 77: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) src/XF/Error.php:77

    Generated by: Unknown account Nov 15, 2023 at 8:27 AM

Stack trace

#0 src/XF.php(219): XF\Error->logError('Cloudflare: cUR...', false)
#1 src/addons/DigitalPoint/Cloudflare/Traits/XF.php(165): XF::logError('Cloudflare: cUR...')
#2 src/addons/DigitalPoint/Cloudflare/Api/Cloudflare.php(705): DigitalPoint\Cloudflare\Api\Cloudflare->logError('Cloudflare: cUR...')
#3 src/addons/DigitalPoint/Cloudflare/Api/Advanced.php(741): DigitalPoint\Cloudflare\Api\CloudflareAbstract->makeRequest('GET', 'attachments/892...', Array, 0, 'nwfa-attachment...')
#4 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(128): DigitalPoint\Cloudflare\Api\Advanced->getR2Object('nwfa-attachment...', 'attachments/892...')
#5 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(108): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->read('attachments/892...')
#6 src/vendor/league/flysystem/src/Filesystem.php(196): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->readStream('attachments/892...')
#7 [internal function]: League\Flysystem\Filesystem->readStream('attachments/892...', Array)
#8 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('League\\Flysyste...', Array)
#9 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('readStream', Array)
#10 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(154): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('readStream', Array)
#11 src/vendor/league/flysystem/src/MountManager.php(345): League\Flysystem\EventableFilesystem\EventableFilesystem->readStream('attachments/892...')
#12 src/XF/Pub/View/Attachment/View.php(25): League\Flysystem\MountManager->readStream('attachments/892...')
#13 src/addons/X0815/Watermarker/XF/Pub/View/Attachment/View.php(65): XF\Pub\View\Attachment\View->renderRaw()
#14 src/addons/SV/AttachmentImprovements/XF/Pub/View/Attachment/AttachmentViewTrait.php(136): X0815\Watermarker\XF\Pub\View\Attachment\View->renderRaw()
#15 src/XF/Mvc/Renderer/AbstractRenderer.php(91): SV\AttachmentImprovements\XF\Pub\View\Attachment\View->renderRaw()
#16 src/XF/Mvc/Renderer/Raw.php(39): XF\Mvc\Renderer\AbstractRenderer->renderViewObject('XF:Attachment\\V...', '', Array)
#17 src/XF/Mvc/Dispatcher.php(460): XF\Mvc\Renderer\Raw->renderView('XF:Attachment\\V...', '', Array)
#18 src/XF/Mvc/Dispatcher.php(442): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#19 src/XF/Mvc/Dispatcher.php(402): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#20 src/XF/Mvc/Dispatcher.php(60): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'raw')
#21 src/XF/App.php(2487): XF\Mvc\Dispatcher->run()
#22 src/XF.php(524): XF\App->run()
#23 index.php(20): XF::runApp('XF\\Pub\\App')
#24 {main}

Request state

array(4) {
  ["url"] => string(63) "/attachments/58f57839-ae91-4211-919f-736d1168d90e-jpeg.1063899/"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/attachments/58f57839-ae91-4211-919f-736d1168d90e-jpeg_1063899/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

Code:
Server error log

    League\Flysystem\FileNotFoundException: File not found at path: attachments/892/892923-5b41fc176a6ac5e5da929e622008d420.data src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php:132

    Generated by: Unknown account Nov 15, 2023 at 8:27 AM

Stack trace

#0 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(108): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->read('attachments/892...')
#1 src/vendor/league/flysystem/src/Filesystem.php(196): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->readStream('attachments/892...')
#2 [internal function]: League\Flysystem\Filesystem->readStream('attachments/892...', Array)
#3 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('League\\Flysyste...', Array)
#4 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('readStream', Array)
#5 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(154): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('readStream', Array)
#6 src/vendor/league/flysystem/src/MountManager.php(345): League\Flysystem\EventableFilesystem\EventableFilesystem->readStream('attachments/892...')
#7 src/XF/Pub/View/Attachment/View.php(25): League\Flysystem\MountManager->readStream('attachments/892...')
#8 src/addons/X0815/Watermarker/XF/Pub/View/Attachment/View.php(65): XF\Pub\View\Attachment\View->renderRaw()
#9 src/addons/SV/AttachmentImprovements/XF/Pub/View/Attachment/AttachmentViewTrait.php(136): X0815\Watermarker\XF\Pub\View\Attachment\View->renderRaw()
#10 src/XF/Mvc/Renderer/AbstractRenderer.php(91): SV\AttachmentImprovements\XF\Pub\View\Attachment\View->renderRaw()
#11 src/XF/Mvc/Renderer/Raw.php(39): XF\Mvc\Renderer\AbstractRenderer->renderViewObject('XF:Attachment\\V...', '', Array)
#12 src/XF/Mvc/Dispatcher.php(460): XF\Mvc\Renderer\Raw->renderView('XF:Attachment\\V...', '', Array)
#13 src/XF/Mvc/Dispatcher.php(442): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#14 src/XF/Mvc/Dispatcher.php(402): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#15 src/XF/Mvc/Dispatcher.php(60): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'raw')
#16 src/XF/App.php(2487): XF\Mvc\Dispatcher->run()
#17 src/XF.php(524): XF\App->run()
#18 index.php(20): XF::runApp('XF\\Pub\\App')
#19 {main}

Request state

array(4) {
  ["url"] => string(63) "/attachments/58f57207-ae91-4211-919f-736d1168d90e-jpeg.1063899/"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/attachments/58f57207-ae91-4211-919f-736d1168d90e-jpeg_1063899/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}
 
I just tried to view the Cloudflare Rules page in the ACP and received another error 77. I did not see an entry for it in the server error log.

1700066208590.webp
 
@digitalpoint

Updated to 1.8.0 yesterday and we've been getting a lot of these errors (usually in pairs) since. Any ideas?

Code:
Server error log

    ErrorException: Cloudflare: cURL error 77: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) src/XF/Error.php:77

    Generated by: Unknown account Nov 15, 2023 at 8:27 AM

Stack trace

#0 src/XF.php(219): XF\Error->logError('Cloudflare: cUR...', false)
#1 src/addons/DigitalPoint/Cloudflare/Traits/XF.php(165): XF::logError('Cloudflare: cUR...')
#2 src/addons/DigitalPoint/Cloudflare/Api/Cloudflare.php(705): DigitalPoint\Cloudflare\Api\Cloudflare->logError('Cloudflare: cUR...')
#3 src/addons/DigitalPoint/Cloudflare/Api/Advanced.php(741): DigitalPoint\Cloudflare\Api\CloudflareAbstract->makeRequest('GET', 'attachments/892...', Array, 0, 'nwfa-attachment...')
#4 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(128): DigitalPoint\Cloudflare\Api\Advanced->getR2Object('nwfa-attachment...', 'attachments/892...')
#5 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(108): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->read('attachments/892...')
#6 src/vendor/league/flysystem/src/Filesystem.php(196): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->readStream('attachments/892...')
#7 [internal function]: League\Flysystem\Filesystem->readStream('attachments/892...', Array)
#8 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('League\\Flysyste...', Array)
#9 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('readStream', Array)
#10 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(154): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('readStream', Array)
#11 src/vendor/league/flysystem/src/MountManager.php(345): League\Flysystem\EventableFilesystem\EventableFilesystem->readStream('attachments/892...')
#12 src/XF/Pub/View/Attachment/View.php(25): League\Flysystem\MountManager->readStream('attachments/892...')
#13 src/addons/X0815/Watermarker/XF/Pub/View/Attachment/View.php(65): XF\Pub\View\Attachment\View->renderRaw()
#14 src/addons/SV/AttachmentImprovements/XF/Pub/View/Attachment/AttachmentViewTrait.php(136): X0815\Watermarker\XF\Pub\View\Attachment\View->renderRaw()
#15 src/XF/Mvc/Renderer/AbstractRenderer.php(91): SV\AttachmentImprovements\XF\Pub\View\Attachment\View->renderRaw()
#16 src/XF/Mvc/Renderer/Raw.php(39): XF\Mvc\Renderer\AbstractRenderer->renderViewObject('XF:Attachment\\V...', '', Array)
#17 src/XF/Mvc/Dispatcher.php(460): XF\Mvc\Renderer\Raw->renderView('XF:Attachment\\V...', '', Array)
#18 src/XF/Mvc/Dispatcher.php(442): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#19 src/XF/Mvc/Dispatcher.php(402): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#20 src/XF/Mvc/Dispatcher.php(60): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'raw')
#21 src/XF/App.php(2487): XF\Mvc\Dispatcher->run()
#22 src/XF.php(524): XF\App->run()
#23 index.php(20): XF::runApp('XF\\Pub\\App')
#24 {main}

Request state

array(4) {
  ["url"] => string(63) "/attachments/58f57839-ae91-4211-919f-736d1168d90e-jpeg.1063899/"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/attachments/58f57839-ae91-4211-919f-736d1168d90e-jpeg_1063899/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

Code:
Server error log

    League\Flysystem\FileNotFoundException: File not found at path: attachments/892/892923-5b41fc176a6ac5e5da929e622008d420.data src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php:132

    Generated by: Unknown account Nov 15, 2023 at 8:27 AM

Stack trace

#0 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(108): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->read('attachments/892...')
#1 src/vendor/league/flysystem/src/Filesystem.php(196): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->readStream('attachments/892...')
#2 [internal function]: League\Flysystem\Filesystem->readStream('attachments/892...', Array)
#3 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('League\\Flysyste...', Array)
#4 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('readStream', Array)
#5 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(154): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('readStream', Array)
#6 src/vendor/league/flysystem/src/MountManager.php(345): League\Flysystem\EventableFilesystem\EventableFilesystem->readStream('attachments/892...')
#7 src/XF/Pub/View/Attachment/View.php(25): League\Flysystem\MountManager->readStream('attachments/892...')
#8 src/addons/X0815/Watermarker/XF/Pub/View/Attachment/View.php(65): XF\Pub\View\Attachment\View->renderRaw()
#9 src/addons/SV/AttachmentImprovements/XF/Pub/View/Attachment/AttachmentViewTrait.php(136): X0815\Watermarker\XF\Pub\View\Attachment\View->renderRaw()
#10 src/XF/Mvc/Renderer/AbstractRenderer.php(91): SV\AttachmentImprovements\XF\Pub\View\Attachment\View->renderRaw()
#11 src/XF/Mvc/Renderer/Raw.php(39): XF\Mvc\Renderer\AbstractRenderer->renderViewObject('XF:Attachment\\V...', '', Array)
#12 src/XF/Mvc/Dispatcher.php(460): XF\Mvc\Renderer\Raw->renderView('XF:Attachment\\V...', '', Array)
#13 src/XF/Mvc/Dispatcher.php(442): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#14 src/XF/Mvc/Dispatcher.php(402): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#15 src/XF/Mvc/Dispatcher.php(60): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'raw')
#16 src/XF/App.php(2487): XF\Mvc\Dispatcher->run()
#17 src/XF.php(524): XF\App->run()
#18 index.php(20): XF::runApp('XF\\Pub\\App')
#19 {main}

Request state

array(4) {
  ["url"] => string(63) "/attachments/58f57207-ae91-4211-919f-736d1168d90e-jpeg.1063899/"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/attachments/58f57207-ae91-4211-919f-736d1168d90e-jpeg_1063899/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}
Nothing to do with 1.8.0 (or even really this addon actually). But your server needs the ability to communicate over HTTPS, which is the problem there. You have missing or expired SSL certificates on your server. If you happen to be using Centmin Mod, @eva2000 posted an update link over here:

 
awesome thank you - Last silly question - if I disable presigned URL will it get hit for ingress/egress on the AWS host since it downloads and sends from the server? I'm assuming it doesnt since the main storage is R2 and the xenforo aws hosts is pointed to that.
FWIW, the next version sorts this type of situation out. The presigned URL system forcibly sets content type and content disposition headers, so even if content-type is set incorrectly on the R2 bucket side, we are forcing what we think it should be.
 
FWIW, the next version sorts this type of situation out. The presigned URL system forcibly sets content type and content disposition headers, so even if content-type is set incorrectly on the R2 bucket side, we are forcing what we think it should be.
Ok that would be great. The problem that exists is I’m using cloudflare to not be so bandwidth intensive but still keep the permissions.
 
I've been getting 10-20 of these missing file errors per day and am not positive anything changed on my server. The most recent update did not fix. Ideas?

Code:
League\Flysystem\FileNotFoundException: File not found at path: attachments/329/329998-1c4e33b034162c068f42ed84199af457.data src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php:132
Generated by: <redacted> Nov 15, 2023 at 1:16 PM

Stack trace
#0 src/addons/DigitalPoint/Cloudflare/League/Flysystem/Adapter/R2.php(108): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->read('attachments/329...')
#1 src/vendor/league/flysystem/src/Filesystem.php(196): DigitalPoint\Cloudflare\League\Flysystem\Adapter\R2->readStream('attachments/329...')
#2 [internal function]: League\Flysystem\Filesystem->readStream('attachments/329...', Array)
#3 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('League\\Flysyste...', Array)
#4 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('readStream', Array)
#5 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(154): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('readStream', Array)
#6 src/vendor/league/flysystem/src/MountManager.php(345): League\Flysystem\EventableFilesystem\EventableFilesystem->readStream('attachments/329...')
#7 src/XF/Pub/View/Attachment/View.php(25): League\Flysystem\MountManager->readStream('attachments/329...')
#8 src/XF/Mvc/Renderer/AbstractRenderer.php(91): XF\Pub\View\Attachment\View->renderRaw()
#9 src/XF/Mvc/Renderer/Raw.php(39): XF\Mvc\Renderer\AbstractRenderer->renderViewObject('XF:Attachment\\V...', '', Array)
#10 src/XF/Mvc/Dispatcher.php(460): XF\Mvc\Renderer\Raw->renderView('XF:Attachment\\V...', '', Array)
#11 src/XF/Mvc/Dispatcher.php(442): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#12 src/XF/Mvc/Dispatcher.php(402): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Raw), Object(XF\Mvc\Reply\View))
#13 src/XF/Mvc/Dispatcher.php(60): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'raw')
#14 src/XF/App.php(2487): XF\Mvc\Dispatcher->run()
#15 src/XF.php(524): XF\App->run()
#16 index.php(19): XF::runApp('XF\\Pub\\App')
#17 {main}

Request state
array(4) {
  ["url"] => string(51) "/attachments/img_20230806_122303706_hdr-jpg.727326/"
  ["referrer"] => string(55) "https://<redacted>"
  ["_GET"] => array(0) {
  }
  ["_POST"] => array(0) {
  }
}
 
Looks like the attachment data is missing for whatever reason. XenForo by default hides the error so normally you never know, but this addon does log the error so you know you have a broken attachment and you can address it accordingly (if you have a backup of the missing attachment, you could restore it... if you don't have a backup, you probably can just delete the attachment because it's unusable without the underlying data and just throwing an error to whatever user tried to view it).
 
Top Bottom