Login attempts redirect to /wiki/domain.tld, 400 error when I check "Remember me" #1476

Closed
opened 2026-02-05 01:00:37 +03:00 by OVERLORD · 11 comments
Owner

Originally created by @AlphaJack on GitHub (Dec 14, 2019).

The bug

Since yesterday I can't login anymore in BookStack, even if there are three valid accounts under the BookStackDB/users table. I've used the same MySQL credentials of the .env file to manually check the database. When I fail to login, I get redirected to https://domain.tld/wiki/domain.tld (I should stay on the login page).
If I change the APP_URL variable to https://192.168.1.130:8558, the failed login attempt stays to the login page and displays the red error "These credentials do not match our records."

It was all working correctly until yesterday, what can I do?
Is there a way to disable the email confirmation without logging in? What should I change to not get redirected to /wiki/domain.tld?
I logged out of my account because I deleted the cookie that were returning error 400 in BookStack.

Steps To Reproduce

Steps to reproduce the behavior:

  1. Go to https://domain.tld/wiki/
  2. Click on "Log In"
  3. Enter your valid username/e-mail and password
  4. See error

Configuration

  • Exact BookStack Version: 0.27, the latest one from git pull origin release
  • PHP Version: 7.4.0-2
  • Hosting Method: nginx

Additional data

Bookstack .env settings (I did mariadb -u un -p db and entered the password to check the users table):

APP_URL=https://domain.tld/wiki # or /wiki/, the trailing slash doesn't change anything
DB_HOST=localhost
DB_DATABASE=db
DB_USERNAME=un
DB_PASSWORD=pw
APP_DEBUG=true

Nginx settings for the external server

server  {
    listen 443 ssl http2 default_server;
    [...]
    location /wiki/ {
        proxy_pass http://127.0.0.1:8558/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Referer $http_host;
        proxy_set_header Host $http_host;
        access_log /path/to/wiki.log;
    }
    [...]
}

Nginx settings for the internal server

server  {
    listen 8558;
    root /path/to/BookStack/public/;
    index index.php;
    fastcgi_buffers 64 4K;

    location /  {
        try_files $uri $uri/ /index.php?$query_string;
                }

    location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README)    {
        deny all;  
                                                                        }

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_request_buffering off;
        fastcgi_pass 127.0.0.1:9000;
                            }

    location ~* \.(jpg|jpeg|gif|png|css|ico)$  {
        expires           30d;
        access_log        off;
        log_not_found     off;
                                                }

    location /wiki/ {
        alias /path/to/BookStack/public/;
        try_files $uri $uri/ @wiki;
                    }

    location @wiki  {
            rewrite /wiki/(.*)$ /wiki/index.php?/ last;
                    }

            gzip on;
            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 4;
            gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;    
} 

Bookstack access logs:

192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/ HTTP/2.0" 200 5106 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/dist/styles.css?version=v0.27.5 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/dist/print-styles.css?version=v0.27.5 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/system/2019-12/logo.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/user/2019-09/thumbs-30-30/user.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/user/2019-09/thumbs-30-30/user2.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:28 +0100] "GET /wiki/login HTTP/2.0" 200 2912 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:32 +0100] "POST /wiki/login HTTP/2.0" 302 396 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
192.168.1.101 - - [14/Dec/2019:11:56:33 +0100] "GET /wiki/domain.tld HTTP/2.0" 404 4742 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"

Nginx access logs:

