feat: Issue #3285819: Allow bypassing shield based on the request user agent.
Adds a "User agent allowlist" exception, so requests whose user agent contains one of the configured strings are let through the shield. The typical use case is a crawler such as facebookexternalhit that has to reach a page an SSO flow depends on, which no IP or domain allowlist can express.
Reworked from the patch in comment #2:
- Uses the generic "user agent" terminology rather than "crawler", and warns on the form that the user agent is client supplied and therefore not a security boundary.
- Reads the user agent from the request object instead of $_SERVER, so the check is testable and does not depend on the global state.
- Drops a stray reference to an undefined variable in handle() and a duplicated credential_provider assignment in the settings form.
- Adds the config schema entry, the default value and shield_update_8010() that the patch was missing, so existing sites pick the setting up.
- Adds kernel test coverage for the matching behavior and for the debug header.
Closes #3285819