
* web: Add InvalidationFlow to Radius Provider dialogues
## What
- Bugfix: adds the InvalidationFlow to the Radius Provider dialogues
- Repairs: `{"invalidation_flow":["This field is required."]}` message, which was *not* propagated
to the Notification.
- Nitpick: Pretties `?foo=${true}` expressions: `s/\?([^=]+)=\$\{true\}/\1/`
## Note
Yes, I know I'm going to have to do more magic when we harmonize the forms, and no, I didn't add the
Property Mappings to the wizard, and yes, I know I'm going to have pain with the *new* version of
the wizard. But this is a serious bug; you can't make Radius servers with *either* of the current
dialogues at the moment.
* This (temporary) change is needed to prevent the unit tests from failing.
\# What
\# Why
\# How
\# Designs
\# Test Steps
\# Other Notes
* Revert "This (temporary) change is needed to prevent the unit tests from failing."
This reverts commit dddde09be5
.
* web: remove Lit syntax from always true attributes
## What
Replaces instances of `?loading=${true}` and `?loading="${true}"` with `loading`
## Why
The Lit syntax is completely unnecessary when the attribute's state is constant, and it's a few
(just a few) extra CPU cycles for Lit to process that.
More to the point, it annoys me.
## How
```
$ perl -pi.bak -e 's/\?loading=\$\{true\}/loading/' $(rg -l '\?loading=\$\{true\}')
$ find . -name '*.bak' -exec rm {} \;
$ perl -pi.bak -e 's/\?loading="\$\{true\}"/loading/' $(rg -l '\?loading="\$\{true\}"')
$ find . -name '*.bak' -exec rm {} \;
```
* Prettier had opinions
* Trigger Build
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import "@goauthentik/elements/EmptyState";
|
|
|
|
import { TemplateResult, html } from "lit";
|
|
import { until } from "lit/directives/until.js";
|
|
|
|
export const SLUG_REGEX = "[-a-zA-Z0-9_]+";
|
|
export const ID_REGEX = "\\d+";
|
|
export const UUID_REGEX = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
|
|
export interface RouteArgs {
|
|
[key: string]: string;
|
|
}
|
|
|
|
export class Route {
|
|
url: RegExp;
|
|
|
|
private element?: TemplateResult;
|
|
private callback?: (args: RouteArgs) => Promise<TemplateResult>;
|
|
|
|
constructor(url: RegExp, callback?: (args: RouteArgs) => Promise<TemplateResult>) {
|
|
this.url = url;
|
|
this.callback = callback;
|
|
}
|
|
|
|
redirect(to: string, raw = false): Route {
|
|
this.callback = async () => {
|
|
console.debug(`authentik/router: redirecting ${to}`);
|
|
if (!raw) {
|
|
window.location.hash = `#${to}`;
|
|
} else {
|
|
window.location.hash = to;
|
|
}
|
|
return html``;
|
|
};
|
|
return this;
|
|
}
|
|
|
|
then(render: (args: RouteArgs) => TemplateResult): Route {
|
|
this.callback = async (args) => {
|
|
return render(args);
|
|
};
|
|
return this;
|
|
}
|
|
|
|
thenAsync(render: (args: RouteArgs) => Promise<TemplateResult>): Route {
|
|
this.callback = render;
|
|
return this;
|
|
}
|
|
|
|
render(args: RouteArgs): TemplateResult {
|
|
if (this.callback) {
|
|
return html`${until(
|
|
this.callback(args),
|
|
html`<ak-empty-state loading></ak-empty-state>`,
|
|
)}`;
|
|
}
|
|
if (this.element) {
|
|
return this.element;
|
|
}
|
|
throw new Error("Route does not have callback or element");
|
|
}
|
|
|
|
toString(): string {
|
|
return `<Route url=${this.url} callback=${this.callback ? "true" : "false"}>`;
|
|
}
|
|
}
|