It is not immediately obvious how to avoid the error handler making a
different 404 response when the application code returns an explicit 404
page. Since we were already replying "Resource not found" in all cases
except one where we reply "File not found" not much is lost by relying
on the error handler behavior.
The repo scripts are installed in 'share' as examples.
Reviewed-on: https://git.robur.io/robur/builder-web/pulls/123
Co-authored-by: Reynir Björnsson <reynir@reynir.dk>
Co-committed-by: Reynir Björnsson <reynir@reynir.dk>
* Do not depend on the uuid representation in Builder_db.Rep; instead
copy the custom caqti type so the migration doesn't break if
Builder_db.Rep changes
* We don't need to recreate any indices since we don't change the
schema: The uuid column was erroneously VARCHAR(36) before as well(!)
- Dream.path is deprecated. For now the deprecation is suppressed.
- Remove unused dream_svg.
- Remove datadir global. The datadir variable is in scope already, and
global variables were removed in alpha3.
- Dream_tar.tar_response: flush before closing. It's unclear if this is
necessary.
- Change Builder_web.add_routes to Builder_web.routes returning a list
of routes, and in Builder_web_app construct the router.
- Builder_web.not_found is removed due to changes in Dream.router. It
seems an error handler might be the way forward.
This PR solves the issue of there being both "<url>/" and "<url>" paths, that in the builder-web context shouldn't mean different things.
The slashes are now removed using a `Dream` middleware, and the request is redirected using a permanent redirect (that doesn't change the method used): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location
Notable changes:
* Trailing slashes from the hardcoded link urls were removed, as unneccesary redirects are then avoided.
* All links in `Views` were rewritten to be absolute instead of relative.
* As `Dream` deprecated `path` - `Utils.Path` was created containing some helpers for manipulating paths. *Note that `String.split_on_char` has a different semantics.*
* A blacklist `routeprefix_blacklist_when_removing_trailing_slash` was added, containing `Dream` route-prefixes to ignore.
* Only `GET` and `HEAD` requests are redirected.
* `redirect_parent` helper was rewritten using new `Utils.Path` functions to avoid brittle string manipulation + fixed the edgecase of redirecting to `/`.
* Added `Uri` dependency to make URL manipulation safer.
Co-authored-by: rand00 <oth.rand@gmail.com>
Co-authored-by: Reynir Björnsson <reynir@reynir.dk>
Reviewed-on: https://git.robur.io/robur/builder-web/pulls/80
Co-authored-by: rand <rand@r7p5.earth>
Co-committed-by: rand <rand@r7p5.earth>