127.0.0.1 - - [14/Dec/2019:11:56:28 +0100] "GET /login HTTP/1.0" 200 9771 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
127.0.0.1 - - [14/Dec/2019:11:56:32 +0100] "POST /login HTTP/1.0" 302 396 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
127.0.0.1 - - [14/Dec/2019:11:56:33 +0100] "GET /domain.tld HTTP/1.0" 404 26260 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0"
Originally created by @AlphaJack on GitHub (Dec 14, 2019). ### The bug Since yesterday I can't login anymore in BookStack, even if there are three valid accounts under the BookStackDB/users table. I've used the same MySQL credentials of the .env file to manually check the database. When I fail to login, I get redirected to https://domain.tld/wiki/domain.tld (I should stay on the login page). If I change the APP_URL variable to https://192.168.1.130:8558, the failed login attempt stays to the login page and displays the red error "These credentials do not match our records." It was all working correctly until yesterday, what can I do? Is there a way to disable the email confirmation without logging in? What should I change to not get redirected to /wiki/domain.tld? I logged out of my account because I deleted the cookie that were returning error 400 in BookStack. ### Steps To Reproduce Steps to reproduce the behavior: 1. Go to https://domain.tld/wiki/ 2. Click on "Log In" 3. Enter your valid username/e-mail and password 4. See error ### Configuration - Exact BookStack Version: 0.27, the latest one from `git pull origin release` - PHP Version: 7.4.0-2 - Hosting Method: nginx ### Additional data Bookstack .env settings (I did `mariadb -u un -p db` and entered the password to check the users table): ```ini APP_URL=https://domain.tld/wiki # or /wiki/, the trailing slash doesn't change anything DB_HOST=localhost DB_DATABASE=db DB_USERNAME=un DB_PASSWORD=pw APP_DEBUG=true ``` Nginx settings for the external server ```nginx server { listen 443 ssl http2 default_server; [...] location /wiki/ { proxy_pass http://127.0.0.1:8558/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Referer $http_host; proxy_set_header Host $http_host; access_log /path/to/wiki.log; } [...] } ``` Nginx settings for the internal server ```nginx server { listen 8558; root /path/to/BookStack/public/; index index.php; fastcgi_buffers 64 4K; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) { deny all; } location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_request_buffering off; fastcgi_pass 127.0.0.1:9000; } location ~* \.(jpg|jpeg|gif|png|css|ico)$ { expires 30d; access_log off; log_not_found off; } location /wiki/ { alias /path/to/BookStack/public/; try_files $uri $uri/ @wiki; } location @wiki { rewrite /wiki/(.*)$ /wiki/index.php?/ last; } gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 4; gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml; } ``` Bookstack access logs: ``` 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/ HTTP/2.0" 200 5106 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/dist/styles.css?version=v0.27.5 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/dist/print-styles.css?version=v0.27.5 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/system/2019-12/logo.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/user/2019-09/thumbs-30-30/user.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:23 +0100] "GET /wiki/uploads/images/user/2019-09/thumbs-30-30/user2.png HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:28 +0100] "GET /wiki/login HTTP/2.0" 200 2912 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:32 +0100] "POST /wiki/login HTTP/2.0" 302 396 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 192.168.1.101 - - [14/Dec/2019:11:56:33 +0100] "GET /wiki/domain.tld HTTP/2.0" 404 4742 "-" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" ``` Nginx access logs: ``` 127.0.0.1 - - [14/Dec/2019:11:56:28 +0100] "GET /login HTTP/1.0" 200 9771 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 127.0.0.1 - - [14/Dec/2019:11:56:32 +0100] "POST /login HTTP/1.0" 302 396 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" 127.0.0.1 - - [14/Dec/2019:11:56:33 +0100] "GET /domain.tld HTTP/1.0" 404 26260 "domain.tld" "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" ```
Author
Owner

@ssddanbrown commented on GitHub (Dec 15, 2019):

Hi @AlphaJack,
Sorry to hear you are having issues.

Just to confirm, what authentication method or you using? What is the label for the top input on the login screen? is it username or email?

There is the following command available which might help:

php artisan bookstack:create-admin

You can use this to create a new admin user to login as, to ensure you're using correct credentials to login to BookStack, since you cannot be sure of user credentials by looking at the database directly due to hashed passwords.

@ssddanbrown commented on GitHub (Dec 15, 2019): Hi @AlphaJack, Sorry to hear you are having issues. Just to confirm, what authentication method or you using? What is the label for the top input on the login screen? is it username or email? There is the following command available which might help: ```shell php artisan bookstack:create-admin ``` You can use this to create a new admin user to login as, to ensure you're using correct credentials to login to BookStack, since you cannot be sure of user credentials by looking at the database directly due to hashed passwords.
Author
Owner

@AlphaJack commented on GitHub (Dec 15, 2019):

Thank you, creating another admin allowed me to revert the email requirement and reset our passwords.
However, why does it redirects failed login attempts to that specific url, instead of staying in the login page?
Is there any log I can read? It would also useful to debug my other issue, #1813


EDIT: BookStack is giving me a 400 error because it creates a cookie like

eyJpdiI6IjRwVUs3dHpoZVhEMEZZZTFEZE40Mmc9PSIsInZhbHVlIjoiWW5BUkxRU1I5cjAxRThPbUtTQ1NFM211TWZDZmFjTERNK0VjMlFyVkRvTDczMm1CTEM0djZxVmRBSEZaWmNveSIsIm1hYyI6Ijc0MjY0NjE1YmI5ZDU4NWYzY2U2NWU4MDY2Mjc3MDRiMWQwZWQ1YzQzNWY5OWY3ZDFjMGEyNzQwOGM3NWI5NjUifQ%3D%32

If I delete the cookie, It won't load the stylesheets, and when I click on them manually it returns another 400 error

