web/admin: show banner when backend and frontend versions mismatch

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-04-13 16:38:50 +02:00
parent 1b79fad6cf
commit 55bb9b6643
8 changed files with 70 additions and 61 deletions

View File

@ -6,7 +6,7 @@ from drf_yasg.utils import swagger_auto_schema
from packaging.version import parse from packaging.version import parse
from rest_framework.fields import SerializerMethodField from rest_framework.fields import SerializerMethodField
from rest_framework.mixins import ListModelMixin from rest_framework.mixins import ListModelMixin
from rest_framework.permissions import IsAdminUser from rest_framework.permissions import IsAuthenticated
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet from rest_framework.viewsets import GenericViewSet
@ -50,7 +50,9 @@ class VersionSerializer(PassiveSerializer):
class VersionViewSet(ListModelMixin, GenericViewSet): class VersionViewSet(ListModelMixin, GenericViewSet):
"""Get running and latest version.""" """Get running and latest version."""
permission_classes = [IsAdminUser] permission_classes = [IsAuthenticated]
pagination_class = None
filter_backends = []
def get_queryset(self): # pragma: no cover def get_queryset(self): # pragma: no cover
return None return None

View File

@ -52,7 +52,6 @@ class EmailStageViewSet(ModelViewSet):
queryset = EmailStage.objects.all() queryset = EmailStage.objects.all()
serializer_class = EmailStageSerializer serializer_class = EmailStageSerializer
# TODO: Validate connection settings when use_global_settings is unchecked
@swagger_auto_schema(responses={200: TypeCreateSerializer(many=True)}) @swagger_auto_schema(responses={200: TypeCreateSerializer(many=True)})
@action(detail=False, pagination_class=None, filter_backends=[]) @action(detail=False, pagination_class=None, filter_backends=[])
def templates(self, request: Request) -> Response: def templates(self, request: Request) -> Response:

View File

@ -131,27 +131,7 @@ paths:
get: get:
operationId: admin_version_list operationId: admin_version_list
description: Get running and latest version. description: Get running and latest version.
parameters: parameters: []
- name: ordering
in: query
description: Which field to use when ordering the results.
required: false
type: string
- name: search
in: query
description: A search term.
required: false
type: string
- name: page
in: query
description: Page Index
required: false
type: integer
- name: page_size
in: query
description: Page Size
required: false
type: integer
responses: responses:
'200': '200':
description: '' description: ''

View File

