Git Product home page Git Product logo

flarum-0x's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

flarum-0x's Issues

附件图片上云计划

目前站点的图片附件用的阿里云 CDN 代理加载,但因为域名无法备案,只能用香港的服务器,带宽方面是个鸡肋,目前发现腾讯云 COS 可以很方便地做静态 CDN,准备尝试这样的方案。

大致需完成两步:

  1. 在COS开通相关存储桶(已完成)
  2. 修改图片上传插件 (FriendsOfFlarum/upload),渲染页面时将原本的链接替换成 COS 的链接

完成后可实现图片的秒开

更简单直接的 S3 附件上传插件

由于期望本站的附件都放在对象存储服务(类 Amazon S3,目前是用腾讯云),避免服务器维护文件下载的开销。
fof/upload 插件存在一些问题会影响它的体验:

核心问题:依赖 php 透传上传下载,服务器多一层带宽压力

  1. 上传不直接走 cos
  2. 下载普通附件时也从主站透传

期望实现:
可以直接在浏览器直连对象存储上传文件,获得最大带宽使用效率,且无严格文件大小限制,并能用上云服务提供的图片处理的功能。

其他细节问题(低优先级):

  1. 上传的文件名会自动加上时间戳前缀 /,下载时导致文件名变长
  2. 不支持签名鉴权下载文件
  3. 图片附件会直接生成特定域名的 URL,并通过编辑器写入帖子内(可能会导致一些历史包袱

Originally posted by @zgq354 in #15 (comment)

升级 flarum/core 到 v1.0

目前站点用的 flarum 还是 beta.13 版,flarum 官方发布了 beta.14 版本,为了跟上主线的更新,需要升级核心。

由于 beta.14 前后端框架都做了大量的重构和版本升级,所有的魔改与第三方插件都需更新以便兼容
(具体涉及的修改点待梳理)

flarum-pwa push 通知失败导致的报错

error log:

[2022-02-12 14:40:08] flarum.ERROR: Error: Call to a member function getStatusCode() on null in /wwwroot/vendor/askvortsov/flarum-pwa/src/PushNotificationDriver.php:143
Stack trace:
#0 /wwwroot/vendor/flarum/core/src/Notification/NotificationSyncer.php(110): Askvortsov\FlarumPWA\PushNotificationDriver->send(Object(Flarum\Mentions\Notification\PostMentionedBlueprint), Array)
#1 /wwwroot/vendor/flarum/mentions/src/Listener/UpdateMentionsMetadataWhenVisible.php(84): Flarum\Notification\NotificationSyncer->sync(Object(Flarum\Mentions\Notification\PostMentionedBlueprint), Array)
#2 /wwwroot/vendor/flarum/mentions/src/Listener/UpdateMentionsMetadataWhenVisible.php(51): Flarum\Mentions\Listener\UpdateMentionsMetadataWhenVisible->syncPostMentions(Object(Flarum\Post\CommentPost), Array)
#3 /wwwroot/vendor/illuminate/events/Dispatcher.php(424): Flarum\Mentions\Listener\UpdateMentionsMetadataWhenVisible->handle(Object(Flarum\Post\Event\Posted))
#4 /wwwroot/vendor/illuminate/events/Dispatcher.php(249): Illuminate\Events\Dispatcher->Illuminate\Events\{closure}('Flarum\\Post\\Eve...', Array)
#5 /wwwroot/vendor/flarum/core/src/Foundation/DispatchEventsTrait.php(33): Illuminate\Events\Dispatcher->dispatch('Flarum\\Post\\Eve...')
#6 /wwwroot/vendor/flarum/core/src/Post/Command/PostReplyHandler.php(104): Flarum\Post\Command\PostReplyHandler->dispatchEventsFor(Object(Flarum\Post\CommentPost), Object(Flarum\User\User))
#7 /wwwroot/vendor/flarum/core/src/Notification/NotificationSyncer.php(148): Flarum\Post\Command\PostReplyHandler->Flarum\Post\Command\{closure}()
#8 /wwwroot/vendor/flarum/core/src/Post/Command/PostReplyHandler.php(105): Flarum\Notification\NotificationSyncer->onePerUser(Object(Closure))
#9 /wwwroot/vendor/illuminate/bus/Dispatcher.php(122): Flarum\Post\Command\PostReplyHandler->handle(Object(Flarum\Post\Command\PostReply))
#10 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\Post\Command\PostReply))
#11 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Post\Command\PostReply))
#12 /wwwroot/vendor/illuminate/bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#13 /wwwroot/vendor/illuminate/bus/Dispatcher.php(78): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\Post\Command\PostReply))
#14 /wwwroot/vendor/flarum/core/src/Api/Controller/CreatePostController.php(62): Illuminate\Bus\Dispatcher->dispatch(Object(Flarum\Post\Command\PostReply))
#15 /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(115): Flarum\Api\Controller\CreatePostController->data(Object(Laminas\Diactoros\ServerRequest), Object(Tobscure\JsonApi\Document))
#16 /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php(22): Flarum\Api\Controller\AbstractSerializeController->handle(Object(Laminas\Diactoros\ServerRequest))
#17 /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php(41): Flarum\Api\Controller\AbstractCreateController->handle(Object(Laminas\Diactoros\ServerRequest))
#18 /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)
#19 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ExecuteRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))
#20 /wwwroot/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#21 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Api\Middleware\ThrottleApi->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#22 /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(44): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#23 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#24 /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(67): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#25 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ResolveRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#26 /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#27 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#28 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(31): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#31 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#32 /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#33 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#35 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#36 /wwwroot/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#37 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#38 /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#39 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#40 /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#41 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#42 /wwwroot/vendor/flarum/core/src/Http/Middleware/InjectActorReference.php(25): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#43 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\InjectActorReference->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(76): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#46 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#47 /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php(101): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#48 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#49 /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(36): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#50 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#51 /wwwroot/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#52 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ProcessIp->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#55 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(76): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#56 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(65): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#57 /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /wwwroot/vendor/flarum/core/src/Http/Server.php(44): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#59 /wwwroot/public/index.php(26): Flarum\Http\Server->listen()
#60 {main}

导致回复超时的问题,可能与它有关系:#28

dev.0xffff.one 无法收到帐户激活邮件

问题:

dev.0xffff.one 无法收到帐户激活邮件,发帖和回帖功能无法使用(应该跟帐户没激活存在因果联系,不另外开 issue 了)。

复现步骤:

(1) 访问 https://dev.0xffff.one/

(2) 点击位于导航栏的 Sign Up 链接

(3) 输入合规的帐户名、密码和邮箱,点击 Sign Up

(4) 弹出提示信息如下:

Oops! Something went wrong. Please reload the page and try again.

Screenshot_2021-04-30 0xFFFF Dev Beta 16(1)

(5) 点击第 4 步弹出信息的 DEBUG 链接,显示内容如下:

500 Internal Server Error
POST https://dev.0xffff.one/register

Swift_TransportException: Expected response code 220 but got an empty response in file /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 447
Stack trace:
  1. Swift_TransportException->() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:447
  2. Swift_Transport_AbstractSmtpTransport->assertResponseCode() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:360
  3. Swift_Transport_AbstractSmtpTransport->readGreeting() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:147
  4. Swift_Transport_AbstractSmtpTransport->start() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php:50
  5. Swift_Transport_SendmailTransport->start() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php:65
  6. Swift_Mailer->send() /wwwroot/vendor/illuminate/mail/Mailer.php:521
  7. Illuminate\Mail\Mailer->sendSwiftMessage() /wwwroot/vendor/illuminate/mail/Mailer.php:288
  8. Illuminate\Mail\Mailer->send() /wwwroot/vendor/illuminate/mail/Mailer.php:212
  9. Illuminate\Mail\Mailer->raw() /wwwroot/vendor/flarum/core/src/Mail/Job/SendRawEmailJob.php:34
 10. Flarum\Mail\Job\SendRawEmailJob->handle() /wwwroot/vendor/illuminate/container/BoundMethod.php:36
 11. Illuminate\Container\BoundMethod->Illuminate\Container\{closure}() /wwwroot/vendor/illuminate/container/Util.php:40
 12. Illuminate\Container\Util->unwrapIfClosure() /wwwroot/vendor/illuminate/container/BoundMethod.php:93
 13. Illuminate\Container\BoundMethod->callBoundMethod() /wwwroot/vendor/illuminate/container/BoundMethod.php:37
 14. Illuminate\Container\BoundMethod->call() /wwwroot/vendor/illuminate/container/Container.php:611
 15. Illuminate\Container\Container->call() /wwwroot/vendor/illuminate/bus/Dispatcher.php:128
 16. Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
 17. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
 18. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/bus/Dispatcher.php:132
 19. Illuminate\Bus\Dispatcher->dispatchNow() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:118
 20. Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
 21. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
 22. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:120
 23. Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:70
 24. Illuminate\Queue\CallQueuedHandler->call() /wwwroot/vendor/illuminate/queue/Jobs/Job.php:98
 25. Illuminate\Queue\Jobs\Job->fire() /wwwroot/vendor/illuminate/queue/SyncQueue.php:43
 26. Illuminate\Queue\SyncQueue->push() /wwwroot/vendor/flarum/core/src/User/AccountActivationMailer.php:68
 27. Flarum\User\AccountActivationMailer->handle() /wwwroot/vendor/illuminate/events/Dispatcher.php:412
 28. Illuminate\Events\Dispatcher->Illuminate\Events\{closure}() /wwwroot/vendor/illuminate/events/Dispatcher.php:237
 29. Illuminate\Events\Dispatcher->dispatch() /wwwroot/vendor/flarum/core/src/Foundation/DispatchEventsTrait.php:33
 30. Flarum\User\Command\RegisterUserHandler->dispatchEventsFor() /wwwroot/vendor/flarum/core/src/User/Command/RegisterUserHandler.php:112
 31. Flarum\User\Command\RegisterUserHandler->handle() /wwwroot/vendor/illuminate/bus/Dispatcher.php:122
 32. Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
 33. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
 34. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/bus/Dispatcher.php:132
 35. Illuminate\Bus\Dispatcher->dispatchNow() /wwwroot/vendor/illuminate/bus/Dispatcher.php:78
 36. Illuminate\Bus\Dispatcher->dispatch() /wwwroot/vendor/flarum/core/src/Api/Controller/CreateUserController.php:45
 37. Flarum\Api\Controller\CreateUserController->data() /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php:102
 38. Flarum\Api\Controller\AbstractSerializeController->handle() /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php:22
 39. Flarum\Api\Controller\AbstractCreateController->handle() /wwwroot/vendor/flarum/core/src/Api/Client.php:72
 40. Flarum\Api\Client->send() /wwwroot/vendor/flarum/core/src/Forum/Controller/RegisterController.php:59
 41. Flarum\Forum\Controller\RegisterController->handle() /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php:38
 42. Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}() /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php:27
 43. Flarum\Http\Middleware\ExecuteRoute->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 44. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/FlarumPromotionHeader.php:29
 45. Flarum\Http\Middleware\FlarumPromotionHeader->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 46. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ShareErrorsFromSession.php:57
 47. Flarum\Http\Middleware\ShareErrorsFromSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 48. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php:44
 49. Flarum\Http\Middleware\CheckCsrfToken->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 50. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php:67
 51. Flarum\Http\Middleware\ResolveRoute->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 52. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php:50
 53. Flarum\Http\Middleware\SetLocale->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 54. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php:32
 55. Flarum\Http\Middleware\AuthenticateWithSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 56. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php:52
 57. Flarum\Http\Middleware\RememberFromCookie->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 58. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php:61
 59. Flarum\Http\Middleware\StartSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 60. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/CollectGarbage.php:46
 61. Flarum\Http\Middleware\CollectGarbage->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 62. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php:28
 63. Flarum\Http\Middleware\ParseJsonBody->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 64. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php:57
 65. Flarum\Http\Middleware\HandleErrors->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 66. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
 67. Laminas\Stratigility\MiddlewarePipe->process() /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php:84
 68. Middlewares\RequestHandler->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 69. Laminas\Stratigility\Next->handle() /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php:101
 70. Middlewares\BasePathRouter->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 71. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php:42
 72. Laminas\Stratigility\Middleware\OriginalMessages->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 73. Laminas\Stratigility\Next->handle() /wwwroot/vendor/middlewares/base-path/src/BasePath.php:73
 74. Middlewares\BasePath->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 75. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php:24
 76. Flarum\Http\Middleware\ProcessIp->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
 77. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
 78. Laminas\Stratigility\MiddlewarePipe->process() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:73
 79. Laminas\Stratigility\MiddlewarePipe->handle() /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php:96
 80. Laminas\HttpHandlerRunner\RequestHandlerRunner->run() /wwwroot/vendor/flarum/core/src/Http/Server.php:44
 81. Flarum\Http\Server->listen() /wwwroot/public/index.php:26