@AlphaJack commented on GitHub (Dec 15, 2019): Thank you, creating another admin allowed me to revert the email requirement and reset our passwords. However, why does it redirects failed login attempts to that specific url, instead of staying in the login page? Is there any log I can read? It would also useful to debug my other issue, #1813 --- EDIT: BookStack is giving me a 400 error because it creates a cookie like ``` eyJpdiI6IjRwVUs3dHpoZVhEMEZZZTFEZE40Mmc9PSIsInZhbHVlIjoiWW5BUkxRU1I5cjAxRThPbUtTQ1NFM211TWZDZmFjTERNK0VjMlFyVkRvTDczMm1CTEM0djZxVmRBSEZaWmNveSIsIm1hYyI6Ijc0MjY0NjE1YmI5ZDU4NWYzY2U2NWU4MDY2Mjc3MDRiMWQwZWQ1YzQzNWY5OWY3ZDFjMGEyNzQwOGM3NWI5NjUifQ%3D%32 ``` If I delete the cookie, It won't load the stylesheets, and when I click on them manually it returns another 400 error
Author
Owner

@ssddanbrown commented on GitHub (Dec 16, 2019):

However, why does it redirects failed login attempts to that specific url, instead of staying in the login page?

I'm not sure, Things get complicated when proxied with a few re-writes like this. I'm guessing one of the rewrites or proxy since you say that doesn't occur when accessing the IP directly without the sub-path?

Is there any log I can read?

Probably not on the BookStack side since no error is actually being thrown.

It would also useful to debug my other issue, #1813

For that one, are you using your sendgrid username of a username of apikey?

BookStack is giving me a 400 error because it creates a cookie like

Is BookStack explicitly stating the error is from that cookie value? When does this cookie issue occur?

@ssddanbrown commented on GitHub (Dec 16, 2019): > However, why does it redirects failed login attempts to that specific url, instead of staying in the login page? I'm not sure, Things get complicated when proxied with a few re-writes like this. I'm guessing one of the rewrites or proxy since you say that doesn't occur when accessing the IP directly without the sub-path? > Is there any log I can read? Probably not on the BookStack side since no error is actually being thrown. > It would also useful to debug my other issue, #1813 For that one, are you using your sendgrid username of a username of `apikey`? > BookStack is giving me a 400 error because it creates a cookie like Is BookStack explicitly stating the error is from that cookie value? When does this cookie issue occur?
Author
Owner

@AlphaJack commented on GitHub (Dec 16, 2019):

Probably not on the BookStack side since no error is actually being thrown.

Ok, but is there a log that I can use to prevent bruteforcing access?

For that one, are you using your sendgrid username or a username of apikey?

Username/password, but I've just tried using an api key and if I try

  • to register I get the red error of #1813
  • to restore a password I get, with APP_DEBUG=false,
An Error Occurred
An unknown error occurred

and a page with
BookStack/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php

 ErrorException (E_NOTICE)
Trying to access array offset on value of type null

if I set APP_DEBUG=true.
The same error appears using username/password as well

Is BookStack explicitly stating the error is from that cookie value? When does this cookie issue occur?

No, the error comes from Nginx. It's strange because I have explicitly told Nginx to use a custom html page for error 400. 404 errors are instead handled by BookStack. Another fun fact is that using Tor browser I don't get any 400 error.
EDIT: There was probably another cookie that caused the error, I'll report it here if I get the error again
EDIT2: The problem seems to be remember_web_XXXXXX, that appears when someone checks the "Remember Me" option in the login page

@AlphaJack commented on GitHub (Dec 16, 2019): > Probably not on the BookStack side since no error is actually being thrown. Ok, but is there a log that I can use to prevent bruteforcing access? > For that one, are you using your sendgrid username or a username of `apikey`? Username/password, but I've just tried using an api key and if I try - to register I get the red error of #1813 - to restore a password I get, with `APP_DEBUG=false`, ``` An Error Occurred An unknown error occurred ``` and a page with `BookStack/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php` ``` ErrorException (E_NOTICE) Trying to access array offset on value of type null ``` if I set `APP_DEBUG=true`. The same error appears using username/password as well > Is BookStack explicitly stating the error is from that cookie value? When does this cookie issue occur? No, the error comes from Nginx. It's strange because I have explicitly told Nginx to use a custom html page for error 400. 404 errors are instead handled by BookStack. Another fun fact is that using Tor browser I don't get any 400 error. EDIT: There was probably another cookie that caused the error, I'll report it here if I get the error again EDIT2: The problem seems to be `remember_web_XXXXXX`, that appears when someone checks the "Remember Me" option in the login page
Author
Owner

@ssddanbrown commented on GitHub (Dec 18, 2019):

Trying to access array offset on value of type null

After playing around for a while I managed to replicate the same error. It seems this can be thrown when running the latest release on php7.4, Looks like one of the dependencies may not support php7.4 properly. I've tested by jumping between php7.3 and php7.4 on the same setup.

Could this be the thing that's changed, since you said things were working until a particular day? Did your version of PHP update recently?

To get around that particular error, You could either downgrade PHP to 7.3 until the next release or running composer update in your BookStack install directory should get more recent, php7.4 compatible versions.

