dashboard: refactor dashboard to use User model instead of direct config access and cut some code in the process.
We might consider adding a Json fieldtype as well to handle the [de]serialisation of the data, but since this is currently the only occurrence in the User class, let's keep this in the controller for now.
themes: add "opnsense-auto" which switches between "opnsense" and "opnsense-dark" depending browser settings, inspired by https://github.com/opnsense/core/pull/9916
It's a bit of an experiment, but since its so small, it shouldn't be an issue to push this to master.
The trick is actually pretty simple, symlink the relevant directories in build to the standard opnsense theme and add a theme.js override to handle the logic.
mvc: a bit of spring cleaning for setActionHook(), result is never used and throwing a UserException is preferred in cases where can't pin a message to a field. closes https://github.com/opnsense/core/pull/10046
radvd: match radvd_enable() more closely for #10044
Users are confused why they can add an entry but their settings are not
being used. This is specifically wrong according to the inventor of
"dhcpd6track6allowoverride" as it circumvents half of its use cases but
more closely matches user expectation.
May cause regression for some people, but not much we can do here other
than not doing it.
Firewall: Remove tokenizer from categories and use selectpicker instead (#10049)
The issue with the tokenizer is the limit of items that is set to 10 per default, which does not always display all items. And you can increase it, but that also needs CSS changes. Additionally the tokenizer is not maintained anymore, and needs replacement. Cutting it out here decreases the need to clean this up later.
The fix here is that now all categories will be displayed and are searchable via the normal selectpicker search field.
kea: move pool-in-subnet validation logic mostly to KeaPoolsField; closes #10040
While here use getValues() consistently and move the trim() calls to the
latest point in time to avoid generalized trimming of input (the subnet
notation isn't allowed to be trimmed).
An alternative would have been to allow " ?- ?" as a split-regex since the
trim() itself will allow the leading an trailing whitespaces of the pool line,
too.
Suggested by: @Astranox