2021-03-27 21:06:42 +00:00
|
|
|
import "../elements/messages/MessageContainer";
|
2021-06-13 17:54:27 +00:00
|
|
|
import { css, CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
|
2021-03-08 10:14:00 +00:00
|
|
|
import { me } from "../api/Users";
|
2021-03-01 09:32:25 +00:00
|
|
|
import { ID_REGEX, SLUG_REGEX, UUID_REGEX } from "../elements/router/Route";
|
2021-04-03 17:07:11 +00:00
|
|
|
import "./locale";
|
2021-05-05 17:14:37 +00:00
|
|
|
import "../elements/sidebar/SidebarItem";
|
2021-04-03 17:59:22 +00:00
|
|
|
import { t } from "@lingui/macro";
|
2021-06-13 17:54:27 +00:00
|
|
|
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
|
|
|
import PFPage from "@patternfly/patternfly/components/Page/page.css";
|
|
|
|
import PFButton from "@patternfly/patternfly/components/Button/button.css";
|
|
|
|
import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css";
|
|
|
|
|
|
|
|
import "../elements/router/RouterOutlet";
|
|
|
|
import "../elements/messages/MessageContainer";
|
|
|
|
import "../elements/notifications/NotificationDrawer";
|
|
|
|
import "../elements/sidebar/Sidebar";
|
|
|
|
import { until } from "lit-html/directives/until";
|
|
|
|
import { EVENT_NOTIFICATION_TOGGLE, EVENT_SIDEBAR_TOGGLE, VERSION } from "../constants";
|
|
|
|
import { AdminApi } from "authentik-api";
|
|
|
|
import { DEFAULT_CONFIG } from "../api/Config";
|
|
|
|
|
2020-12-02 12:56:26 +00:00
|
|
|
|
2020-12-05 21:08:42 +00:00
|
|
|
@customElement("ak-interface-admin")
|
2021-06-13 17:54:27 +00:00
|
|
|
export class AdminInterface extends LitElement {
|
|
|
|
|
|
|
|
@property({type: Boolean})
|
|
|
|
sidebarOpen = true;
|
|
|
|
|
|
|
|
@property({type: Boolean})
|
|
|
|
notificationOpen = false;
|
|
|
|
|
|
|
|
static get styles(): CSSResult[] {
|
|
|
|
return [PFBase, PFPage, PFButton, PFDrawer, css`
|
|
|
|
.pf-c-page__main, .pf-c-drawer__content, .pf-c-page__drawer {
|
|
|
|
z-index: auto !important;
|
|
|
|
}
|
|
|
|
`];
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
this.sidebarOpen = window.innerWidth >= 1280;
|
|
|
|
window.addEventListener("resize", () => {
|
|
|
|
this.sidebarOpen = window.innerWidth >= 1280;
|
|
|
|
});
|
|
|
|
window.addEventListener(EVENT_SIDEBAR_TOGGLE, () => {
|
|
|
|
this.sidebarOpen = !this.sidebarOpen;
|
|
|
|
});
|
|
|
|
window.addEventListener(EVENT_NOTIFICATION_TOGGLE, () => {
|
|
|
|
this.notificationOpen = !this.notificationOpen;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
render(): TemplateResult {
|
|
|
|
return html`
|
|
|
|
<div class="pf-c-page">
|
|
|
|
<ak-sidebar class="pf-c-page__sidebar ${this.sidebarOpen ? "pf-m-expanded" : "pf-m-collapsed"}">
|
|
|
|
${this.renderSidebarItems()}
|
|
|
|
</ak-sidebar>
|
|
|
|
<div class="pf-c-page__drawer">
|
|
|
|
<div class="pf-c-drawer ${this.notificationOpen ? "pf-m-expanded" : "pf-m-collapsed"}">
|
|
|
|
<div class="pf-c-drawer__main">
|
|
|
|
<div class="pf-c-drawer__content">
|
|
|
|
<div class="pf-c-drawer__body">
|
|
|
|
<main class="pf-c-page__main">
|
|
|
|
<ak-router-outlet role="main" class="pf-c-page__main" tabindex="-1" id="main-content" defaultUrl="/library">
|
|
|
|
</ak-router-outlet>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<ak-notification-drawer class="pf-c-drawer__panel pf-m-width-33">
|
|
|
|
</ak-notification-drawer>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>`;
|
|
|
|
}
|
2020-12-02 12:56:26 +00:00
|
|
|
|
2021-05-05 17:14:37 +00:00
|
|
|
renderSidebarItems(): TemplateResult {
|
|
|
|
const superUserCondition = () => {
|
|
|
|
return me().then(u => u.user.isSuperuser || false);
|
|
|
|
};
|
|
|
|
return html`
|
2021-06-13 20:55:41 +00:00
|
|
|
${until(new AdminApi(DEFAULT_CONFIG).adminVersionRetrieve().then(version => {
|
|
|
|
if (version.versionCurrent !== VERSION) {
|
|
|
|
return html`<ak-sidebar-item ?highlight=${true}>
|
|
|
|
<span slot="label">${t`A newer version of the frontend is available.`}</span>
|
|
|
|
</ak-sidebar-item>`;
|
|
|
|
}
|
|
|
|
return html``;
|
|
|
|
}))}
|
|
|
|
${until(me().then((u) => {
|
|
|
|
if (u.original) {
|
|
|
|
return html`<ak-sidebar-item ?highlight=${true} ?isAbsoluteLink=${true} path=${`/-/impersonation/end/?back=${window.location.pathname}%23${window.location.hash}`}>
|
|
|
|
<span slot="label">${t`You're currently impersonating ${u.user.username}. Click to stop.`}</span>
|
|
|
|
</ak-sidebar-item>`;
|
|
|
|
}
|
|
|
|
return html``;
|
|
|
|
}))}
|
2021-05-05 17:14:37 +00:00
|
|
|
<ak-sidebar-item path="/library">
|
|
|
|
<span slot="label">${t`Library`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Monitor`}</span>
|
|
|
|
<ak-sidebar-item path="/administration/overview">
|
|
|
|
<span slot="label">${t`Overview`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/administration/system-tasks">
|
|
|
|
<span slot="label">${t`System Tasks`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Resources`}</span>
|
|
|
|
<ak-sidebar-item path="/core/applications" .activeWhen=${[`^/core/applications/(?<slug>${SLUG_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Applications`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/core/sources" .activeWhen=${[`^/core/sources/(?<slug>${SLUG_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Sources`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/core/providers" .activeWhen=${[`^/core/providers/(?<id>${ID_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Providers`}</span>
|
|
|
|
</ak-sidebar-item>
|
2021-05-29 16:47:00 +00:00
|
|
|
<ak-sidebar-item path="/core/tenants">
|
|
|
|
<span slot="label">${t`Tenants`}</span>
|
|
|
|
</ak-sidebar-item>
|
2021-05-05 17:14:37 +00:00
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Outposts`}</span>
|
|
|
|
<ak-sidebar-item path="/outpost/outposts">
|
|
|
|
<span slot="label">${t`Outposts`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/outpost/service-connections">
|
|
|
|
<span slot="label">${t`Service Connections`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Events`}</span>
|
|
|
|
<ak-sidebar-item path="/events/log" .activeWhen=${[`^/events/log/(?<id>${UUID_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Logs`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/events/rules">
|
|
|
|
<span slot="label">${t`Notification Rules`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/events/transports">
|
|
|
|
<span slot="label">${t`Notification Transports`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Customisation`}</span>
|
|
|
|
<ak-sidebar-item path="/policy/policies">
|
|
|
|
<span slot="label">${t`Policies`}</span>
|
|
|
|
</ak-sidebar-item>
|
2021-05-29 21:01:45 +00:00
|
|
|
<ak-sidebar-item path="/policy/reputation/ip">
|
|
|
|
<span slot="label">${t`Reputation policy - IPs`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/policy/reputation/user">
|
|
|
|
<span slot="label">${t`Reputation policy - Users`}</span>
|
|
|
|
</ak-sidebar-item>
|
2021-05-05 17:14:37 +00:00
|
|
|
<ak-sidebar-item path="/core/property-mappings">
|
|
|
|
<span slot="label">${t`Property Mappings`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Flows`}</span>
|
|
|
|
<ak-sidebar-item path="/flow/flows" .activeWhen=${[`^/flow/flows/(?<slug>${SLUG_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Flows`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/flow/stages">
|
|
|
|
<span slot="label">${t`Stages`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/flow/stages/prompts">
|
|
|
|
<span slot="label">${t`Prompts`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/flow/stages/invitations">
|
|
|
|
<span slot="label">${t`Invitations`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item
|
|
|
|
.condition=${superUserCondition}>
|
|
|
|
<span slot="label">${t`Identity & Cryptography`}</span>
|
|
|
|
<ak-sidebar-item path="/identity/users" .activeWhen=${[`^/identity/users/(?<id>${ID_REGEX})$`]}>
|
|
|
|
<span slot="label">${t`Users`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/identity/groups">
|
|
|
|
<span slot="label">${t`Groups`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/crypto/certificates">
|
|
|
|
<span slot="label">${t`Certificates`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
<ak-sidebar-item path="/core/tokens">
|
|
|
|
<span slot="label">${t`Tokens`}</span>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
</ak-sidebar-item>
|
|
|
|
`;
|
2020-12-02 12:56:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|