@c8y/ngx-components 1023.88.4 → 1023.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/index.d.ts +19 -1
- package/auth-configuration/index.d.ts.map +1 -1
- package/context-dashboard/index.d.ts +4 -4
- package/context-dashboard/index.d.ts.map +1 -1
- package/echart/index.d.ts +1 -1
- package/echart/models/index.d.ts +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +73 -7
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +21 -7
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-global-context.mjs +494 -359
- package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +1 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +1 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +1 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs +0 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +0 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs +2 -89
- package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +0 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +6 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +39 -16
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/global-context/index.d.ts +59 -31
- package/global-context/index.d.ts.map +1 -1
- package/index.d.ts +29 -6
- package/index.d.ts.map +1 -1
- package/locales/de.po +74 -19
- package/locales/es.po +74 -19
- package/locales/fr.po +74 -19
- package/locales/ja_JP.po +66 -18
- package/locales/ko.po +74 -19
- package/locales/locales.pot +74 -13
- package/locales/nl.po +74 -19
- package/locales/pl.po +74 -19
- package/locales/pt_BR.po +74 -19
- package/locales/zh_CN.po +74 -19
- package/locales/zh_TW.po +74 -19
- package/package.json +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts +0 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +0 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +0 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-list/index.d.ts +0 -1
- package/widgets/definitions/datapoints-list/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/index.d.ts +0 -1
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
- package/widgets/definitions/kpi/index.d.ts +0 -1
- package/widgets/definitions/kpi/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/index.d.ts +5 -8
- package/widgets/implementations/alarms/index.d.ts.map +1 -1
- package/widgets/implementations/html-widget/index.d.ts +4 -6
- package/widgets/implementations/html-widget/index.d.ts.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { SimpleChanges, OnInit, EventEmitter, OnChanges, AfterViewInit, TemplateRef, ChangeDetectorRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@c8y/ngx-components';
|
|
4
|
-
import { TenantUiService, AppStateService, ModalService, SimplifiedAuthService, AlertService, DateFormatService, TabFactory, Tab } from '@c8y/ngx-components';
|
|
4
|
+
import { TenantUiService, AppStateService, ModalService, SimplifiedAuthService, AlertService, DroppedFile, DateFormatService, TabFactory, Tab } from '@c8y/ngx-components';
|
|
5
5
|
import * as i2 from 'ngx-bootstrap/popover';
|
|
6
6
|
import * as _c8y_client from '@c8y/client';
|
|
7
7
|
import { ITenantLoginOption, IAuthenticationRestrictions, TenantLoginOptionType, ISessionConfiguration, TenantLoginOptionsService, TenantOptionsService, SystemOptionsService, TenantService, IResult, ITenantOption, TfaStrategy, IApplication, IUserGroup, IIdentified, ApplicationService, UserGroupService, InventoryRoleService } from '@c8y/client';
|
|
@@ -406,6 +406,8 @@ interface SsoConfiguration extends ITenantLoginOption {
|
|
|
406
406
|
visibleOnLoginPage: boolean;
|
|
407
407
|
externalTokenConfig?: ExternalTokenConfig;
|
|
408
408
|
useIdToken: boolean;
|
|
409
|
+
mtlsCertificatePem?: string;
|
|
410
|
+
mtlsPrivateKeyPem?: string;
|
|
409
411
|
}
|
|
410
412
|
|
|
411
413
|
declare class SsoConfigurationService {
|
|
@@ -568,6 +570,8 @@ interface CustomSsoConfiguration extends ITenantLoginOption {
|
|
|
568
570
|
visibleOnLoginPage: boolean;
|
|
569
571
|
externalTokenConfig: ExternalToken;
|
|
570
572
|
useIdToken: boolean;
|
|
573
|
+
mtlsCertificatePem?: string;
|
|
574
|
+
mtlsPrivateKeyPem?: string;
|
|
571
575
|
}
|
|
572
576
|
|
|
573
577
|
declare class CustomConfigurationMapper implements SsoConfigurationMapper<CustomSsoConfiguration> {
|
|
@@ -620,6 +624,8 @@ interface KeyCloakConfiguration {
|
|
|
620
624
|
accessTokenToUserDataMappings: AccessTokenToUserDataMappings;
|
|
621
625
|
externalTokenConfig: ExternalToken;
|
|
622
626
|
useIdToken: boolean;
|
|
627
|
+
mtlsCertificatePem?: string;
|
|
628
|
+
mtlsPrivateKeyPem?: string;
|
|
623
629
|
}
|
|
624
630
|
|
|
625
631
|
declare class KeyCloakConfigurationMapper implements SsoConfigurationMapper<KeyCloakConfiguration> {
|
|
@@ -701,15 +707,27 @@ declare class BasicConfigurationComponent implements OnChanges {
|
|
|
701
707
|
private tenantService;
|
|
702
708
|
templateModel: any;
|
|
703
709
|
REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP: "The redirect URL is automatically set to the application used by the user. In case of an error, it will be correctly displayed on the application's page.";
|
|
710
|
+
MTLS_ENABLED_TOOLTIP: "Use a client certificate (mTLS) instead of a client secret to authenticate the platform with the authorization server. Use this option only if the authorization server enforces certificate-based client authentication.";
|
|
711
|
+
MTLS_CERTIFICATE_TOOLTIP: "Public X.509 client certificate in PEM format, issued for this tenant by a CA trusted by your authorization server. Accepted file extension: .pem.";
|
|
712
|
+
MTLS_PRIVATE_KEY_TOOLTIP: "Private key matching the client certificate, in PEM format (PKCS#8). The platform encrypts the key at rest after the first save and will return only an encrypted value on subsequent loads. Accepted file extensions: .pem, .key.";
|
|
704
713
|
redirectToPlatformWarningParams: {
|
|
705
714
|
defaultRedirectUrl: string;
|
|
706
715
|
host?: string;
|
|
707
716
|
};
|
|
708
717
|
flowControlledByUI: boolean;
|
|
709
718
|
redirectToPlatform: string;
|
|
719
|
+
mtlsEnabled: boolean;
|
|
720
|
+
mtlsCertificateFile: DroppedFile[];
|
|
721
|
+
mtlsPrivateKeyFile: DroppedFile[];
|
|
722
|
+
private stashedMtls;
|
|
723
|
+
get isMtlsPrivateKeyEncrypted(): boolean;
|
|
710
724
|
constructor(tenantService: TenantService);
|
|
711
725
|
shouldShow(field: string): boolean;
|
|
712
726
|
ngOnChanges(): Promise<void>;
|
|
727
|
+
onMtlsEnabledChange(): void;
|
|
728
|
+
uploadMtlsCertificate(dropped: DroppedFile[]): void;
|
|
729
|
+
uploadMtlsPrivateKey(dropped: DroppedFile[]): void;
|
|
730
|
+
private readPemFile;
|
|
713
731
|
static ɵfac: i0.ɵɵFactoryDeclaration<BasicConfigurationComponent, never>;
|
|
714
732
|
static ɵcmp: i0.ɵɵComponentDeclaration<BasicConfigurationComponent, "c8y-basic-configuration", never, { "templateModel": { "alias": "templateModel"; "required": false; }; }, {}, never, never, true, never>;
|
|
715
733
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../auth-configuration/basic-settings/basic-settings.model.ts","../../auth-configuration/basic-settings/auth-configuration.model.ts","../../auth-configuration/basic-settings/session-configuration.component.ts","../../auth-configuration/basic-settings/login-settings.component.ts","../../auth-configuration/basic-settings/basic-auth-settings.component.ts","../../auth-configuration/basic-settings/tenant-login-option.mapper.ts","../../auth-configuration/basic-settings/auth-configuration.service.ts","../../auth-configuration/basic-settings/auth-configuration.component.ts","../../auth-configuration/basic-settings/tfa-settings.component.ts","../../auth-configuration/basic-settings/basic-settings.module.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/paginated-list-group.component.ts","../../auth-configuration/sso-configuration/sso-configuration.model.ts","../../auth-configuration/sso-configuration/sso-configuration.service.ts","../../auth-configuration/sso-configuration/sso-configuration.component.ts","../../auth-configuration/sso-configuration/templates/sso-configuration.mapper.ts","../../auth-configuration/sso-configuration/template-parts/request-configuration.model.ts","../../auth-configuration/sso-configuration/template-parts/signature-configuration.model.ts","../../auth-configuration/sso-configuration/template-parts/external-token-config.model.ts","../../auth-configuration/sso-configuration/templates/custom.model.ts","../../auth-configuration/sso-configuration/templates/custom-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/template.component.ts","../../auth-configuration/sso-configuration/templates/custom-template.component.ts","../../auth-configuration/sso-configuration/templates/key-cloak.model.ts","../../auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/key-cloak-template.component.ts","../../auth-configuration/sso-configuration/templates/aad.model.ts","../../auth-configuration/sso-configuration/templates/aad-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/aad-template.component.ts","../../auth-configuration/sso-configuration/template-parts/basic-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/request-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/user-id-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/user-data-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/signature-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/logout-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.ts","../../auth-configuration/sso-configuration/template-parts/external-token-config.component.ts","../../auth-configuration/sso-configuration/sso-configuration.module.ts","../../auth-configuration/auth-configuration.module.ts","../../auth-configuration/factories/tabs.factory.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAMM;;AAaL;AAEK;;;AAIL;AAED;AACE;;AAGY;AAKZ;AAIA;AAKD;;;;;;;;AChCA;;;AAIG;;AAEH;;ACGD;AA0CI;AACA;;AAtBF;AACA;AAGA;AACA;AAGA;AAIA;;;;AASU;AASV;;AAgBA;;AASA;;AAQA;;AAQA;AAIA;AAIA;AAIA;AAIA;AAYA;;AAIC;AAED;;;AAKC;AAED;;;AAKC;;AAMD;AAIA;AAIA;;;AAGD;;AChKD;AAoCc;AAnBZ;AAGA;AACA;;;AAQA;;;;;AAOoB;AAEpB;AAQA;AAIA;AAMA;AAMA;AAMA;AAQA;AAQA;AAIA;;;AAGD;;ACpGD;AAcc;;;AAFZ;AAEoB;AAEpB;;;AAoBA;;;;;AA4BA;;;AAOD;;ACpED;AAIE;;AA4BA;AAeA;AAWA;AAWA;AAcA;;;AAWD;;AClFD;AAyBI;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAGF;AAWA;AA4BA;AAQA;AAQA;AAkBA;AAqBA;AAWA;AAOA;AAOA;AAoBA;AAQA;AAaA;AAUA;AAcA;AAmBA;;;;AAIG;AACH;AAYA;;;;AAIG;AACH;AAQA;AAIA;AAQA;;;AASD;;AC9RD;AAoCI;AACA;AACA;AACA;AAjBF;AACA;;;;;AAaU;;;AAoBV;;;;AAkBD;;ACjFD;AACE;AACA;AACA;AACA;AACD;AAED;;;;AA0BE;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAGA;AAIA;;AAeA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;AAMA;AAIA;AAIA;AAaA;AAOA;;;AAMD;;AC3JD;;;;AAsBmC;;ACnBnC;;AAQW;AACkB;AAE3B;;;;;;;;;;AA0CA;;;;AAqBD;;ACvFD;AACE;AACA;AACA;AACD;AAoBD;AACE;AACA;AACD;;;;;;AAOA;;AAGC;AACD;;AAGC;AACD;;;AAIA;;;;;AAMA;;AAGC;;;AAGD;;;;AAKA;;;;;AAMA;;;;;AAMA;;;;AAKA;;;;AAKA;;;;AASC;AACE;;AAEH;;AAGC;;;;AAID;;;AAIA;;;AAIA;;;AAIA;;;;;;;AAQA;;;;;;;;AASA;;;;;AAMA;;;;;;;;AASA;AAEK
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../auth-configuration/basic-settings/basic-settings.model.ts","../../auth-configuration/basic-settings/auth-configuration.model.ts","../../auth-configuration/basic-settings/session-configuration.component.ts","../../auth-configuration/basic-settings/login-settings.component.ts","../../auth-configuration/basic-settings/basic-auth-settings.component.ts","../../auth-configuration/basic-settings/tenant-login-option.mapper.ts","../../auth-configuration/basic-settings/auth-configuration.service.ts","../../auth-configuration/basic-settings/auth-configuration.component.ts","../../auth-configuration/basic-settings/tfa-settings.component.ts","../../auth-configuration/basic-settings/basic-settings.module.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/paginated-list-group.component.ts","../../auth-configuration/sso-configuration/sso-configuration.model.ts","../../auth-configuration/sso-configuration/sso-configuration.service.ts","../../auth-configuration/sso-configuration/sso-configuration.component.ts","../../auth-configuration/sso-configuration/templates/sso-configuration.mapper.ts","../../auth-configuration/sso-configuration/template-parts/request-configuration.model.ts","../../auth-configuration/sso-configuration/template-parts/signature-configuration.model.ts","../../auth-configuration/sso-configuration/template-parts/external-token-config.model.ts","../../auth-configuration/sso-configuration/templates/custom.model.ts","../../auth-configuration/sso-configuration/templates/custom-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/template.component.ts","../../auth-configuration/sso-configuration/templates/custom-template.component.ts","../../auth-configuration/sso-configuration/templates/key-cloak.model.ts","../../auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/key-cloak-template.component.ts","../../auth-configuration/sso-configuration/templates/aad.model.ts","../../auth-configuration/sso-configuration/templates/aad-configuration-mapper.ts","../../auth-configuration/sso-configuration/templates/aad-template.component.ts","../../auth-configuration/sso-configuration/template-parts/basic-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/request-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/user-id-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/user-data-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/signature-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/logout-configuration.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.ts","../../auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.ts","../../auth-configuration/sso-configuration/template-parts/external-token-config.component.ts","../../auth-configuration/sso-configuration/sso-configuration.module.ts","../../auth-configuration/auth-configuration.module.ts","../../auth-configuration/factories/tabs.factory.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _c8y_ngx_components from '@c8y/ngx-components';
|
|
2
|
-
import { TabsService, ExtensionFactory, Tab, ViewContext, ContextData, WidgetSettings, WidgetDisplaySettings, Widget, DynamicComponentDefinition, Route, TabWithTemplate, ModalService, NavigatorService, Permissions, AlertService, DynamicComponentService, GroupService, OptionsService, AppStateService, ContextRouteService, GainsightService, BreadcrumbItem, WidgetsDashboardComponent, DashboardCopyPermission, BottomDrawerService, ActionBarService, DashboardChildChange, DashboardChange, RevertChangeType, WidgetChange, GenericHookType, GenericHookOptions, ExtensionPointForPlugins, PluginsResolveService, DynamicComponentComponent, WIDGET_CONFIGURATION_GRID_SIZE, BottomDrawerRef, ActionBarFactory, PreviewService, ClipboardService } from '@c8y/ngx-components';
|
|
2
|
+
import { TabsService, ExtensionFactory, Tab, ViewContext, ContextData, WidgetSettings, WidgetDisplaySettings, Widget, DynamicComponentDefinition, Route, TabWithTemplate, ModalService, NavigatorService, Permissions, AlertService, DynamicComponentService, GroupService, OptionsService, AppStateService, ContextRouteService, GainsightService, DynamicWidgetDefinition, BreadcrumbItem, WidgetsDashboardComponent, DashboardCopyPermission, BottomDrawerService, ActionBarService, DashboardChildChange, DashboardChange, RevertChangeType, WidgetChange, GenericHookType, GenericHookOptions, ExtensionPointForPlugins, PluginsResolveService, DynamicComponentComponent, WIDGET_CONFIGURATION_GRID_SIZE, BottomDrawerRef, ActionBarFactory, PreviewService, ClipboardService } from '@c8y/ngx-components';
|
|
3
3
|
import * as i8 from '@angular/router';
|
|
4
4
|
import { Router, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
@@ -863,10 +863,10 @@ declare class WidgetService {
|
|
|
863
863
|
private dynamicComponentService;
|
|
864
864
|
private translateService;
|
|
865
865
|
moduleConfig: ContextDashboardConfig | undefined;
|
|
866
|
-
widgets:
|
|
866
|
+
widgets: DynamicWidgetDefinition[];
|
|
867
867
|
constructor(dynamicComponentService: DynamicComponentService, translateService: TranslateService, moduleConfig: ContextDashboardConfig | undefined);
|
|
868
|
-
getWidgetDefinition(componentId: any): Promise<
|
|
869
|
-
getWidgetDefinitions():
|
|
868
|
+
getWidgetDefinition(componentId: any): Promise<DynamicWidgetDefinition>;
|
|
869
|
+
getWidgetDefinitions(assetMo?: IManagedObject, dashboardMo?: IManagedObject): Promise<DynamicWidgetDefinition[]>;
|
|
870
870
|
mapLegacy(widget: Partial<Widget>): Promise<Widget>;
|
|
871
871
|
private mapDisplaySettings;
|
|
872
872
|
static ɵfac: i0.ɵɵFactoryDeclaration<WidgetService, [null, null, { optional: true; }]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config/asset-property-mappings.model.ts","../../context-dashboard/widget-config.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts","../../context-dashboard/widget-config/asset-property-mappings.service.ts","../../context-dashboard/widget-config/asset-property-mappings.component.ts","../../context-dashboard/widget-config/asset-property-mappings.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config/asset-property-mappings.model.ts","../../context-dashboard/widget-config.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts","../../context-dashboard/widget-config/asset-property-mappings.service.ts","../../context-dashboard/widget-config/asset-property-mappings.component.ts","../../context-dashboard/widget-config/asset-property-mappings.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
package/echart/index.d.ts
CHANGED
package/echart/models/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Input, Component, Injectable, EventEmitter, inject, NgModule, Output, ChangeDetectorRef, ElementRef, Renderer2, TemplateRef, ContentChild, ViewChild } from '@angular/core';
|
|
3
3
|
import { map, catchError, tap, switchMap, shareReplay, take, filter, mergeAll, toArray } from 'rxjs/operators';
|
|
4
4
|
import * as i2 from '@c8y/ngx-components';
|
|
5
|
-
import { FormGroupComponent, C8yTranslatePipe, Permissions, C8yTranslateDirective, RequiredInputPlaceholderDirective, MinValidationDirective, MaxValidationDirective, MessagesComponent, MessageDirective, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, IconDirective, HelpComponent, CoreModule, hookRoute, DefaultValidationDirective, memoize, SelectLegacyComponent, MoNamePipe, EmptyStateComponent, Status, TabsService, NavigatorNode, hookTab, hookNavigator, hookPatternMessages } from '@c8y/ngx-components';
|
|
5
|
+
import { FormGroupComponent, C8yTranslatePipe, Permissions, C8yTranslateDirective, RequiredInputPlaceholderDirective, MinValidationDirective, MaxValidationDirective, MessagesComponent, MessageDirective, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, IconDirective, HelpComponent, CoreModule, hookRoute, DefaultValidationDirective, memoize, DropAreaComponent, SelectLegacyComponent, MoNamePipe, EmptyStateComponent, Status, TabsService, NavigatorNode, hookTab, hookNavigator, hookPatternMessages } from '@c8y/ngx-components';
|
|
6
6
|
import * as i1$1 from '@c8y/client';
|
|
7
7
|
import { TenantLoginOptionType, TfaStrategy, GrantType, UserManagementSource, TenantLoginOptionsService } from '@c8y/client';
|
|
8
8
|
import * as i1 from '@angular/forms';
|
|
@@ -1289,6 +1289,12 @@ class CustomConfigurationMapper {
|
|
|
1289
1289
|
externalTokenConfig: templateModel.externalTokenConfig.toExternalTokenConfig(),
|
|
1290
1290
|
useIdToken: templateModel.useIdToken
|
|
1291
1291
|
};
|
|
1292
|
+
if (templateModel.mtlsCertificatePem) {
|
|
1293
|
+
ssoConfiguration.mtlsCertificatePem = templateModel.mtlsCertificatePem;
|
|
1294
|
+
}
|
|
1295
|
+
if (templateModel.mtlsPrivateKeyPem) {
|
|
1296
|
+
ssoConfiguration.mtlsPrivateKeyPem = templateModel.mtlsPrivateKeyPem;
|
|
1297
|
+
}
|
|
1292
1298
|
return ssoConfiguration;
|
|
1293
1299
|
}
|
|
1294
1300
|
mapTo(ssoConfiguration) {
|
|
@@ -1312,7 +1318,9 @@ class CustomConfigurationMapper {
|
|
|
1312
1318
|
visibleOnLoginPage: ssoConfiguration.visibleOnLoginPage,
|
|
1313
1319
|
certificateType: CertificateType.CUSTOM,
|
|
1314
1320
|
externalTokenConfig: new ExternalToken(ssoConfiguration.externalTokenConfig),
|
|
1315
|
-
useIdToken: ssoConfiguration.useIdToken
|
|
1321
|
+
useIdToken: ssoConfiguration.useIdToken,
|
|
1322
|
+
mtlsCertificatePem: ssoConfiguration.mtlsCertificatePem || '',
|
|
1323
|
+
mtlsPrivateKeyPem: ssoConfiguration.mtlsPrivateKeyPem || ''
|
|
1316
1324
|
};
|
|
1317
1325
|
}
|
|
1318
1326
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CustomConfigurationMapper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -1513,11 +1521,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
1513
1521
|
}] } });
|
|
1514
1522
|
|
|
1515
1523
|
class BasicConfigurationComponent {
|
|
1524
|
+
get isMtlsPrivateKeyEncrypted() {
|
|
1525
|
+
const value = this.templateModel?.mtlsPrivateKeyPem;
|
|
1526
|
+
return !!value && !value.includes('-----BEGIN');
|
|
1527
|
+
}
|
|
1516
1528
|
constructor(tenantService) {
|
|
1517
1529
|
this.tenantService = tenantService;
|
|
1518
1530
|
this.REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP = gettext("The redirect URL is automatically set to the application used by the user. In case of an error, it will be correctly displayed on the application's page.");
|
|
1531
|
+
this.MTLS_ENABLED_TOOLTIP = gettext('Use a client certificate (mTLS) instead of a client secret to authenticate the platform with the authorization server. Use this option only if the authorization server enforces certificate-based client authentication.');
|
|
1532
|
+
this.MTLS_CERTIFICATE_TOOLTIP = gettext('Public X.509 client certificate in PEM format, issued for this tenant by a CA trusted by your authorization server. Accepted file extension: .pem.');
|
|
1533
|
+
this.MTLS_PRIVATE_KEY_TOOLTIP = gettext('Private key matching the client certificate, in PEM format (PKCS#8). The platform encrypts the key at rest after the first save and will return only an encrypted value on subsequent loads. Accepted file extensions: .pem, .key.');
|
|
1519
1534
|
this.flowControlledByUI = false;
|
|
1520
1535
|
this.redirectToPlatform = '';
|
|
1536
|
+
this.mtlsEnabled = false;
|
|
1537
|
+
this.mtlsCertificateFile = [];
|
|
1538
|
+
this.mtlsPrivateKeyFile = [];
|
|
1539
|
+
this.stashedMtls = {
|
|
1540
|
+
mtlsCertificatePem: '',
|
|
1541
|
+
mtlsPrivateKeyPem: ''
|
|
1542
|
+
};
|
|
1521
1543
|
}
|
|
1522
1544
|
shouldShow(field) {
|
|
1523
1545
|
return field in this.templateModel;
|
|
@@ -1531,9 +1553,44 @@ class BasicConfigurationComponent {
|
|
|
1531
1553
|
};
|
|
1532
1554
|
this.redirectToPlatform = this.templateModel.redirectToPlatform || '';
|
|
1533
1555
|
this.flowControlledByUI = !this.templateModel.redirectToPlatform;
|
|
1556
|
+
this.mtlsEnabled = !!(this.templateModel.mtlsCertificatePem || this.templateModel.mtlsPrivateKeyPem);
|
|
1557
|
+
}
|
|
1558
|
+
onMtlsEnabledChange() {
|
|
1559
|
+
if (this.mtlsEnabled) {
|
|
1560
|
+
this.templateModel.mtlsCertificatePem = this.stashedMtls.mtlsCertificatePem;
|
|
1561
|
+
this.templateModel.mtlsPrivateKeyPem = this.stashedMtls.mtlsPrivateKeyPem;
|
|
1562
|
+
}
|
|
1563
|
+
else {
|
|
1564
|
+
this.stashedMtls = {
|
|
1565
|
+
mtlsCertificatePem: this.templateModel.mtlsCertificatePem || '',
|
|
1566
|
+
mtlsPrivateKeyPem: this.templateModel.mtlsPrivateKeyPem || ''
|
|
1567
|
+
};
|
|
1568
|
+
this.templateModel.mtlsCertificatePem = '';
|
|
1569
|
+
this.templateModel.mtlsPrivateKeyPem = '';
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
uploadMtlsCertificate(dropped) {
|
|
1573
|
+
// c8y-drop-area emits dropped=null once on NgModel init; ignore when nothing was set.
|
|
1574
|
+
if (!dropped?.length && !this.mtlsCertificateFile?.length)
|
|
1575
|
+
return;
|
|
1576
|
+
this.readPemFile(dropped, content => (this.templateModel.mtlsCertificatePem = content));
|
|
1577
|
+
}
|
|
1578
|
+
uploadMtlsPrivateKey(dropped) {
|
|
1579
|
+
if (!dropped?.length && !this.mtlsPrivateKeyFile?.length)
|
|
1580
|
+
return;
|
|
1581
|
+
this.readPemFile(dropped, content => (this.templateModel.mtlsPrivateKeyPem = content));
|
|
1582
|
+
}
|
|
1583
|
+
readPemFile(dropped, onLoaded) {
|
|
1584
|
+
if (!dropped?.length) {
|
|
1585
|
+
onLoaded('');
|
|
1586
|
+
return;
|
|
1587
|
+
}
|
|
1588
|
+
const reader = new FileReader();
|
|
1589
|
+
reader.onload = () => onLoaded(reader.result);
|
|
1590
|
+
reader.readAsText(dropped[0].file);
|
|
1534
1591
|
}
|
|
1535
1592
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: BasicConfigurationComponent, deps: [{ token: i1$1.TenantService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1536
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: BasicConfigurationComponent, isStandalone: true, selector: "c8y-basic-configuration", inputs: { templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"templateModel.redirectToPlatform = flowControlledByUI ? '' : redirectToPlatform\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div *ngIf=\"flowControlledByUI && redirectToPlatform != ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\" or to the full URIs of the used applications if the authorization server does not support patterns.\n </div>\n </div>\n <div *ngIf=\"!flowControlledByUI && redirectToPlatform === ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\".\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
1593
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: BasicConfigurationComponent, isStandalone: true, selector: "c8y-basic-configuration", inputs: { templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n @if (templateModel) {\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <div class=\"row\">\n @if (shouldShow('keyCloakAddress')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://example.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('aadAddress')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('tenant')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'c8y.onmicrosoft.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('applicationId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('realmName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n }\n </div>\n\n @if (shouldShow('redirectToPlatform')) {\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n @if (\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !==\n redirectToPlatformWarningParams.defaultRedirectUrl\n ) {\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n ></button>\n }\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"form-group\">\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{\n 'Redirect to the user interface application`SSO authentication`' | translate\n }}\"\n for=\"flowControlledByUI\"\n >\n <input\n id=\"flowControlledByUI\"\n name=\"flowControlledByUI\"\n type=\"checkbox\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"\n templateModel.redirectToPlatform = flowControlledByUI\n ? ''\n : redirectToPlatform\n \"\n />\n <span></span>\n <span class=\"control-label\">{{\n 'Redirect to the user interface application`SSO authentication`' | translate\n }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n @if (flowControlledByUI && redirectToPlatform !== '') {\n <div>\n <div\n class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\"\n >\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{\n redirectURI\n }}\" or to the full URIs of the used applications if the authorization server\n does not support patterns.\n </div>\n </div>\n }\n @if (!flowControlledByUI && redirectToPlatform === '') {\n <div>\n <div\n class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\"\n >\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{\n redirectURI\n }}\".\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div class=\"row\">\n @if (shouldShow('clientSecret')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('clientId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('issuer')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('scopeId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('buttonName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('providerName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('audience')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n </div>\n\n @if (shouldShow('mtlsCertificatePem')) {\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <label\n class=\"c8y-switch m-b-16\"\n title=\"{{ 'Enable mTLS authentication' | translate }}\"\n for=\"mtlsEnabled\"\n >\n <input\n id=\"mtlsEnabled\"\n name=\"mtlsEnabled\"\n type=\"checkbox\"\n [(ngModel)]=\"mtlsEnabled\"\n (change)=\"onMtlsEnabledChange()\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Enable mTLS authentication' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_ENABLED_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </div>\n <div\n class=\"col-sm-12\"\n [class.hidden]=\"!mtlsEnabled\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Certificate (PEM)' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_CERTIFICATE_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </legend>\n <c8y-form-group>\n <textarea\n class=\"form-control m-b-8 text-monospace\"\n [class.hidden]=\"!templateModel.mtlsCertificatePem\"\n aria-label=\"{{ 'Currently saved certificate' | translate }}\"\n id=\"mtlsCertificatePem\"\n name=\"mtlsCertificatePem\"\n rows=\"4\"\n readonly\n [(ngModel)]=\"templateModel.mtlsCertificatePem\"\n [required]=\"mtlsEnabled\"\n ></textarea>\n @let mtlsAddCertificateLabel = 'Drop file here' | translate;\n @let mtlsReplaceCertificateLabel =\n 'Drop a new certificate to replace' | translate;\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Drop the certificate in PEM format.' | translate\"\n name=\"mtlsCertificateFile\"\n [(ngModel)]=\"mtlsCertificateFile\"\n [message]=\"\n templateModel.mtlsCertificatePem\n ? mtlsReplaceCertificateLabel\n : mtlsAddCertificateLabel\n \"\n data-cy=\"c8y-sso-mtls--certificate-drop-area\"\n (dropped)=\"uploadMtlsCertificate($event)\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"1\"\n [accept]=\"'.pem'\"\n ></c8y-drop-area>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-sm-6\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Private key (PEM)' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_PRIVATE_KEY_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </legend>\n <c8y-form-group>\n <textarea\n class=\"form-control m-b-8 text-monospace\"\n [class.hidden]=\"!templateModel.mtlsPrivateKeyPem\"\n aria-label=\"{{ 'Currently saved private key' | translate }}\"\n id=\"mtlsPrivateKeyPem\"\n name=\"mtlsPrivateKeyPem\"\n rows=\"{{ templateModel.mtlsPrivateKeyPem ? '3' : '4' }}\"\n readonly\n [(ngModel)]=\"templateModel.mtlsPrivateKeyPem\"\n [required]=\"mtlsEnabled\"\n ></textarea>\n @let mtlsAddPrivateKeyLabel = 'Drop file here' | translate;\n @let mtlsReplacePrivateKeyLabel =\n 'Drop a new private key to replace' | translate;\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Drop the private key in PEM format.' | translate\"\n name=\"mtlsPrivateKeyFile\"\n [(ngModel)]=\"mtlsPrivateKeyFile\"\n [message]=\"\n templateModel.mtlsPrivateKeyPem\n ? mtlsReplacePrivateKeyLabel\n : mtlsAddPrivateKeyLabel\n \"\n data-cy=\"c8y-sso-mtls--private-key-drop-area\"\n (dropped)=\"uploadMtlsPrivateKey($event)\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"1\"\n [accept]=\"'.pem,.key'\"\n ></c8y-drop-area>\n\n @if (templateModel.mtlsPrivateKeyPem) {\n <small class=\"text-muted d-flex a-i-center gap-4 m-t-4\">\n <i\n class=\"text-info\"\n c8yIcon=\"info-circle\"\n aria-hidden=\"true\"\n ></i>\n @if (isMtlsPrivateKeyEncrypted) {\n <span translate>\n The private key is encrypted for security reasons.\n </span>\n } @else {\n <span translate>\n The private key will be encrypted on the server after saving.\n </span>\n }\n </small>\n }\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n }\n\n @if (shouldShow('visibleOnLoginPage')) {\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
1537
1594
|
}
|
|
1538
1595
|
__decorate([
|
|
1539
1596
|
memoize(),
|
|
@@ -1545,13 +1602,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
1545
1602
|
type: Component,
|
|
1546
1603
|
args: [{ selector: 'c8y-basic-configuration', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [
|
|
1547
1604
|
C8yTranslateDirective,
|
|
1548
|
-
NgIf,
|
|
1549
1605
|
FormGroupComponent,
|
|
1550
1606
|
RequiredInputPlaceholderDirective,
|
|
1551
1607
|
FormsModule,
|
|
1552
1608
|
PopoverDirective,
|
|
1553
|
-
C8yTranslatePipe
|
|
1554
|
-
], template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"templateModel.redirectToPlatform = flowControlledByUI ? '' : redirectToPlatform\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div *ngIf=\"flowControlledByUI && redirectToPlatform != ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\" or to the full URIs of the used applications if the authorization server does not support patterns.\n </div>\n </div>\n <div *ngIf=\"!flowControlledByUI && redirectToPlatform === ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\".\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n" }]
|
|
1609
|
+
C8yTranslatePipe,
|
|
1610
|
+
DropAreaComponent,
|
|
1611
|
+
IconDirective
|
|
1612
|
+
], template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n @if (templateModel) {\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <div class=\"row\">\n @if (shouldShow('keyCloakAddress')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://example.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('aadAddress')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('tenant')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'c8y.onmicrosoft.de' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('applicationId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('realmName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n }\n </div>\n\n @if (shouldShow('redirectToPlatform')) {\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n @if (\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !==\n redirectToPlatformWarningParams.defaultRedirectUrl\n ) {\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n ></button>\n }\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"form-group\">\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{\n 'Redirect to the user interface application`SSO authentication`' | translate\n }}\"\n for=\"flowControlledByUI\"\n >\n <input\n id=\"flowControlledByUI\"\n name=\"flowControlledByUI\"\n type=\"checkbox\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"\n templateModel.redirectToPlatform = flowControlledByUI\n ? ''\n : redirectToPlatform\n \"\n />\n <span></span>\n <span class=\"control-label\">{{\n 'Redirect to the user interface application`SSO authentication`' | translate\n }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n @if (flowControlledByUI && redirectToPlatform !== '') {\n <div>\n <div\n class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\"\n >\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{\n redirectURI\n }}\" or to the full URIs of the used applications if the authorization server\n does not support patterns.\n </div>\n </div>\n }\n @if (!flowControlledByUI && redirectToPlatform === '') {\n <div>\n <div\n class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\"\n >\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{\n redirectURI\n }}\".\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div class=\"row\">\n @if (shouldShow('clientSecret')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('clientId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('issuer')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n @if (shouldShow('scopeId')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('buttonName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('providerName')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n }\n\n @if (shouldShow('audience')) {\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n }\n </div>\n\n @if (shouldShow('mtlsCertificatePem')) {\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <label\n class=\"c8y-switch m-b-16\"\n title=\"{{ 'Enable mTLS authentication' | translate }}\"\n for=\"mtlsEnabled\"\n >\n <input\n id=\"mtlsEnabled\"\n name=\"mtlsEnabled\"\n type=\"checkbox\"\n [(ngModel)]=\"mtlsEnabled\"\n (change)=\"onMtlsEnabledChange()\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Enable mTLS authentication' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_ENABLED_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </div>\n <div\n class=\"col-sm-12\"\n [class.hidden]=\"!mtlsEnabled\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Certificate (PEM)' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_CERTIFICATE_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </legend>\n <c8y-form-group>\n <textarea\n class=\"form-control m-b-8 text-monospace\"\n [class.hidden]=\"!templateModel.mtlsCertificatePem\"\n aria-label=\"{{ 'Currently saved certificate' | translate }}\"\n id=\"mtlsCertificatePem\"\n name=\"mtlsCertificatePem\"\n rows=\"4\"\n readonly\n [(ngModel)]=\"templateModel.mtlsCertificatePem\"\n [required]=\"mtlsEnabled\"\n ></textarea>\n @let mtlsAddCertificateLabel = 'Drop file here' | translate;\n @let mtlsReplaceCertificateLabel =\n 'Drop a new certificate to replace' | translate;\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Drop the certificate in PEM format.' | translate\"\n name=\"mtlsCertificateFile\"\n [(ngModel)]=\"mtlsCertificateFile\"\n [message]=\"\n templateModel.mtlsCertificatePem\n ? mtlsReplaceCertificateLabel\n : mtlsAddCertificateLabel\n \"\n data-cy=\"c8y-sso-mtls--certificate-drop-area\"\n (dropped)=\"uploadMtlsCertificate($event)\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"1\"\n [accept]=\"'.pem'\"\n ></c8y-drop-area>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-sm-6\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Private key (PEM)' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MTLS_PRIVATE_KEY_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </legend>\n <c8y-form-group>\n <textarea\n class=\"form-control m-b-8 text-monospace\"\n [class.hidden]=\"!templateModel.mtlsPrivateKeyPem\"\n aria-label=\"{{ 'Currently saved private key' | translate }}\"\n id=\"mtlsPrivateKeyPem\"\n name=\"mtlsPrivateKeyPem\"\n rows=\"{{ templateModel.mtlsPrivateKeyPem ? '3' : '4' }}\"\n readonly\n [(ngModel)]=\"templateModel.mtlsPrivateKeyPem\"\n [required]=\"mtlsEnabled\"\n ></textarea>\n @let mtlsAddPrivateKeyLabel = 'Drop file here' | translate;\n @let mtlsReplacePrivateKeyLabel =\n 'Drop a new private key to replace' | translate;\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Drop the private key in PEM format.' | translate\"\n name=\"mtlsPrivateKeyFile\"\n [(ngModel)]=\"mtlsPrivateKeyFile\"\n [message]=\"\n templateModel.mtlsPrivateKeyPem\n ? mtlsReplacePrivateKeyLabel\n : mtlsAddPrivateKeyLabel\n \"\n data-cy=\"c8y-sso-mtls--private-key-drop-area\"\n (dropped)=\"uploadMtlsPrivateKey($event)\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"1\"\n [accept]=\"'.pem,.key'\"\n ></c8y-drop-area>\n\n @if (templateModel.mtlsPrivateKeyPem) {\n <small class=\"text-muted d-flex a-i-center gap-4 m-t-4\">\n <i\n class=\"text-info\"\n c8yIcon=\"info-circle\"\n aria-hidden=\"true\"\n ></i>\n @if (isMtlsPrivateKeyEncrypted) {\n <span translate>\n The private key is encrypted for security reasons.\n </span>\n } @else {\n <span translate>\n The private key will be encrypted on the server after saving.\n </span>\n }\n </small>\n }\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n }\n\n @if (shouldShow('visibleOnLoginPage')) {\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</fieldset>\n" }]
|
|
1555
1613
|
}], ctorParameters: () => [{ type: i1$1.TenantService }], propDecorators: { templateModel: [{
|
|
1556
1614
|
type: Input
|
|
1557
1615
|
}], shouldShow: [] } });
|
|
@@ -2393,6 +2451,12 @@ class KeyCloakConfigurationMapper {
|
|
|
2393
2451
|
externalTokenConfig: templateModel.externalTokenConfig.toExternalTokenConfig(),
|
|
2394
2452
|
useIdToken: templateModel.useIdToken
|
|
2395
2453
|
};
|
|
2454
|
+
if (templateModel.mtlsCertificatePem) {
|
|
2455
|
+
ssoConfiguration.mtlsCertificatePem = templateModel.mtlsCertificatePem;
|
|
2456
|
+
}
|
|
2457
|
+
if (templateModel.mtlsPrivateKeyPem) {
|
|
2458
|
+
ssoConfiguration.mtlsPrivateKeyPem = templateModel.mtlsPrivateKeyPem;
|
|
2459
|
+
}
|
|
2396
2460
|
return ssoConfiguration;
|
|
2397
2461
|
}
|
|
2398
2462
|
mapTo(ssoConfiguration) {
|
|
@@ -2411,7 +2475,9 @@ class KeyCloakConfigurationMapper {
|
|
|
2411
2475
|
visibleOnLoginPage: ssoConfiguration.visibleOnLoginPage,
|
|
2412
2476
|
accessTokenToUserDataMappings: ssoConfiguration.accessTokenToUserDataMappings,
|
|
2413
2477
|
externalTokenConfig: new ExternalToken(ssoConfiguration.externalTokenConfig),
|
|
2414
|
-
useIdToken: ssoConfiguration.useIdToken
|
|
2478
|
+
useIdToken: ssoConfiguration.useIdToken,
|
|
2479
|
+
mtlsCertificatePem: ssoConfiguration.mtlsCertificatePem || '',
|
|
2480
|
+
mtlsPrivateKeyPem: ssoConfiguration.mtlsPrivateKeyPem || ''
|
|
2415
2481
|
};
|
|
2416
2482
|
}
|
|
2417
2483
|
getKeyCloakAddressFromUrl(url) {
|