]> BookStack Code Mirror - website/blob - content/blog/2023/bookstack-release-v23-08.md
Added images for v23.08 blogpost
[website] / content / blog / 2023 / bookstack-release-v23-08.md
1 +++
2 categories = ["Releases"]
3 tags = ["Releases"]
4 title = "BookStack Release v23.08"
5 date = 2023-08-30T12:00:00Z
6 author = "Dan Brown"
7 image = "/images/blog-cover-images/deer_dan_brown.jpg"
8 slug = "bookstack-release-v23-08"
9 draft = false
10 +++
11
12 The August release of BookStack is now here! This is focused upon an initial implementation of 
13 a notification system for content, but as usual there are a few other improvements to enjoy.
14
15 * [Update instructions](/docs/admin/updates)
16 * [GitHub release page](https://github.com/BookStackApp/BookStack/releases/tag/v23.08)
17
18
19 **Upgrade Notices**
20
21 - **Security - Webhooks** - In scenarios where admins users are not trusted, webhooks could potentially be used maliciously. This update adds a control for such functionality. Please read [our documentation for the new `ALLOWED_SSR_HOSTS` option](/docs/admin/security/#server-side-request-allow-list) if this may be a concern for your instance.
22
23 Note that [v23.06.1](/docs/admin/updates/#updating-to-v23061-or-higher) and [v23.06.2](/docs/admin/updates/#updating-to-v23062-or-higher) also had version specific upgrade notices that should be considered
24 if not already read and/or upgraded to those.
25
26 TODO - Video:
27 <!-- {{<pt 69eAVo8iNHPYs4n4UTT3Nb>}} -->
28
29 ### Content Notification System
30
31 It's now possible to be notified via email upon page changes within BookStack!
32 Alongside this you can also be notified upon new comments to pages.
33 To provide some high-level user control, there's a new "Notification Preferences"
34 view which can be accessed via the "Preferences" option in the header bar user 
35 dropdown:
36
37 ![A view in BookStack titled "Notification Preferences", with three option checkbox. The "Preferences" option is also shown in the top-left header bar user menu](/images/2023/08/notification_preferences.png)
38
39 Within here are three new user preferences:
40
41 - Notify upon changes to pages I own
42 - Notify upon comments on pages I own
43 - Notify upon replies to my comments
44
45 These options represent global defaults for notifications.
46 Upon those options, the "Notification Preferences" view also lists all the items you're
47 watching or ignoring. Watching or ignoring allows content-specific control of notifications
48 that may work in addition to, or override, your global notification preferences.
49 You can watch any book, chapter or page via the new "Watch" action:
50
51 ![A view of the actions for a page in BookStack, focused on a "Watch" action with eye icon](/images/2023/08/watch_action.png)
52
53 By default this will watch for both new pages and page changes. This can be changed
54 via the watch options menu, found by selecting the watch status in the details:
55
56 <img width="420" src="/images/2023/08/watch_options.png" alt='A view within the details for a page in BookStack, showing various options for watching the page, including "Ignore", "All Page Updates" and "All Page Updates & Comments"'>
57
58 This provides various different levels of watching of content, in addition to the ability
59 to ignore any notification events if things are getting too noisy within a particular book,
60 chapter or page.
61
62 Like much other functionality, watch preferences cascade from books to chapters to pages unless
63 those have their own watch preferences set to override the parent watch status.
64 When a page or chapter has active watch preferences from a parent item, this will be reflected
65 in the details of that item:
66
67 ![A view within the details for a page in BookStack, highlight an eye icon next to the text "Watching via parent book"](/images/2023/08/watch_parent_detail.png)
68
69 Notifications are sent upon relevant activity, and will include a few details
70 in addition to a link to the relevant content:
71
72 ![Screenshot of a notification email for a comment, including page name, commenter name and comment text, along with a linked CTA button to view the comment](/images/2023/08/comment_notification_example.png)
73
74 Page update notifications are somewhat debounced, meaning that the system will avoid
75 sending notifications if re-updated by the same author within a time window. This is
76 to prevent an attack of emails from an enthusiastically updating author.
77
78 The ability to receive and manage notifications is handled via a new role permission.
79 For a stable upgrade path, this permission will only be provided to the default
80 "Admin" user role upon upgrade, so you'll need to assign it to other roles where desired:
81
82 ![A view of the "System Permissions" part of the BookStack role edit form, highlighting the new "Receive & manage notifications" option](/images/2023/08/receive_notifications_role_permission.png)
83
84 An important consideration of this system is performance. Having to send out emails
85 upon certain common actions does require extra time, making these actions slow.
86 It is however possible for emails to be sent asynchronously to avoid significant
87 added delay with a little extra setup. Consult our ["Async Action Handling" Email & Webhooks](/docs/admin/email-webhooks/#async-action-handling) documentation for guidance on this.
88
89
90 ### Drawing Save Safety Net
91
92 When editing or creating a drawing within BookStack, via the diagrams.net integration, 
93 BookStack will wait until you save the drawing before then uploading the drawing data
94 to the system for storage. This process works in most cases but, from the drawing start
95 time to the point of save, various things can change or go wrong resulting in the drawing
96 failing to save. As an example, going offline or your user login session timing out could
97 result in a lost drawing. This could be especially frustrating where hours have been spent
98 on a drawing.
99
100 To help avoid the frustration of lost drawing effort, we've added a safety net to the save
101 process. Now when drawings are saved, they'll first be saved into the browser before 
102 they're sent back to BookStack. If they then save on the BookStack server-side successfully,
103 the browser version will be cleared. If the save process fails, the browser stored image will
104 remain and you'll get a prompt when you next try to edit/create a drawing:
105
106 ![A popup prompt in BookStack titled "Unsaved Drawing Found", asking if we'd like to restore and edit a found unsaved drawing](/images/2023/08/unsaved_drawing_prompt.png)
107
108 You can confirm via this prompt to then restore the browser-saved image into diagrams.net
109 for continued editing and re-attempt of saving.
110
111 ### API - Set Page/Chapter Ordering in Books
112
113 The sort ordering of pages and chapters within a book can now be managed
114 via the API. This functionality comes through the addition of a new `priority` parameter
115 available on create & update requests for pages & chapters. As an example:
116
117 ```http
118 PUT https://bookstack.example.com/api/chapters/15
119 Content-Type: application/json
120 Authorization: Token {{token_id}}:{{token_secret}}
121
122 {
123   "priority": 22
124 }
125 ```
126
127 Items within a book or chapter are shown from lowest priority number to largest.
128
129 Thanks to [@rouet on GitHub](https://github.com/BookStackApp/BookStack/pull/4313) for providing
130 the pull request to add this functionality.
131
132 ### Server Side Request Allow List
133
134 As mentioned in the upgrade notices, is was reported that webhooks could be used maliciously as a server-side-request
135 means to potentially hit unexpected or private endpoints from the BookStack instance system.
136 This is usually not a concern, but there could be scenarios where an instance is hosted for admins that are untrusted, within a usually private environment.
137
138 To help with such cases, a new `ALLOWED_SSR_HOSTS` option has been added as a form of allow-list for use in functionality like webhooks:
139
140 ```bash
141 ALLOWED_SSR_HOSTS="https://*.example.com https://example.org/bookstack/"
142 ```
143
144 This defaults to `ALLOWED_SSR_HOSTS="*"` to allow all hosts by default, to prevent breaking webhooks for existing users, and since this only a mild concern in specific environments due to the permissions required and the limits of exploitation in those environments.
145
146 Thanks to [morioka12 on huntr.dev](https://huntr.dev/users/scgajge12) ([@scgajge12 on Twitter](https://twitter.com/scgajge12)) for reporting this vulnerability via huntr.dev.
147
148 For more detail on the new option, see the ["Server Side Request Allow List" section in our security docs](/docs/admin/security/#server-side-request-allow-list).
149
150 ### Translations
151
152 TODO
153
154 - User - *Language*
155
156 ### Next Steps
157
158 While spending time of the features of this release, I noticed some of the UI and views are becoming a
159 little untidy, to a point where it now might be confusing to understand where certain options may exist,
160 especially when it comes to user options and preferences.
161 I want to spend a release cycle focused on cleaning up rough edges and existing bug reports, just to ensure
162 the platform remains at a good level of polish and the user experience remains intuitive.
163
164 Looking a little further forward into the future,
165 I've been thinking about aligning a few inputs where some formatting may be desired,
166 but not at the level of a full-blown page editor. As an example, comments can actually accept markdown input
167 for formatting but this is not clear nor intuitive to most users. There have also been requests for slightly more formatting
168 in descriptions for books, chapters and shelves. Therefore I envision setting up a simplified WYSIWYG editor across these inputs.
169 I just need to be sure we do that in a way that works with existing functionality and doesn't
170  cause too many forward compatibility issues.
171
172 ### Other Updates
173
174 In regards to other goings on in the project over the last month, 
175 In July we reached the 8 year mark for the project. You can find
176 a lot more about that [in my post here](/blog/8-years-of-bookstack/) where
177 I dig into the figures and finances, and reflect on the project reach.
178
179 On the video side of things, I've set-up a PeerTube instance as a YouTube
180 alternative for our video content. I wrote about this in detail in
181 [my blogpost here](/blog/bookstack-on-foss-video/).
182 On the instance you can find the new videos I've published since last
183 release:
184
185 - [More Power User Features in BookStack](https://foss.video/w/b4aTq3YzsTVjdEFBQtuHgZ)
186 - [Installing BookStack on Debian 12 (Bookworm) with HTTPS](https://foss.video/w/mUKH26XNcYwxkF7VzupQAa)
187 - [Tea Break: 8 Years of BookStack, LLM Connection Demo & Video Hosting](https://foss.video/w/mB67n8JBBHb9mSMYUM5DED)
188
189 As one last thing, I've been a long term viewer of the Linus Tech Tips YouTube channel and, although they've been going
190 through some problems & controversy lately, it was pretty cool to see them using BookStack, in their ["Here's the plan." video](https://youtu.be/qAE5KoyFEUo?si=WdaqNUH77Fg9AMeM&t=231) (About 3:51), as a tool to improve/define their processes.
191
192 ### Full List of Changes
193
194 **Released in v23.08**
195
196 * Added content notification system. ([#4390](https://github.com/BookStackApp/BookStack/pull/4390), [#4371](https://github.com/BookStackApp/BookStack/issues/4371), [#241](https://github.com/BookStackApp/BookStack/issues/241))
197 * Added browser-based drawing backup storage mechanism. ([#4457](https://github.com/BookStackApp/BookStack/pull/4457), [#4421](https://github.com/BookStackApp/BookStack/issues/4421))
198 * Added order/priority control within books via the API. Thanks to [@rouet](https://github.com/BookStackApp/BookStack/pull/4313). ([#4313](https://github.com/BookStackApp/BookStack/pull/4313), [#4298](https://github.com/BookStackApp/BookStack/issues/4298))
199 * Added host allow list option for server side requests like webhooks. ([#4410](https://github.com/BookStackApp/BookStack/issues/4410))
200 * Added additional comment-specific activities. ([#4389](https://github.com/BookStackApp/BookStack/pull/4389))
201 * Updated translations with latest Crowdin changes. ([#4380](https://github.com/BookStackApp/BookStack/pull/4380))
202 * Fixed API docs caching failure when using DB cache driver. ([#4453](https://github.com/BookStackApp/BookStack/issues/4453))
203 * Fixed overly wide page view when using an RTL language. ([#4429](https://github.com/BookStackApp/BookStack/issues/4429))
204 * Fixed status cache check to work better for simultaneous requests. ([#4396](https://github.com/BookStackApp/BookStack/issues/4396))
205
206 **Released in v23.06.2**
207
208 * Re-added shelf create permissions, now include a note to indicate permission usage. ([#4375](https://github.com/BookStackApp/BookStack/issues/4375))
209 * Fixed issue causing some delete-based action webhooks to create not-found errors. ([#4373](https://github.com/BookStackApp/BookStack/issues/4373))
210 * Updated translations with latest Crowdin changes. ([#4367](https://github.com/BookStackApp/BookStack/pull/4367))
211
212 **Released in v23.06.1**
213
214 * Updated MAIL_ENCRYPTION usage due to incorrectly forcing initial TLS usage. ([#4358](https://github.com/BookStackApp/BookStack/issues/4358))
215 * Updated translations with latest Crowdin changes. ([#4352](https://github.com/BookStackApp/BookStack/pull/4352))
216 * Fixed image updated timestamp not updating when gallery images are replaced. ([#4354](https://github.com/BookStackApp/BookStack/issues/4354))
217 * Fixed sort options breaking roles page load. ([#4350](https://github.com/BookStackApp/BookStack/issues/4350))
218 * Fixed IPv6 addresses in audit log spilling into date column. ([#4349](https://github.com/BookStackApp/BookStack/issues/4349))
219 * Fixed many inaccuracies in API example responses. Thanks to [@devdot](https://github.com/BookStackApp/BookStack/pull/4344). ([#4344](https://github.com/BookStackApp/BookStack/pull/4344))
220
221 ----
222
223 <span style="font-size: 0.8em;opacity:0.9;">Header Image Credits: <span>Photo by <a href="https://danb.me">Dan Brown</a></span></span>