(6) 关闭小窗,点击导航栏的 Log In 链接

(7) 输入第 3 步填写的帐户和密码,成功登录

(8) 页面顶部出现横幅如下(对邮箱地址进行了处理):

Screenshot_2021-04-30 0xFFFF Dev Beta 16(3)

(9) 检查第 3 步填写的邮箱,没有收到任何与帐户激活相关的邮件

(10) 点击 RESEND CONFIRMATION EMAIL,页面左下角出现以下提示:

Screenshot_2021-04-30 0xFFFF Dev Beta 16(4)

(11) 点击第 10 步弹出信息的 DEBUG 链接,显示内容如下:

500 Internal Server Error
POST https://dev.0xffff.one/api/users/5/send-confirmation

Swift_TransportException: Expected response code 220 but got an empty response in /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:447
Stack trace:
#0 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(360): Swift_Transport_AbstractSmtpTransport->assertResponseCode('', Array)
#1 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(147): Swift_Transport_AbstractSmtpTransport->readGreeting()
#2 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php(50): Swift_Transport_AbstractSmtpTransport->start()
#3 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(65): Swift_Transport_SendmailTransport->start()
#4 /wwwroot/vendor/illuminate/mail/Mailer.php(521): Swift_Mailer->send(Object(Swift_Message), Array)
#5 /wwwroot/vendor/illuminate/mail/Mailer.php(288): Illuminate\Mail\Mailer->sendSwiftMessage(Object(Swift_Message))
#6 /wwwroot/vendor/illuminate/mail/Mailer.php(212): Illuminate\Mail\Mailer->send(NULL, Array, Object(Closure))
#7 /wwwroot/vendor/flarum/core/src/Mail/Job/SendRawEmailJob.php(34): Illuminate\Mail\Mailer->raw('Hey bobby285274...', Object(Closure))
#8 /wwwroot/vendor/illuminate/container/BoundMethod.php(36): Flarum\Mail\Job\SendRawEmailJob->handle(Object(Illuminate\Mail\Mailer))
#9 /wwwroot/vendor/illuminate/container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#10 /wwwroot/vendor/illuminate/container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#11 /wwwroot/vendor/illuminate/container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Container\Container), Array, Object(Closure))
#12 /wwwroot/vendor/illuminate/container/Container.php(611): Illuminate\Container\BoundMethod::call(Object(Illuminate\Container\Container), Array, Array, NULL)
#13 /wwwroot/vendor/illuminate/bus/Dispatcher.php(128): Illuminate\Container\Container->call(Array)
#14 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#15 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#16 /wwwroot/vendor/illuminate/bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(118): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\Mail\Job\SendRawEmailJob), false)
#18 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#19 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#20 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(120): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#21 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(70): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\SyncJob), Object(Flarum\Mail\Job\SendRawEmailJob))
#22 /wwwroot/vendor/illuminate/queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\SyncJob), Array)
#23 /wwwroot/vendor/illuminate/queue/SyncQueue.php(43): Illuminate\Queue\Jobs\Job->fire()
#24 /wwwroot/vendor/flarum/core/src/Api/Controller/SendConfirmationEmailController.php(87): Illuminate\Queue\SyncQueue->push(Object(Flarum\Mail\Job\SendRawEmailJob))
#25 /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php(38): Flarum\Api\Controller\SendConfirmationEmailController->handle(Object(Laminas\Diactoros\ServerRequest))
#26 /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)
#27 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ExecuteRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))
#28 /wwwroot/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Api\Middleware\ThrottleApi->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(44): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#31 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#32 /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(67): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#33 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ResolveRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php(50): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#35 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#36 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(55): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#37 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#38 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(32): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#39 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#40 /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#41 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#42 /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#43 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /wwwroot/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#46 /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#47 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#48 /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#49 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#50 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#51 /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#52 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php(101): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#55 /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(42): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#56 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#57 /wwwroot/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#59 /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#60 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ProcessIp->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#61 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#62 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(73): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#63 /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#64 /wwwroot/vendor/flarum/core/src/Http/Server.php(44): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#65 /wwwroot/public/index.php(26): Flarum\Http\Server->listen()
#66 {main}