@ -2,7 +2,6 @@ import { css, CSSResult, html, LitElement, property, TemplateResult } from "lit-
import { SidebarItem } from "../elements/sidebar/Sidebar"; import { SidebarItem } from "../elements/sidebar/Sidebar";
import PFBase from "@patternfly/patternfly/patternfly-base.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css"; import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFSkipToContent from "@patternfly/patternfly/components/SkipToContent/skip-to-content.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css"; import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css";
@ -13,7 +12,9 @@ import "../elements/Banner";
import { until } from "lit-html/directives/until"; import { until } from "lit-html/directives/until";
import { me } from "../api/Users"; import { me } from "../api/Users";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { EVENT_NOTIFICATION_TOGGLE, EVENT_SIDEBAR_TOGGLE } from "../constants"; import { EVENT_NOTIFICATION_TOGGLE, EVENT_SIDEBAR_TOGGLE, VERSION } from "../constants";
import { AdminApi } from "authentik-api";
import { DEFAULT_CONFIG } from "../api/Config";
export abstract class Interface extends LitElement { export abstract class Interface extends LitElement {
@property({type: Boolean}) @property({type: Boolean})
@ -25,7 +26,7 @@ export abstract class Interface extends LitElement {
abstract get sidebar(): SidebarItem[]; abstract get sidebar(): SidebarItem[];
static get styles(): CSSResult[] { static get styles(): CSSResult[] {
return [PFBase, PFPage, PFSkipToContent, PFButton, PFDrawer, css` return [PFBase, PFPage, PFButton, PFDrawer, css`
.pf-c-page__main, .pf-c-drawer__content, .pf-c-page__drawer { .pf-c-page__main, .pf-c-drawer__content, .pf-c-page__drawer {
z-index: auto !important; z-index: auto !important;
} }
@ -48,6 +49,17 @@ export abstract class Interface extends LitElement {
render(): TemplateResult { render(): TemplateResult {
return html` return html`
${until(new AdminApi(DEFAULT_CONFIG).adminVersionList().then(version => {
if (version.versionCurrent !== VERSION) {
return html`<ak-banner>
${t`A newer version of the frontend is available.`}
<button @click=${() => { window.location.reload(); }}>
${t`Reload`}
</button>
</ak-banner>`;
}
return html``;
}))}
${until(me().then((u) => { ${until(me().then((u) => {
if (u.original) { if (u.original) {
return html`<ak-banner> return html`<ak-banner>

View File

@ -25,6 +25,10 @@ msgstr "6 digits, widely compatible"
msgid "8 digits, not compatible with apps like Google Authenticator" msgid "8 digits, not compatible with apps like Google Authenticator"
msgstr "8 digits, not compatible with apps like Google Authenticator" msgstr "8 digits, not compatible with apps like Google Authenticator"
#: src/interfaces/Interface.ts:50
msgid "A newer version of the frontend is available."
msgstr "A newer version of the frontend is available."
#: src/pages/policies/dummy/DummyPolicyForm.ts:53 #: src/pages/policies/dummy/DummyPolicyForm.ts:53
msgid "A policy used for testing. Always returns the same result as specified below after waiting a random duration." msgid "A policy used for testing. Always returns the same result as specified below after waiting a random duration."
msgstr "A policy used for testing. Always returns the same result as specified below after waiting a random duration." msgstr "A policy used for testing. Always returns the same result as specified below after waiting a random duration."
@ -462,7 +466,7 @@ msgstr "Change password"
msgid "Change your password" msgid "Change your password"
msgstr "Change your password" msgstr "Change your password"
#: src/pages/applications/ApplicationViewPage.ts:119 #: src/pages/applications/ApplicationViewPage.ts:123
#: src/pages/flows/FlowViewPage.ts:110 #: src/pages/flows/FlowViewPage.ts:110
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:136 #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:136
#: src/pages/providers/proxy/ProxyProviderViewPage.ts:135 #: src/pages/providers/proxy/ProxyProviderViewPage.ts:135
@ -1011,8 +1015,8 @@ msgid "Each provider has a different issuer, based on the application slug."
msgstr "Each provider has a different issuer, based on the application slug." msgstr "Each provider has a different issuer, based on the application slug."
#: src/pages/applications/ApplicationListPage.ts:94 #: src/pages/applications/ApplicationListPage.ts:94
#: src/pages/applications/ApplicationViewPage.ts:95 #: src/pages/applications/ApplicationViewPage.ts:91
#: src/pages/applications/ApplicationViewPage.ts:109 #: src/pages/applications/ApplicationViewPage.ts:105
#: src/pages/crypto/CertificateKeyPairListPage.ts:74 #: src/pages/crypto/CertificateKeyPairListPage.ts:74
#: src/pages/events/RuleListPage.ts:70 #: src/pages/events/RuleListPage.ts:70
#: src/pages/events/TransportListPage.ts:74 #: src/pages/events/TransportListPage.ts:74
@ -1676,7 +1680,7 @@ msgstr "Library"
#: src/flows/stages/identification/IdentificationStage.ts:134 #: src/flows/stages/identification/IdentificationStage.ts:134
#: src/flows/stages/password/PasswordStage.ts:31 #: src/flows/stages/password/PasswordStage.ts:31
#: src/flows/stages/prompt/PromptStage.ts:126 #: src/flows/stages/prompt/PromptStage.ts:126
#: src/pages/applications/ApplicationViewPage.ts:60 #: src/pages/applications/ApplicationViewPage.ts:54
#: src/pages/user-settings/UserDetailsPage.ts:38 #: src/pages/user-settings/UserDetailsPage.ts:38
#: src/utils.ts:40 #: src/utils.ts:40
msgid "Loading" msgid "Loading"
@ -1756,7 +1760,7 @@ msgid "Logins"
msgstr "Logins" msgstr "Logins"
#: src/pages/admin-overview/AdminOverviewPage.ts:40 #: src/pages/admin-overview/AdminOverviewPage.ts:40
#: src/pages/applications/ApplicationViewPage.ts:68 #: src/pages/applications/ApplicationViewPage.ts:115
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"
@ -2185,7 +2189,7 @@ msgid "Outposts are deployments of authentik components to support different env
msgstr "Outposts are deployments of authentik components to support different environments and protocols, like reverse proxies." msgstr "Outposts are deployments of authentik components to support different environments and protocols, like reverse proxies."
#: src/interfaces/AdminInterface.ts:17 #: src/interfaces/AdminInterface.ts:17
#: src/pages/applications/ApplicationViewPage.ts:65 #: src/pages/applications/ApplicationViewPage.ts:59
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:65 #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:65
#: src/pages/providers/proxy/ProxyProviderViewPage.ts:56 #: src/pages/providers/proxy/ProxyProviderViewPage.ts:56
#: src/pages/providers/saml/SAMLProviderViewPage.ts:58 #: src/pages/providers/saml/SAMLProviderViewPage.ts:58
@ -2265,7 +2269,7 @@ msgstr "Policy"
msgid "Policy / User / Group" msgid "Policy / User / Group"
msgstr "Policy / User / Group" msgstr "Policy / User / Group"
#: src/pages/applications/ApplicationViewPage.ts:130 #: src/pages/applications/ApplicationViewPage.ts:134
#: src/pages/flows/FlowViewPage.ts:101 #: src/pages/flows/FlowViewPage.ts:101
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:143 #: src/pages/sources/oauth/OAuthSourceViewPage.ts:143
#: src/pages/sources/saml/SAMLSourceViewPage.ts:150 #: src/pages/sources/saml/SAMLSourceViewPage.ts:150
@ -2277,6 +2281,7 @@ msgid "Policy binding"
msgstr "Policy binding" msgstr "Policy binding"
#: src/pages/applications/ApplicationForm.ts:141 #: src/pages/applications/ApplicationForm.ts:141
#: src/pages/applications/ApplicationViewPage.ts:81
#: src/pages/flows/FlowForm.ts:101 #: src/pages/flows/FlowForm.ts:101
#: src/pages/flows/StageBindingForm.ts:136 #: src/pages/flows/StageBindingForm.ts:136
msgid "Policy engine mode" msgid "Policy engine mode"
@ -2384,7 +2389,7 @@ msgstr "Provide support for protocols like SAML and OAuth to assigned applicatio
#: src/elements/oauth/UserRefreshList.ts:29 #: src/elements/oauth/UserRefreshList.ts:29
#: src/pages/applications/ApplicationForm.ts:100 #: src/pages/applications/ApplicationForm.ts:100
#: src/pages/applications/ApplicationListPage.ts:59 #: src/pages/applications/ApplicationListPage.ts:59
#: src/pages/applications/ApplicationViewPage.ts:82 #: src/pages/applications/ApplicationViewPage.ts:68
#: src/pages/providers/ProviderListPage.ts:34 #: src/pages/providers/ProviderListPage.ts:34
msgid "Provider" msgid "Provider"
msgstr "Provider" msgstr "Provider"
@ -2498,11 +2503,15 @@ msgstr "Register device"
msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression." msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression."
msgstr "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression." msgstr "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression."
#: src/pages/applications/ApplicationViewPage.ts:76 #: src/pages/applications/ApplicationViewPage.ts:62
#: src/pages/flows/FlowViewPage.ts:64 #: src/pages/flows/FlowViewPage.ts:64
msgid "Related" msgid "Related"
msgstr "Related" msgstr "Related"
#: src/interfaces/Interface.ts:52
msgid "Reload"
msgstr "Reload"
#: src/pages/stages/user_logout/UserLogoutStageForm.ts:51 #: src/pages/stages/user_logout/UserLogoutStageForm.ts:51
msgid "Remove the user from the current session." msgid "Remove the user from the current session."
msgstr "Remove the user from the current session." msgstr "Remove the user from the current session."
@ -2914,7 +2923,7 @@ msgstr "Status: Disabled"
msgid "Status: Enabled" msgid "Status: Enabled"
msgstr "Status: Enabled" msgstr "Status: Enabled"
#: src/interfaces/Interface.ts:51 #: src/interfaces/Interface.ts:63
msgid "Stop impersonation" msgid "Stop impersonation"
msgstr "Stop impersonation" msgstr "Stop impersonation"
@ -3297,7 +3306,7 @@ msgstr ""
msgid "These policies control when this stage will be applied to the flow." msgid "These policies control when this stage will be applied to the flow."
msgstr "These policies control when this stage will be applied to the flow." msgstr "These policies control when this stage will be applied to the flow."
#: src/pages/applications/ApplicationViewPage.ts:132 #: src/pages/applications/ApplicationViewPage.ts:136
msgid "These policies control which users can access this application." msgid "These policies control which users can access this application."
msgstr "These policies control which users can access this application." msgstr "These policies control which users can access this application."
@ -3450,7 +3459,7 @@ msgid "Up-to-date!"
msgstr "Up-to-date!" msgstr "Up-to-date!"
#: src/pages/applications/ApplicationListPage.ts:86 #: src/pages/applications/ApplicationListPage.ts:86
#: src/pages/applications/ApplicationViewPage.ts:101 #: src/pages/applications/ApplicationViewPage.ts:97
#: src/pages/crypto/CertificateKeyPairListPage.ts:66 #: src/pages/crypto/CertificateKeyPairListPage.ts:66
#: src/pages/events/RuleListPage.ts:62 #: src/pages/events/RuleListPage.ts:62
#: src/pages/events/TransportListPage.ts:66 #: src/pages/events/TransportListPage.ts:66
@ -3488,7 +3497,7 @@ msgid "Update"
msgstr "Update" msgstr "Update"
#: src/pages/applications/ApplicationListPage.ts:89 #: src/pages/applications/ApplicationListPage.ts:89
#: src/pages/applications/ApplicationViewPage.ts:104 #: src/pages/applications/ApplicationViewPage.ts:100
msgid "Update Application" msgid "Update Application"
msgstr "Update Application" msgstr "Update Application"
@ -3854,7 +3863,7 @@ msgstr "X509 Subject"
msgid "Yes" msgid "Yes"
msgstr "Yes" msgstr "Yes"
#: src/interfaces/Interface.ts:49 #: src/interfaces/Interface.ts:61
msgid "You're currently impersonating {0}." msgid "You're currently impersonating {0}."
msgstr "You're currently impersonating {0}." msgstr "You're currently impersonating {0}."

View File

@ -25,6 +25,10 @@ msgstr ""
msgid "8 digits, not compatible with apps like Google Authenticator" msgid "8 digits, not compatible with apps like Google Authenticator"
msgstr "" msgstr ""
#: src/interfaces/Interface.ts:50
msgid "A newer version of the frontend is available."
msgstr ""
#: src/pages/policies/dummy/DummyPolicyForm.ts:53 #: src/pages/policies/dummy/DummyPolicyForm.ts:53
msgid "A policy used for testing. Always returns the same result as specified below after waiting a random duration." msgid "A policy used for testing. Always returns the same result as specified below after waiting a random duration."
msgstr "" msgstr ""
@ -458,7 +462,7 @@ msgstr ""
msgid "Change your password" msgid "Change your password"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationViewPage.ts:119 #: src/pages/applications/ApplicationViewPage.ts:123
#: src/pages/flows/FlowViewPage.ts:110 #: src/pages/flows/FlowViewPage.ts:110
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:136 #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:136
#: src/pages/providers/proxy/ProxyProviderViewPage.ts:135 #: src/pages/providers/proxy/ProxyProviderViewPage.ts:135
@ -1003,8 +1007,8 @@ msgid "Each provider has a different issuer, based on the application slug."
msgstr "" msgstr ""
#: src/pages/applications/ApplicationListPage.ts:94 #: src/pages/applications/ApplicationListPage.ts:94
#: src/pages/applications/ApplicationViewPage.ts:95 #: src/pages/applications/ApplicationViewPage.ts:91
#: src/pages/applications/ApplicationViewPage.ts:109 #: src/pages/applications/ApplicationViewPage.ts:105
#: src/pages/crypto/CertificateKeyPairListPage.ts:74 #: src/pages/crypto/CertificateKeyPairListPage.ts:74
#: src/pages/events/RuleListPage.ts:70 #: src/pages/events/RuleListPage.ts:70
#: src/pages/events/TransportListPage.ts:74 #: src/pages/events/TransportListPage.ts:74
@ -1668,7 +1672,7 @@ msgstr ""
#: src/flows/stages/identification/IdentificationStage.ts:134 #: src/flows/stages/identification/IdentificationStage.ts:134
#: src/flows/stages/password/PasswordStage.ts:31 #: src/flows/stages/password/PasswordStage.ts:31
#: src/flows/stages/prompt/PromptStage.ts:126 #: src/flows/stages/prompt/PromptStage.ts:126
#: src/pages/applications/ApplicationViewPage.ts:60 #: src/pages/applications/ApplicationViewPage.ts:54
#: src/pages/user-settings/UserDetailsPage.ts:38 #: src/pages/user-settings/UserDetailsPage.ts:38
#: src/utils.ts:40 #: src/utils.ts:40
msgid "Loading" msgid "Loading"
@ -1748,7 +1752,7 @@ msgid "Logins"
msgstr "" msgstr ""
#: src/pages/admin-overview/AdminOverviewPage.ts:40 #: src/pages/admin-overview/AdminOverviewPage.ts:40
#: src/pages/applications/ApplicationViewPage.ts:68 #: src/pages/applications/ApplicationViewPage.ts:115
msgid "Logins over the last 24 hours" msgid "Logins over the last 24 hours"
msgstr "" msgstr ""
@ -2177,7 +2181,7 @@ msgid "Outposts are deployments of authentik components to support different env
msgstr "" msgstr ""
#: src/interfaces/AdminInterface.ts:17 #: src/interfaces/AdminInterface.ts:17
#: src/pages/applications/ApplicationViewPage.ts:65 #: src/pages/applications/ApplicationViewPage.ts:59
#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:65 #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts:65
#: src/pages/providers/proxy/ProxyProviderViewPage.ts:56 #: src/pages/providers/proxy/ProxyProviderViewPage.ts:56
#: src/pages/providers/saml/SAMLProviderViewPage.ts:58 #: src/pages/providers/saml/SAMLProviderViewPage.ts:58
@ -2257,7 +2261,7 @@ msgstr ""
msgid "Policy / User / Group" msgid "Policy / User / Group"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationViewPage.ts:130 #: src/pages/applications/ApplicationViewPage.ts:134
#: src/pages/flows/FlowViewPage.ts:101 #: src/pages/flows/FlowViewPage.ts:101
#: src/pages/sources/oauth/OAuthSourceViewPage.ts:143 #: src/pages/sources/oauth/OAuthSourceViewPage.ts:143
#: src/pages/sources/saml/SAMLSourceViewPage.ts:150 #: src/pages/sources/saml/SAMLSourceViewPage.ts:150
@ -2269,6 +2273,7 @@ msgid "Policy binding"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationForm.ts:141 #: src/pages/applications/ApplicationForm.ts:141
#: src/pages/applications/ApplicationViewPage.ts:81
#: src/pages/flows/FlowForm.ts:101 #: src/pages/flows/FlowForm.ts:101
#: src/pages/flows/StageBindingForm.ts:136 #: src/pages/flows/StageBindingForm.ts:136
msgid "Policy engine mode" msgid "Policy engine mode"
@ -2376,7 +2381,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts:29 #: src/elements/oauth/UserRefreshList.ts:29
#: src/pages/applications/ApplicationForm.ts:100 #: src/pages/applications/ApplicationForm.ts:100
#: src/pages/applications/ApplicationListPage.ts:59 #: src/pages/applications/ApplicationListPage.ts:59
#: src/pages/applications/ApplicationViewPage.ts:82 #: src/pages/applications/ApplicationViewPage.ts:68
#: src/pages/providers/ProviderListPage.ts:34 #: src/pages/providers/ProviderListPage.ts:34
msgid "Provider" msgid "Provider"
msgstr "" msgstr ""
@ -2490,11 +2495,15 @@ msgstr ""
msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression." msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression."
msgstr "" msgstr ""
#: src/pages/applications/ApplicationViewPage.ts:76 #: src/pages/applications/ApplicationViewPage.ts:62
#: src/pages/flows/FlowViewPage.ts:64 #: src/pages/flows/FlowViewPage.ts:64
msgid "Related" msgid "Related"
msgstr "" msgstr ""
#: src/interfaces/Interface.ts:52
msgid "Reload"
msgstr ""
#: src/pages/stages/user_logout/UserLogoutStageForm.ts:51 #: src/pages/stages/user_logout/UserLogoutStageForm.ts:51
msgid "Remove the user from the current session." msgid "Remove the user from the current session."
msgstr "" msgstr ""
@ -2906,7 +2915,7 @@ msgstr ""
msgid "Status: Enabled" msgid "Status: Enabled"
msgstr "" msgstr ""
#: src/interfaces/Interface.ts:51 #: src/interfaces/Interface.ts:63
msgid "Stop impersonation" msgid "Stop impersonation"
msgstr "" msgstr ""
@ -3287,7 +3296,7 @@ msgstr ""
msgid "These policies control when this stage will be applied to the flow." msgid "These policies control when this stage will be applied to the flow."
msgstr "" msgstr ""
#: src/pages/applications/ApplicationViewPage.ts:132 #: src/pages/applications/ApplicationViewPage.ts:136
msgid "These policies control which users can access this application." msgid "These policies control which users can access this application."
msgstr "" msgstr ""
@ -3440,7 +3449,7 @@ msgid "Up-to-date!"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationListPage.ts:86 #: src/pages/applications/ApplicationListPage.ts:86
#: src/pages/applications/ApplicationViewPage.ts:101 #: src/pages/applications/ApplicationViewPage.ts:97
#: src/pages/crypto/CertificateKeyPairListPage.ts:66 #: src/pages/crypto/CertificateKeyPairListPage.ts:66
#: src/pages/events/RuleListPage.ts:62 #: src/pages/events/RuleListPage.ts:62
#: src/pages/events/TransportListPage.ts:66 #: src/pages/events/TransportListPage.ts:66
@ -3478,7 +3487,7 @@ msgid "Update"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationListPage.ts:89 #: src/pages/applications/ApplicationListPage.ts:89
#: src/pages/applications/ApplicationViewPage.ts:104 #: src/pages/applications/ApplicationViewPage.ts:100
msgid "Update Application" msgid "Update Application"
msgstr "" msgstr ""
@ -3842,7 +3851,7 @@ msgstr ""
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: src/interfaces/Interface.ts:49 #: src/interfaces/Interface.ts:61
msgid "You're currently impersonating {0}." msgid "You're currently impersonating {0}."
msgstr "" msgstr ""

View File

@ -8,7 +8,7 @@ import { AdminStatusCard, AdminStatus } from "./AdminStatusCard";
export class VersionStatusCard extends AdminStatusCard<Version> { export class VersionStatusCard extends AdminStatusCard<Version> {
getPrimaryValue(): Promise<Version> { getPrimaryValue(): Promise<Version> {
return new AdminApi(DEFAULT_CONFIG).adminVersionList({}); return new AdminApi(DEFAULT_CONFIG).adminVersionList();
} }
getStatus(value: Version): Promise<AdminStatus> { getStatus(value: Version): Promise<AdminStatus> {

View File

@ -71,16 +71,14 @@ export class EmailStageForm extends Form<EmailStage> {
</ak-form-element-horizontal> </ak-form-element-horizontal>
<ak-form-element-horizontal <ak-form-element-horizontal
label=${t`SMTP Username`} label=${t`SMTP Username`}
?required=${true}
name="username"> name="username">
<input type="text" value="${ifDefined(this.stage?.username || "")}" class="pf-c-form-control" required> <input type="text" value="${ifDefined(this.stage?.username || "")}" class="pf-c-form-control">
</ak-form-element-horizontal> </ak-form-element-horizontal>
<ak-form-element-horizontal <ak-form-element-horizontal
label=${t`SMTP Password`} label=${t`SMTP Password`}
?required=${true}
?writeOnly=${this.stage !== undefined} ?writeOnly=${this.stage !== undefined}
name="password"> name="password">
<input type="text" value="${ifDefined(this.stage?.password || "")}" class="pf-c-form-control" required> <input type="text" value="${ifDefined(this.stage?.password || "")}" class="pf-c-form-control">
</ak-form-element-horizontal> </ak-form-element-horizontal>
<ak-form-element-horizontal name="useTls"> <ak-form-element-horizontal name="useTls">
<div class="pf-c-check"> <div class="pf-c-check">
@ -92,7 +90,7 @@ export class EmailStageForm extends Form<EmailStage> {
</ak-form-element-horizontal> </ak-form-element-horizontal>
<ak-form-element-horizontal name="useSsl"> <ak-form-element-horizontal name="useSsl">
<div class="pf-c-check"> <div class="pf-c-check">
<input type="checkbox" class="pf-c-check__input" ?checked=${first(this.stage?.useSsl, true)}> <input type="checkbox" class="pf-c-check__input" ?checked=${first(this.stage?.useSsl, false)}>
<label class="pf-c-check__label"> <label class="pf-c-check__label">
${t`Use SSL`} ${t`Use SSL`}
</label> </label>