* website/integrations: add docker hub
* Rename to Docker.
Seems like the best potential name
* Move to Platforms.
* Remove Useless Line
* Rename
* Rename it to something else again
* Apply suggestion from @dominic-r
Signed-off-by: Dominic Roy <dominic@goauthentik.io>
* TRIGGER CI
* Trigger Build
* idek
---------
Signed-off-by: Dominic Roy <dominic@goauthentik.io>
* web/xliff: remove legacy Transifex-named locale files
The old Transifex config named locale files with underscores
(cs_CZ.xlf, pt_BR.xlf, ...) alongside the hyphenated BCP-47 form the
current lit-localize pipeline actually reads. That config was fixed
months ago, so the underscore files are either stale duplicates of a
current kebab-case sibling or orphaned contributions for locales the
project never enabled.
Deleted 11 legacy files that already have a kebab-case equivalent in
web/xliff/. Kebab wins even where the two diverged, so 2,220 legacy-only
<trans-unit> targets get dropped along the way (fr_FR carried the bulk
at 954; the rest of the languages contribute the remaining 1,266).
Renamed 3 legacy files with no kebab counterpart and added their locale
codes to web/lit-localize.json targetLocales:
- ar_AA.xlf -> ar.xlf (AA was a bogus private-use region; landed on
the plain language code).
- bg_BG.xlf -> bg-BG.xlf.
- no_NO.xlf -> nb-NO.xlf (no is the Norwegian macrolanguage; the
translation is Bokmal, so nb is the correct language subtag).
Each renamed file also has its internal target-language attribute
updated to match its new locale code, so lit-localize keeps
recognising the existing translations instead of treating everything
as absent.
Wired the new locales into LocaleLoaderRecord in
web/src/common/ui/locale/definitions.ts so the runtime can import the
emitted modules; lit-localize regenerates web/src/locale-codes.ts to
match. locale/ (Django gettext) stays exactly as it was.
Verified with: cd web && npm run build-locales && npm run precommit.
Co-Authored-By: Agent (authentik-m-remove-legacy-intended-nominal-mahogany) <279763771+playpen-agent@users.noreply.github.com>
* locale: sync Django language codes to lit-localize (ar_AA to ar, no_NO to nb_NO)
Mirror the two locale-code changes just landed on the web/xliff side
into the Django gettext tree, in Django's ll_CC underscore form:
- locale/ar_AA -> locale/ar (drop the bogus AA private-use region;
matches web ar).
- locale/no_NO -> locale/nb_NO (Norwegian macrolanguage to Bokmal,
which is the writing system the contributed translation uses;
matches web nb-NO).
bg_BG is left alone (already equals the underscore form of the web
bg-BG), and every other Django locale directory - including zh-Hans
and zh-Hant - stays exactly as it was.
Both catalogs also had their in-file Language header updated to match
the new directory (Language: ar_AA -> ar, Language: no_NO -> nb_NO)
and the .mo binaries were recompiled via manage.py compilemessages so
runtime lookups get the correct language metadata.
No functional LANGUAGES / LANGUAGE_CODE settings referenced the old
codes: only historical Transifex team URLs in the .po Language-Team
headers and past release-notes lines mention them, and those are
metadata / audit trail rather than config.
Verified: to_locale('nb-no') -> 'nb_NO', to_locale('ar') -> 'ar', and
gettext.translation loads locale/ar/LC_MESSAGES/django.mo (1,122
entries, language=ar) and locale/nb_NO/LC_MESSAGES/django.mo (1,116
entries, language=nb_NO).
Co-Authored-By: Agent (authentik-m-remove-legacy-intended-nominal-mahogany) <279763771+playpen-agent@users.noreply.github.com>
---------
Co-authored-by: Agent (authentik-m-remove-legacy-intended-nominal-mahogany) <279763771+playpen-agent@users.noreply.github.com>
* ## What
window.authentik.flow = {
"layout": "{{ flow.layout }}",
+ "background": "{{ flow.background }}",
+ "title": "{{ flow.title }}",
};
Amends the `flow.html` template and `GlobalAuthentik` parser to include new parameters, `background` and `title`, in the flow-specific part of the configuration written to the HTML `<head>` object, and to provide those parameters to client code.
## Why
The `layout` is start-up critical: it tells the Flow interface how the admin wants the Flow page to look, and allows the HTML and CSS to be pre-aligned to that condition. `layout` is determined on a per-Flow bases, not a per-Stage basis; Flows are derived from a tuple of `(Brand, Application?)`, where the opening policy *may* direct a user to a different flow if the user reached authentik via a redirect from a specific application, but will otherwise fall back to the default Flow for the Brand.
The `background` is a field that is required if the `Flow`’s layout is of type `frame_background`; in this case, the part of the viewport not dedicated to the FlowExecutor is reserved for an `<iframe>` that will be filled in with whatever the administrator specifies. Although this gives it the same priority as `layout` (whether it’s provided or undefined) for describing the [chrome](https://developer.mozilla.org/en-US/docs/Glossary/Chrome) around a challenge, it is currently not provided to the application in the start-up config; it is provided in the `challenge` and renders the IFrame as part of the initial challenge.
This patch fixes that; if `layout` is provided, `background` ought to be as well, even if it’s empty. The execution of a Challenge ought not have any influence over the look and feel of the Flow-defined appearance *around* that Challenge.
I have added `title` as well; with that, all of the current theme-and-appearance related configuration details are placed into `<head>` and can be removed from the FlowExecutor.
Server-side, `background` is currently specified: `background = FileField(blank=True, default="")` which is … interesting since we also appear to store URLs in it. I don’t see anything in the FlowSerializer that would change that from a client’s point of view.
This patch furthers the effort to separate flow execution from flow presentation.
- \[🐰\] The code has been formatted (`make web`)
* web/bug: harmonize and make routine the display of tasks (part 1: cards)
## What
This commit:
- replaces the cut-and-paste “card” version of `ak-task-list` with a function call, `taskCard()`, that fully implements the card as a drop-in replacement.
- removes the requirement that the `ModelEnum` entry be parsed for `ak-task-list`
- moves the parse and definition of the `ModelEnum` to a const outside the object.
- In some cases, the container function was updated to take the task-related object when it was known to never be `undefined`. This removes the `?` operator from a number of places.
## Why
- While working on the details list feature, I noticed that `ak-task-list` is both implemented and used with little to no consistency. This is the first of a series of PRs to improve the consistency of `ak-task-list`. This commit isolates one of three common idioms around `ak-task-list`, the “card in an overview” idiom.
- The `ModelEnum` never changes during the lifecycle of a session, and does not need to be re-allocated with every instance. Extracting it makes sense.
- In most cases, the parse is left in-place in the existing files because `ak-schedule-list` also uses them. This has been scheduled to a future task.
- *Every* instance of `ak-task-list` (and `ak-schedule-list`) starts with the parse; this sort of repetition is a common source of bugs. Moving it to the function eliminates this source of bugs.
- Where the containing function takes a related object, these were cases where the object was known not to be `undefined`. The `?` in these functions is unnecessary, and may give future maintainers pause to wonder why it’s even there when there’s no doubt the object *is* defined.
## How to test
In every case, this is a 1:1 substitution of a large block of HTML with, well, a function that produces the same large block of HTML. The test is that there’s no visual change between implementations. Because this replaces a Lit de-reference with actual function calls, the compiler and linter will correctly identify if there has been a mis-type, unwanted substitution, or last-line effect.
* Forgot to remove the per-instance parse.
* web/bug: harmonize and make routine the display of tasks (part 2: description-list abuse)
## What
This commit:
- replaces the cut-and-paste “description list” version of `ak-task-list` with a function call, `taskCard()`, that fully implements the task list as a drop-in replacement.
- removes the requirement that the `ModelEnum` entry be parsed for `ak-task-list`
- moves the parse and definition of the `ModelEnum` to a const outside the object.
- Fixes the issue that the “Tasks” title line wasn’t the correct font weight
- Replaces a “switch/case” expression with a, you know, an actual *expression* expression
## Why
This is the same work as [harmonize display of tasks, part 1: cards](https://github.com/goauthentik/authentik/pull/23837), only for the four places where we used a description list instead of a card.
In every case, making the substitution *did not change* the visual presentation.
- I’m embarassed that I missed that: the “Task” label should be bold.
- Using `tspattern` because using statements as expressions annoys me.
## How to test
See [prior branch](https://github.com/goauthentik/authentik/pull/23837) for the same test routine.
## Example: No change in presentation
* web/bug: harmonize and make routine the display of tasks (part 3: problem children)
## What
This commit:
- replaces two more instances of `ak-task-list` with a function call, `taskCard()`, that fully implements the task list as a drop-in replacement.
- removes the requirement that the `ModelEnum` entry be parsed for `ak-task-list`
- moves the parse and definition of the `ModelEnum` to a const outside the object.
- Replaces two more “switch/case” expression with a, you know, an actual *expression* expression
## Why
This is the same work as [harmonize display of tasks, part 1: cards](https://github.com/goauthentik/authentik/pull/23837). In this case, these two looked like cut-and-paste errors (a grid of one cell nested inside a grid? Really?) and I decided to keep them separate to ensure that they got closer attention.
In both cases, making the substitution *did not change* the visual presentation.
- Using `tspattern` because using statements as expressions annoys me.
## How to test
See [prior branch](https://github.com/goauthentik/authentik/pull/23837) for the same test routine.
* Don't need to nest the card class there.
* Serious typo.
* It was wrong of me to delay this; it should have been fixed in this branch first.
* web/bug: harmonize and make routine the display of tasks (part 4: schedule-list cards)
## What
This commit:
- creates a variant of `taskCard()` for `ak-schedule-list`, calling it (predictably) `scheduleCard()`.
- replaces instances of `ak-schedule-list` with a function call, `scheduleCard()`, that fully implements the schedule list as a drop-in replacement.
- removes the requirement that the `ModelEnum` entry be parsed for `ak-schedule-list`. This will also fully remove the requirement that the parsing be done *at all* anywhere but inside these function calls. Since in all cases the `ModelEnum` declaration has already been moved to a constant, there was no need to reproduce that work.
## Why
This is the same work as [harmonize display of tasks, part 1: cards](https://github.com/goauthentik/authentik/pull/23837), only applied to its sibling, `ak-schedule-list`. In all cases, making the substitution *did not change* the visual presentation.
## How to test
See [prior branch](https://github.com/goauthentik/authentik/pull/23837) for the same test routine.
* These are imported by the template function; they aren't needed in individual files anymore.
* 'Consistency is the hobgoblin of small minds.' - Ralph Waldo Emerson
* Just trying to make life a little better.
* Just trying to make life a little better.
* web/bug: harmonize and make routine the display of tasks (part 3: problem children)
## What
This commit:
- replaces two more instances of `ak-task-list` with a function call, `taskCard()`, that fully implements the task list as a drop-in replacement.
- removes the requirement that the `ModelEnum` entry be parsed for `ak-task-list`
- moves the parse and definition of the `ModelEnum` to a const outside the object.
- Replaces two more “switch/case” expression with a, you know, an actual *expression* expression
## Why
This is the same work as [harmonize display of tasks, part 1: cards](https://github.com/goauthentik/authentik/pull/23837). In this case, these two looked like cut-and-paste errors (a grid of one cell nested inside a grid? Really?) and I decided to keep them separate to ensure that they got closer attention.
In both cases, making the substitution *did not change* the visual presentation.
- Using `tspattern` because using statements as expressions annoys me.
## How to test
See [prior branch](https://github.com/goauthentik/authentik/pull/23837) for the same test routine.
* Just trying to make life a little better.