(12) 再次检查第 3 步填写的邮箱,依然没有收到任何与帐户激活相关的邮件

期望的结果:

注册表单提交后收到帐户激活邮件且使用该邮件成功激活帐户,帐户激活后回贴、发帖功能正常使用。

浏览器:

Firefox 87.0

补充说明:

无法发帖演示如下:

Screenshot_2021-04-30 0xFFFF Dev Beta 16(5)

无法回帖演示如下(操作所在页面为 dev.0xffff.one/d/1):

Screenshot_2021-04-30 第一条测试帖子 - 0xFFFF Dev Beta 16

在测试站注册多个账号(bobby285271 bobby285272 bobby285273 bobby285274)填写 QQ、126、使用个人域名的阿里企业邮箱进行测试,均可复现上述情况(前三个帐号为三天前注册,至今未收到邮件)。在主站下通过『更换邮箱』测试发信功能,可以顺利收到 0xffff AT izgq DOT net 发来的邮件并顺利完成邮箱验证。

其它功能暂未发现问题(包括更换头像、更改站点语言和 Follow 帖子)。

帖子内联图片的抖动问题

现象:
直接打开指向某楼层的链接,途中因为浏览器正在下载前面楼层的帖子的图片,帖子发生高度变化,从而使得页面发生抖动,导致滚动位置不精确

