- Make /api/v1/proprietary/ui-data/login endpoint public
- Fix enableLogin to check both config flag AND proprietary module
availability
- Add enableLogin field to login endpoint response
Frontend:
- Dynamically show/hide SSO providers based on backend configuration
- Redirect to home when login is disabled (anonymous mode)
- Suppress 401 authentication errors on auth pages
- Fix carousel image reset on input typing (memoize component)
- Remove forgot password and signup links from login page
- Conditionally render email form and dividers based on SSO
availability
Other:
- Add .dockerignore for faster Docker builds
- Configure nginx to run as non-root user
- Bump version to 2.0.0
# Description of Changes
`i18next` allows this pattern for translations, which we use quite a few
times in our current translation files:
```json
{
"a": {
"b": "hello"
},
"a.b": "world"
}
```
This makes it ambiguous when selecting `a.b` which string will be
retrieved. We have seen issues in other languages in the current release
like this:
<img width="325" height="249" alt="image"
src="https://github.com/user-attachments/assets/f24a29f0-550f-49b8-b355-c5e5eb436558"
/>
because we are expecting this:
<img width="1022" height="210" alt="image"
src="https://github.com/user-attachments/assets/b6d5cdd4-96cd-4b2b-8f1a-465da8bf70c8"
/>
but the Spanish file has:
<img width="312" height="136" alt="image"
src="https://github.com/user-attachments/assets/1e13392c-8484-47d1-b0c4-19d52b3ea5eb"
/>
and no `removeDigitalSignature` key on its own.
This PR resolves all of these ambiguities in the source by restructuring
all of the keys to uniquely target either an object or a string, not
both. It also adds a test which will fail on any keys with a `.` in
their name, therefore making it impossible to add anything ambiguous.