b0fbd576fc
* ATH-01-001: resolve path and check start before loading blueprints
This is even less of an issue since 411ef239f6
, since with that commit we only allow files that the listing returns
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-010: fix missing user filter for webauthn device
This prevents an attack that is only possible when an attacker can intercept HTTP traffic and in the case of HTTPS decrypt it.
* ATH-01-008: fix web forms not submitting correctly when pressing enter
When submitting some forms with the Enter key instead of clicking "Confirm"/etc, the form would not get submitted correctly
This would in the worst case is when setting a user's password, where the new password can end up in the URL, but the password was not actually saved to the user.
* ATH-01-004: remove env from admin system endpoint
this endpoint already required admin access, but for debugging the env variables are used very little
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-003 / ATH-01-012: disable htmlLabels in mermaid
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-005: use hmac.compare_digest for secret_key authentication
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-009: migrate impersonation to use API
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-010: rework
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-014: save authenticator validation state in flow context
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
bugfixes
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* ATH-01-012: escape quotation marks
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* add website
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* update release ntoes
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* update with all notes
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
* fix format
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
---------
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
import { EVENT_REFRESH, EVENT_THEME_CHANGE } from "@goauthentik/common/constants";
|
|
import { AKElement } from "@goauthentik/elements/Base";
|
|
import "@goauthentik/elements/EmptyState";
|
|
import mermaid, { MermaidConfig } from "mermaid";
|
|
|
|
import { CSSResult, TemplateResult, css, html } from "lit";
|
|
import { customElement, property } from "lit/decorators.js";
|
|
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
import { until } from "lit/directives/until.js";
|
|
|
|
import { UiThemeEnum } from "@goauthentik/api";
|
|
|
|
@customElement("ak-diagram")
|
|
export class Diagram extends AKElement {
|
|
@property({ attribute: false })
|
|
diagram?: string;
|
|
|
|
refreshHandler = (): void => {
|
|
if (!this.textContent) return;
|
|
this.diagram = this.textContent;
|
|
};
|
|
|
|
handlerBound = false;
|
|
|
|
static get styles(): CSSResult[] {
|
|
return [
|
|
css`
|
|
:host {
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
`,
|
|
];
|
|
}
|
|
|
|
config: MermaidConfig;
|
|
|
|
constructor() {
|
|
super();
|
|
this.config = {
|
|
// The type definition for this says number
|
|
// but the example use strings
|
|
// and numbers don't work
|
|
logLevel: "fatal" as unknown as number,
|
|
startOnLoad: false,
|
|
flowchart: {
|
|
curve: "linear",
|
|
},
|
|
htmlLabels: false,
|
|
};
|
|
mermaid.initialize(this.config);
|
|
}
|
|
|
|
firstUpdated(): void {
|
|
if (this.handlerBound) return;
|
|
window.addEventListener(EVENT_REFRESH, this.refreshHandler);
|
|
this.addEventListener(EVENT_THEME_CHANGE, ((ev: CustomEvent<UiThemeEnum>) => {
|
|
if (ev.detail === UiThemeEnum.Dark) {
|
|
this.config.theme = "dark";
|
|
} else {
|
|
this.config.theme = "default";
|
|
}
|
|
mermaid.initialize(this.config);
|
|
}) as EventListener);
|
|
this.handlerBound = true;
|
|
this.refreshHandler();
|
|
}
|
|
|
|
disconnectedCallback(): void {
|
|
super.disconnectedCallback();
|
|
window.removeEventListener(EVENT_REFRESH, this.refreshHandler);
|
|
}
|
|
|
|
render(): TemplateResult {
|
|
this.querySelectorAll("*").forEach((el) => {
|
|
try {
|
|
el.remove();
|
|
} catch {
|
|
console.debug(`authentik/diagram: failed to remove element ${el}`);
|
|
}
|
|
});
|
|
if (!this.diagram) {
|
|
return html`<ak-empty-state ?loading=${true}></ak-empty-state>`;
|
|
}
|
|
return html`${until(
|
|
mermaid.render("graph", this.diagram).then((r) => {
|
|
r.bindFunctions?.(this.shadowRoot as unknown as Element);
|
|
return unsafeHTML(r.svg);
|
|
}),
|
|
)}`;
|
|
}
|
|
}
|