mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-08 19:06:06 +03:00
Closed
opened 2026-02-05 10:29:41 +03:00 by OVERLORD
·
0 comments
No Branch/Tag Specified
development
further_theme_development
l10n_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
pull-request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#6339
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/BookStackApp/BookStack/pull/4309
Author: @devdot
Created: 6/15/2023
Status: ❌ Closed
Base:
development← Head:refactor-exceptions📝 Commits (10+)
ecf99faAdd test showing the "HTTP 500 on not found" bug9ba7d1eFix "HTTP 500 on not found" bug #4290321a459Refactor exception handling by using interface34d8268Refactor notify exception to clean up api exception handling9ddd81fMove handling of ApiAuthException to handler34f24c2Simplify exception handling in ApiTokenGuard8265276Modify HttpFetchException handle to log exceptiond9cbc5eMake JsonDebugException to use proper interface0214448Add tests for Registration3561b35Partial cleanup of exception handling📊 Changes
16 files changed (+273 additions, -113 deletions)
View changed files
📝
app/Access/Controllers/ConfirmEmailController.php(+4 -8)📝
app/Access/Controllers/UserInviteController.php(+7 -14)📝
app/Api/ApiTokenGuard.php(+9 -26)📝
app/Exceptions/ApiAuthException.php(+34 -1)📝
app/Exceptions/Handler.php(+2 -6)📝
app/Exceptions/HttpFetchException.php(+17 -3)📝
app/Exceptions/JsonDebugException.php(+5 -2)📝
app/Exceptions/NotifyException.php(+42 -7)📝
app/Exceptions/PrettyException.php(+37 -2)➖
app/Exceptions/UnauthorizedException.php(+0 -16)📝
app/Http/Middleware/ApiAuthenticate.php(+4 -20)📝
app/Uploads/HttpFetcher.php(+2 -1)📝
app/Uploads/UserAvatars.php(+6 -6)📝
tests/Api/PagesApiTest.php(+21 -0)📝
tests/Auth/RegistrationTest.php(+57 -0)📝
tests/Uploads/AvatarTest.php(+26 -1)📄 Description
While working on exceptions for #4290, I found exception handling to be quite fuzzy. Trying to untangle it all, I started working on this refactoring, but I'm not sure if this is really a helpful direction at all.
First of all, there are three major kinds of exceptions:
\Exception, the base exception mostly used for internal exceptions that ought to be caught in all cases (usually in controllers), therefore never exposed to user or API.Now, I noticed the most common handling is with notifications of some kind:
ConfirmationEmailException: https://github.com/devdot/BookStack/blob/development/app/Access/EmailConfirmationService.php#L23Controller:showErrorNotification, likeMoveOperationExceptionhttps://github.com/devdot/BookStack/blob/development/app/Entities/Controllers/ChapterController.php#L188-L192So with all this observed, here is my question @ssddanbrown: Where are error notifications supposed to be handled? As I see it, there are these options:
NotifyExceptionalready creates proper HTTP responses/redirects, even for JSON). However, this would mean that services, models etc. determine how an exception should be handled, where it should be redirected to and what the message should be. That is a problem i.e. for theUserTokenServicewhich currently has different error messages depending on the controller that accesses it.NotifyExceptionaltogether, makePrettyExceptionthe base class for all exceptions (perhaps rename toBaseExceptionand let any notifying be handled by the controller, not the exception (and error handler). While this would potentially bloat controllers, the controllers get to decide how to present any error to the user. When the controllers do not catch exceptions, they would still be presentable (as extensions ofPrettyException). However, this would eliminate the ease of throwing an error that will force a redirect with notification, whichNotifyExceptioncurrently does.To me, either 2 or 3 make to most sense.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.