@ssddanbrown commented on GitHub (Dec 18, 2019): > Trying to access array offset on value of type null After playing around for a while I managed to replicate the same error. It seems this can be thrown when running the latest release on php7.4, Looks like one of the dependencies may not support `php7.4` properly. I've tested by jumping between php7.3 and php7.4 on the same setup. Could this be the thing that's changed, since you said things were working until a particular day? Did your version of PHP update recently? To get around that particular error, You could either downgrade PHP to 7.3 until the next release or running `composer update` in your BookStack install directory should get more recent, php7.4 compatible versions.
Author
Owner

@AlphaJack commented on GitHub (Dec 19, 2019):

composer update hogs all the available RAM and tries to eat as much SWAP as it can, it makes the website unaccessible and forces the SSH connection to close because there is no memory left. Is there anything else I can do? Downgrading unfortunately is not an option with Arch ARM

@AlphaJack commented on GitHub (Dec 19, 2019): `composer update` hogs all the available RAM and tries to eat as much SWAP as it can, it makes the website unaccessible and forces the SSH connection to close because there is no memory left. Is there anything else I can do? Downgrading unfortunately is not an option with Arch ARM
Author
Owner

@ssddanbrown commented on GitHub (Dec 20, 2019):

You could composer update on an external machine then rsync the /vendor directory across?

@ssddanbrown commented on GitHub (Dec 20, 2019): You could `composer update` on an external machine then rsync the `/vendor` directory across?
Author
Owner

@alexjustesen commented on GitHub (Dec 22, 2019):

@AlphaJack when running composer it uses the ram allocations set in your php .ini file, depending how high you have your memory_limit var and your available server memory you might want to lower that limit.

If that doesn't work try limiting composer using the following command:
COMPOSER_MEMORY_LIMIT=256M php composer.phar update

I've got 256MB and seems more than enough for bookstack and composer (my server has 1G available).

Edit: included composer memory command.

@alexjustesen commented on GitHub (Dec 22, 2019): @AlphaJack when running composer it uses the ram allocations set in your php .ini file, depending how high you have your memory_limit var and your available server memory you might want to lower that limit. If that doesn't work try limiting composer using the following command: `COMPOSER_MEMORY_LIMIT=256M php composer.phar update` I've got 256MB and seems more than enough for bookstack and composer (my server has 1G available). Edit: included composer memory command.
Author
Owner

@AlphaJack commented on GitHub (Jan 20, 2020):

@ssddanbrown Thank you, I've fixed #1813 with composer install and composer update in my computer, and rsyncing the whole BookStack folder to the server and importing the "uploads" directories from the backup folder.
I'll write again if the 400 error appears again.
A failed login attempt still redirects to /wiki/domain.tld, but it's a minor issue now.

@AlphaJack commented on GitHub (Jan 20, 2020): @ssddanbrown Thank you, I've fixed #1813 with `composer install` and `composer update` in my computer, and rsyncing the whole BookStack folder to the server and importing the "uploads" directories from the backup folder. I'll write again if the 400 error appears again. A failed login attempt still redirects to [/wiki/domain.tld](), but it's a minor issue now.
Author
Owner

@AlphaJack commented on GitHub (May 31, 2020):

@ssddanbrown I've updated BookStack to the latest version (0.29.3), but I'm still getting the 400 error if I check the "Remember me" box on login. The cookie is 393 characters long.

Also, even correct login attempts from /wiki/login redirects to /wiki/domain.tld. The same thing happens when toggling the light or dark mode.

@AlphaJack commented on GitHub (May 31, 2020): @ssddanbrown I've updated BookStack to the latest version (0.29.3), but I'm still getting the 400 error if I check the "Remember me" box on login. The cookie is 393 characters long. Also, even correct login attempts from [/wiki/login]() redirects to [/wiki/domain.tld](). The same thing happens when toggling the light or dark mode.
Author
Owner

@AlphaJack commented on GitHub (Aug 6, 2020):

I've fixed 400 error by increasing these NginX settings:

client_body_buffer_size 32k;
client_header_buffer_size 8k;
large_client_header_buffers 4 32k;

Source

A workaround for login redirects is adding this 301 redirect

location /wiki/ {
  # /wiki/
  # location
  # settings
 location /wiki/domain.tld {
  return 301 https://domain.tld/wiki/;
 }
}
@AlphaJack commented on GitHub (Aug 6, 2020): I've fixed 400 error by increasing these NginX settings: ```nginx client_body_buffer_size 32k; client_header_buffer_size 8k; large_client_header_buffers 4 32k; ``` [Source](https://github.com/laravel/framework/issues/4129#issuecomment-261685542) A workaround for login redirects is adding this 301 redirect ```nginx location /wiki/ { # /wiki/ # location # settings location /wiki/domain.tld { return 301 https://domain.tld/wiki/; } } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/BookStack#1476