解决思路:
数据库增加帖子高度的额外字段,提交帖子时检测图片的高度并保存,再在渲染时指定容器的 min-height

帖子内链默认不打开新窗口跳转

目前帖子在添加内部链接仍然会添加 target="_blank",手机端点击内链跳转导致整体刷新,体验较差。

帖子例子:
计算机相关专业入门指引专题帖 - 开篇 & 索引 - 0xFFFF

希望可以判断这种情况,避免页面的刷新(类似 Pjax 的概念)。

逻辑的位置:core/src/Formatter/Formatter.php

$dom = $configurator->tags['URL']->template->asDOM();

foreach ($dom->getElementsByTagName('a') as $a) {
    $a->setAttribute('target', '_blank');
    $a->setAttribute('rel', 'nofollow');
}

$dom->saveChanges();

根据 s9e/TextFormatter 文档,此处解析用到了 XSLT 模版语言 作为匹配,关键在于写出新的模版,替换掉原来的 URL 的模版。

目前设想:可以用 XSLT 的条件判断的功能实现。

如图:
image

btw: 这一修改的经验或许可以对 LaTeX 插件的研究会有帮助。

SEO: meta 标签优化

如图,主要是帖子详情页的 description 的问题,问题集中在百度:
image

image

image

性能优化:Service Worker 预加载页面

