web/admin: show ldap sync status on overview page
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
f0ef2eea4f
commit
d48badbca3
|
@ -21,6 +21,9 @@ export class AggregateCard extends LitElement {
|
||||||
.pf-c-card.pf-c-card-aggregate {
|
.pf-c-card.pf-c-card-aggregate {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.pf-c-card__header {
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
.center-value {
|
.center-value {
|
||||||
font-size: var(--pf-global--icon--FontSize--lg);
|
font-size: var(--pf-global--icon--FontSize--lg);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
@ -168,7 +168,7 @@ msgstr "Application's display Name."
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Applications"
|
msgstr "Applications"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:39
|
#: src/pages/admin-overview/AdminOverviewPage.ts:40
|
||||||
msgid "Apps with most usage"
|
msgid "Apps with most usage"
|
||||||
msgstr "Apps with most usage"
|
msgstr "Apps with most usage"
|
||||||
|
|
||||||
|
@ -356,11 +356,11 @@ msgstr "Build hash: {0}"
|
||||||
msgid "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
msgid "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
||||||
msgstr "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
msgstr "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:54
|
#: src/pages/admin-overview/AdminOverviewPage.ts:55
|
||||||
msgid "Cached Flows"
|
msgid "Cached Flows"
|
||||||
msgstr "Cached Flows"
|
msgstr "Cached Flows"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:52
|
#: src/pages/admin-overview/AdminOverviewPage.ts:53
|
||||||
msgid "Cached Policies"
|
msgid "Cached Policies"
|
||||||
msgstr "Cached Policies"
|
msgstr "Cached Policies"
|
||||||
|
|
||||||
|
@ -1539,6 +1539,10 @@ msgstr "Kubeconfig"
|
||||||
msgid "LDAP Source {0}"
|
msgid "LDAP Source {0}"
|
||||||
msgstr "LDAP Source {0}"
|
msgstr "LDAP Source {0}"
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCardContainer.ts:24
|
||||||
|
msgid "LDAP Sync status {0}"
|
||||||
|
msgstr "LDAP Sync status {0}"
|
||||||
|
|
||||||
#: src/pages/stages/prompt/PromptForm.ts:90
|
#: src/pages/stages/prompt/PromptForm.ts:90
|
||||||
#: src/pages/stages/prompt/PromptListPage.ts:47
|
#: src/pages/stages/prompt/PromptListPage.ts:47
|
||||||
msgid "Label"
|
msgid "Label"
|
||||||
|
@ -1661,7 +1665,7 @@ msgstr "Login to continue to {0}."
|
||||||
msgid "Logins"
|
msgid "Logins"
|
||||||
msgstr "Logins"
|
msgstr "Logins"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:36
|
#: src/pages/admin-overview/AdminOverviewPage.ts:37
|
||||||
#: src/pages/applications/ApplicationViewPage.ts:71
|
#: src/pages/applications/ApplicationViewPage.ts:71
|
||||||
msgid "Logins over the last 24 hours"
|
msgid "Logins over the last 24 hours"
|
||||||
msgstr "Logins over the last 24 hours"
|
msgstr "Logins over the last 24 hours"
|
||||||
|
@ -1922,6 +1926,10 @@ msgstr "Not found"
|
||||||
msgid "Not synced in the last hour, check System tasks."
|
msgid "Not synced in the last hour, check System tasks."
|
||||||
msgstr "Not synced in the last hour, check System tasks."
|
msgstr "Not synced in the last hour, check System tasks."
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCard.ts:28
|
||||||
|
msgid "Not synced."
|
||||||
|
msgstr "Not synced."
|
||||||
|
|
||||||
#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts:58
|
#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts:58
|
||||||
#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts:48
|
#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts:48
|
||||||
#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts:45
|
#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts:45
|
||||||
|
@ -2142,7 +2150,7 @@ msgid "Please enter your password"
|
||||||
msgstr "Please enter your password"
|
msgstr "Please enter your password"
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:26
|
#: src/interfaces/AdminInterface.ts:26
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:44
|
#: src/pages/admin-overview/AdminOverviewPage.ts:45
|
||||||
#: src/pages/flows/FlowListPage.ts:50
|
#: src/pages/flows/FlowListPage.ts:50
|
||||||
#: src/pages/policies/PolicyListPage.ts:38
|
#: src/pages/policies/PolicyListPage.ts:38
|
||||||
msgid "Policies"
|
msgid "Policies"
|
||||||
|
@ -2292,7 +2300,7 @@ msgid "Provider type"
|
||||||
msgstr "Provider type"
|
msgstr "Provider type"
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:20
|
#: src/interfaces/AdminInterface.ts:20
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:42
|
#: src/pages/admin-overview/AdminOverviewPage.ts:43
|
||||||
#: src/pages/outposts/OutpostForm.ts:82
|
#: src/pages/outposts/OutpostForm.ts:82
|
||||||
#: src/pages/outposts/OutpostListPage.ts:50
|
#: src/pages/outposts/OutpostListPage.ts:50
|
||||||
msgid "Providers"
|
msgid "Providers"
|
||||||
|
@ -3073,7 +3081,11 @@ msgstr "Sync users"
|
||||||
msgid "Sync users' passwords"
|
msgid "Sync users' passwords"
|
||||||
msgstr "Sync users' passwords"
|
msgstr "Sync users' passwords"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:31
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCard.ts:34
|
||||||
|
msgid "Synced {0}:{1}:{2}"
|
||||||
|
msgstr "Synced {0}:{1}:{2}"
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/AdminOverviewPage.ts:32
|
||||||
msgid "System Overview"
|
msgid "System Overview"
|
||||||
msgstr "System Overview"
|
msgstr "System Overview"
|
||||||
|
|
||||||
|
@ -3513,7 +3525,7 @@ msgid "Username: Same as Text input, but checks for and prevents duplicate usern
|
||||||
msgstr "Username: Same as Text input, but checks for and prevents duplicate usernames."
|
msgstr "Username: Same as Text input, but checks for and prevents duplicate usernames."
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:32
|
#: src/interfaces/AdminInterface.ts:32
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:46
|
#: src/pages/admin-overview/AdminOverviewPage.ts:47
|
||||||
#: src/pages/users/UserListPage.ts:31
|
#: src/pages/users/UserListPage.ts:31
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr "Users"
|
msgstr "Users"
|
||||||
|
@ -3546,7 +3558,7 @@ msgstr "Validity days"
|
||||||
msgid "Verification Certificate"
|
msgid "Verification Certificate"
|
||||||
msgstr "Verification Certificate"
|
msgstr "Verification Certificate"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:48
|
#: src/pages/admin-overview/AdminOverviewPage.ts:49
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "Version"
|
msgstr "Version"
|
||||||
|
|
||||||
|
@ -3646,7 +3658,7 @@ msgstr "Whoops!"
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Windows"
|
msgstr "Windows"
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:50
|
#: src/pages/admin-overview/AdminOverviewPage.ts:51
|
||||||
msgid "Workers"
|
msgid "Workers"
|
||||||
msgstr "Workers"
|
msgstr "Workers"
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ msgstr ""
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:39
|
#: src/pages/admin-overview/AdminOverviewPage.ts:40
|
||||||
msgid "Apps with most usage"
|
msgid "Apps with most usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -352,11 +352,11 @@ msgstr ""
|
||||||
msgid "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
msgid "CA which the endpoint's Certificate is verified against. Can be left empty for no validation."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:54
|
#: src/pages/admin-overview/AdminOverviewPage.ts:55
|
||||||
msgid "Cached Flows"
|
msgid "Cached Flows"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:52
|
#: src/pages/admin-overview/AdminOverviewPage.ts:53
|
||||||
msgid "Cached Policies"
|
msgid "Cached Policies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1535,6 +1535,10 @@ msgstr ""
|
||||||
msgid "LDAP Source {0}"
|
msgid "LDAP Source {0}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCardContainer.ts:24
|
||||||
|
msgid "LDAP Sync status {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/prompt/PromptForm.ts:90
|
#: src/pages/stages/prompt/PromptForm.ts:90
|
||||||
#: src/pages/stages/prompt/PromptListPage.ts:47
|
#: src/pages/stages/prompt/PromptListPage.ts:47
|
||||||
msgid "Label"
|
msgid "Label"
|
||||||
|
@ -1657,7 +1661,7 @@ msgstr ""
|
||||||
msgid "Logins"
|
msgid "Logins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:36
|
#: src/pages/admin-overview/AdminOverviewPage.ts:37
|
||||||
#: src/pages/applications/ApplicationViewPage.ts:71
|
#: src/pages/applications/ApplicationViewPage.ts:71
|
||||||
msgid "Logins over the last 24 hours"
|
msgid "Logins over the last 24 hours"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1918,6 +1922,10 @@ msgstr ""
|
||||||
msgid "Not synced in the last hour, check System tasks."
|
msgid "Not synced in the last hour, check System tasks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCard.ts:28
|
||||||
|
msgid "Not synced."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts:58
|
#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts:58
|
||||||
#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts:48
|
#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts:48
|
||||||
#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts:45
|
#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts:45
|
||||||
|
@ -2138,7 +2146,7 @@ msgid "Please enter your password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:26
|
#: src/interfaces/AdminInterface.ts:26
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:44
|
#: src/pages/admin-overview/AdminOverviewPage.ts:45
|
||||||
#: src/pages/flows/FlowListPage.ts:50
|
#: src/pages/flows/FlowListPage.ts:50
|
||||||
#: src/pages/policies/PolicyListPage.ts:38
|
#: src/pages/policies/PolicyListPage.ts:38
|
||||||
msgid "Policies"
|
msgid "Policies"
|
||||||
|
@ -2288,7 +2296,7 @@ msgid "Provider type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:20
|
#: src/interfaces/AdminInterface.ts:20
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:42
|
#: src/pages/admin-overview/AdminOverviewPage.ts:43
|
||||||
#: src/pages/outposts/OutpostForm.ts:82
|
#: src/pages/outposts/OutpostForm.ts:82
|
||||||
#: src/pages/outposts/OutpostListPage.ts:50
|
#: src/pages/outposts/OutpostListPage.ts:50
|
||||||
msgid "Providers"
|
msgid "Providers"
|
||||||
|
@ -3069,7 +3077,11 @@ msgstr ""
|
||||||
msgid "Sync users' passwords"
|
msgid "Sync users' passwords"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:31
|
#: src/pages/admin-overview/cards/LDAPSyncStatusCard.ts:34
|
||||||
|
msgid "Synced {0}:{1}:{2}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/admin-overview/AdminOverviewPage.ts:32
|
||||||
msgid "System Overview"
|
msgid "System Overview"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3507,7 +3519,7 @@ msgid "Username: Same as Text input, but checks for and prevents duplicate usern
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interfaces/AdminInterface.ts:32
|
#: src/interfaces/AdminInterface.ts:32
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:46
|
#: src/pages/admin-overview/AdminOverviewPage.ts:47
|
||||||
#: src/pages/users/UserListPage.ts:31
|
#: src/pages/users/UserListPage.ts:31
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -3540,7 +3552,7 @@ msgstr ""
|
||||||
msgid "Verification Certificate"
|
msgid "Verification Certificate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:48
|
#: src/pages/admin-overview/AdminOverviewPage.ts:49
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3640,7 +3652,7 @@ msgstr ""
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/admin-overview/AdminOverviewPage.ts:50
|
#: src/pages/admin-overview/AdminOverviewPage.ts:51
|
||||||
msgid "Workers"
|
msgid "Workers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,10 @@ import { CSSResult, customElement, html, LitElement, TemplateResult } from "lit-
|
||||||
import "../../elements/charts/AdminLoginsChart";
|
import "../../elements/charts/AdminLoginsChart";
|
||||||
import "../../elements/cards/AggregatePromiseCard";
|
import "../../elements/cards/AggregatePromiseCard";
|
||||||
import "./TopApplicationsTable";
|
import "./TopApplicationsTable";
|
||||||
|
|
||||||
import "./cards/AdminStatusCard";
|
import "./cards/AdminStatusCard";
|
||||||
import "./cards/FlowCacheStatusCard";
|
import "./cards/FlowCacheStatusCard";
|
||||||
|
import "./cards/LDAPSyncStatusCardContainer";
|
||||||
import "./cards/PolicyCacheStatusCard";
|
import "./cards/PolicyCacheStatusCard";
|
||||||
import "./cards/PolicyUnboundStatusCard";
|
import "./cards/PolicyUnboundStatusCard";
|
||||||
import "./cards/ProviderStatusCard";
|
import "./cards/ProviderStatusCard";
|
||||||
|
@ -53,6 +55,8 @@ export class AdminOverviewPage extends LitElement {
|
||||||
</ak-admin-status-card-policy-cache>
|
</ak-admin-status-card-policy-cache>
|
||||||
<ak-admin-status-card-flow-cache class="pf-l-gallery__item pf-m-4-col" icon="pf-icon pf-icon-server" header=${t`Cached Flows`}>
|
<ak-admin-status-card-flow-cache class="pf-l-gallery__item pf-m-4-col" icon="pf-icon pf-icon-server" header=${t`Cached Flows`}>
|
||||||
</ak-admin-status-card-flow-cache>
|
</ak-admin-status-card-flow-cache>
|
||||||
|
<ak-admin-status-card-ldap-sync-container >
|
||||||
|
</ak-admin-status-card-ldap-sync-container>
|
||||||
</div>
|
</div>
|
||||||
</section>`;
|
</section>`;
|
||||||
}
|
}
|
||||||
|
|
48
web/src/pages/admin-overview/cards/LDAPSyncStatusCard.ts
Normal file
48
web/src/pages/admin-overview/cards/LDAPSyncStatusCard.ts
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
import { t } from "@lingui/macro";
|
||||||
|
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||||
|
import { AdminStatus, AdminStatusCard } from "./AdminStatusCard";
|
||||||
|
import { SourcesApi } from "authentik-api";
|
||||||
|
import { DEFAULT_CONFIG } from "../../../api/Config";
|
||||||
|
import "../../../elements/forms/ConfirmationForm";
|
||||||
|
|
||||||
|
@customElement("ak-admin-status-card-ldap-sync")
|
||||||
|
export class LDAPSyncStatusCard extends AdminStatusCard<Date | undefined> {
|
||||||
|
|
||||||
|
@property()
|
||||||
|
slug!: string;
|
||||||
|
|
||||||
|
getPrimaryValue(): Promise<Date | undefined> {
|
||||||
|
return new SourcesApi(DEFAULT_CONFIG).sourcesLdapSyncStatus({
|
||||||
|
slug: this.slug
|
||||||
|
}).then((value) => {
|
||||||
|
return value.lastSync;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
renderValue(): TemplateResult {
|
||||||
|
return html`${t`Last sync: ${this.value?.toLocaleTimeString()}`}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
getStatus(value: Date | undefined): Promise<AdminStatus> {
|
||||||
|
const now = new Date().getTime();
|
||||||
|
const maxDelta = 3600000; // 1 hour
|
||||||
|
if (!value || (now - value.getTime()) > maxDelta) {
|
||||||
|
// No sync or last sync was over maxDelta ago
|
||||||
|
return Promise.resolve<AdminStatus>({
|
||||||
|
icon: "fa fa-exclamation-triangle pf-m-warning",
|
||||||
|
message: t`Not synced.`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return Promise.resolve<AdminStatus>({
|
||||||
|
icon: "fa fa-check-circle pf-m-success",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderHeaderLink(): TemplateResult {
|
||||||
|
return html`<a href="#/core/sources/${this.slug}">
|
||||||
|
<i class="fa fa-external-link-alt"> </i>
|
||||||
|
</a>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { SourcesApi } from "authentik-api";
|
||||||
|
import { customElement, html, LitElement, TemplateResult } from "lit-element";
|
||||||
|
import { until } from "lit-html/directives/until";
|
||||||
|
import "./LDAPSyncStatusCard";
|
||||||
|
import { t } from "@lingui/macro";
|
||||||
|
import { DEFAULT_CONFIG } from "../../../api/Config";
|
||||||
|
|
||||||
|
@customElement("ak-admin-status-card-ldap-sync-container")
|
||||||
|
export class LDAPSyncStatusCardContainer extends LitElement {
|
||||||
|
|
||||||
|
createRenderRoot(): Element | ShadowRoot {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
render(): TemplateResult {
|
||||||
|
return html`
|
||||||
|
${until(new SourcesApi(DEFAULT_CONFIG).sourcesLdapList({}).then(sources => {
|
||||||
|
return sources.results.map(source => {
|
||||||
|
return html`<ak-admin-status-card-ldap-sync
|
||||||
|
class="pf-l-gallery__item pf-m-4-col"
|
||||||
|
icon="fa fa-sync-alt"
|
||||||
|
header=${t`LDAP Sync status ${source.name}`}
|
||||||
|
slug=${source.slug}>
|
||||||
|
</ak-admin-status-card-ldap-sync>`;
|
||||||
|
});
|
||||||
|
}))}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in a new issue