This is to avoid screen readers misunderstanding the semantics of the
page - at least windows narrator immediately jumps to article tags
when reading a page on load, which doesn't happen with sections.
They also aren't articles in any meaningful sense of the word.
This had a number of knock-on effects:
- The app now accepts certain query strings to render different pages
- A few new utility functions in the frontend script
- A new root endpoint in the API to quickly determine login state
- New colors for links on light backgrounds
Hopefully this will allow screen readers to pick up on new or modified
configs after successful form submission. Set aria-atomic on articles
so they always get read out fully on change.
- removed dead code (>*:last-child)
- fixed a double offset at the beginning of configs (h3 margin)
- fixed a syntax error (; !important)
- font-size percentages seem to behave strangely in child contexts
- moved buttons to the left when configs are narrow
Reduced the amount of code by switching which element the access
denied message is added to. Switched section to aside to better
reflect their semantics. "Access denied" is now a h2 element in order
to follow heading guidelines.
Mostly renaming of HTML tags to be more in line with the semantic
standard, but also a slight restructuring so the page gets a better
heading structure and the tabbing experience becomes more in line with
other DSV sites.
Buttons now always get focus from left to right, with the main
actionable button last in the context. they also get a slightly more
obvious outline.
Added a footer containing a very minimal accessibility statement and
contact information.
CSS has been restructured to use nested selectors as far as possible
in order to make the file more readable.
A new /cron endpoint has been introduced, which triggers a cleanup routine.
The cleanup routine loops over all existing clients and deletes all that are
older than the value configured in config.ini.
Periodically calling the cron endpoint is the responsibility of the server admin.
Basically all configuration variables are set in the if block governed by
the existence of config.ini. If the file already exists, the script would
quickly run into uninitialized variables and crash. The script will now
refuse to proceed if config.ini exists.
The UserInfo endpoint is for fetching the users profile (name, email, phone number, picture, and so on). Token introspection is for inspecting the access token and determining the authorities the user has (subject (principal), entitlements, and scopes granted).
Also made a small change to the python startup handling, ensuring that
there is always a tunnel configuration file as soon as the service
successfully starts for the first time.