把首页缓存到 Service Worker 以后,可以实现秒开的效果,减小白屏时间,类似 YouTube 的首页。

但有个问题,首页是 PHP 渲染生成的,包含了用户的 Session 等信息,不能简单地抽出来。

需要将 PHP 原始硬编码到 HTML 的部分抽离出来,做一个轻量的 App Shell 预置到缓存中。

参考本帖:
https://0xffff.one/d/331/25

CORS cache error after switch avatar storage to Cloudflare R2

At user profile page, there are some code works to calculating the main color of avatar and apply to user's background color.

After we migrate the avatar storage to Cloudflare R2, when cache is not disabled, it shows error:
image

image

when we disable the cache in Dev tools, it will back to normal
image

It is because some issue about Vary: origin header on Cloudflare R2 / S3, the CORS request and non-CORS request hit the same browser cache instance.

more detail: https://zhuanlan.zhihu.com/p/38972475

阻止用户重复发送相同帖子

同这个场景:#27

在一些出错场景下可能帖子已写入,但报了错误,用户反复点击提交,导致帖子反复增加的问题。

一种解决方式是:
在提交时候,检测用户最新一个帖子,如果完全相同,就抛出错误阻止再提交。

更好的分享体验

几种方式:

  1. 链接复制分享
  2. 生成站点二维码分享
  3. 调用分享接口(Web Share API

(微信自带分享暂不可能,可以针对微信与QQ优化,提醒用户浏览器打开

完善 README.md

重点:

  1. 项目介绍
  2. 开发环境搭建、部署方式(尤其是 git submodule 相关部分)

Optimizing the DevContainer Build Process

Current situation: DevContainer requires pulling an image at startup, and building directly from the Dockerfile is time-consuming. Currently, a separate dev-container branch is used to build the image through GitHub Action. This approach can be challenging when resolving conflicts after merging changes. Therefore, there is a need to optimize the process.

Branch main:
https://github.com/0xffff-one/0xffff-flarum/blob/50bbe59/.devcontainer/docker-compose.yml#L5

services: 
  app:
    image: ghcr.io/0xffff-one/0xffff-flarum-devcontainer:latest

Branch dev-container:
https://github.com/0xffff-one/0xffff-flarum/blob/d4f91f7/.devcontainer/docker-compose.yml#L5

services: 
  app:
    build:
      context: .
      dockerfile: Dockerfile

A possible solution:
In the CI process of the main branch, the image could be replaced with build / dockerfile by applying a patch or similar method, and then continue with the build process.

for more details at 0xFFFF Discord Channel:
https://discord.com/channels/835068992006651934/1103181702865629264

[Feature Request] 建议增加代码块折叠功能

考虑如果代码太长,帖子也相应变长,不太好翻。希望可以加个代码块折叠功能,建议可选如下:

  1. 默认折叠
    但是这样如果只是分享较短的内容,体验可能不太好
  2. 扩展 Markdown 语法
    可能会有较大工作量
  3. 发帖框增加一个是否默认折叠的选项
    不能灵活控制到每一个代码块
  4. 其他(逃

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.