@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.
Files changed (79) hide show
  1. package/auth-configuration/index.d.ts +19 -1
  2. package/auth-configuration/index.d.ts.map +1 -1
  3. package/context-dashboard/index.d.ts +4 -4
  4. package/context-dashboard/index.d.ts.map +1 -1
  5. package/echart/index.d.ts +1 -1
  6. package/echart/models/index.d.ts +1 -1
  7. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +73 -7
  8. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +21 -7
  10. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-echart.mjs +1 -1
  13. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-global-context.mjs +494 -359
  15. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -2
  17. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +1 -2
  19. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +1 -2
  21. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +1 -2
  23. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs +0 -1
  25. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +0 -1
  27. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs +2 -89
  29. package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +0 -1
  31. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +6 -9
  33. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +2 -2
  35. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
  37. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -2
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +4 -4
  41. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +2 -2
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +2 -2
  45. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components.mjs +39 -16
  47. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  48. package/global-context/index.d.ts +59 -31
  49. package/global-context/index.d.ts.map +1 -1
  50. package/index.d.ts +29 -6
  51. package/index.d.ts.map +1 -1
  52. package/locales/de.po +74 -19
  53. package/locales/es.po +74 -19
  54. package/locales/fr.po +74 -19
  55. package/locales/ja_JP.po +66 -18
  56. package/locales/ko.po +74 -19
  57. package/locales/locales.pot +74 -13
  58. package/locales/nl.po +74 -19
  59. package/locales/pl.po +74 -19
  60. package/locales/pt_BR.po +74 -19
  61. package/locales/zh_CN.po +74 -19
  62. package/locales/zh_TW.po +74 -19
  63. package/package.json +1 -1
  64. package/widgets/definitions/alarms/alarm-list/index.d.ts +0 -1
  65. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  66. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +0 -1
  67. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  68. package/widgets/definitions/alarms/recent-alarms/index.d.ts +0 -1
  69. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  70. package/widgets/definitions/datapoints-list/index.d.ts +0 -1
  71. package/widgets/definitions/datapoints-list/index.d.ts.map +1 -1
  72. package/widgets/definitions/datapoints-table/index.d.ts +0 -1
  73. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  74. package/widgets/definitions/kpi/index.d.ts +0 -1
  75. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  76. package/widgets/implementations/alarms/index.d.ts +5 -8
  77. package/widgets/implementations/alarms/index.d.ts.map +1 -1
  78. package/widgets/implementations/html-widget/index.d.ts +4 -6
  79. 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":"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"}
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: DynamicComponentDefinition[];
866
+ widgets: DynamicWidgetDefinition[];
867
867
  constructor(dynamicComponentService: DynamicComponentService, translateService: TranslateService, moduleConfig: ContextDashboardConfig | undefined);
868
- getWidgetDefinition(componentId: any): Promise<DynamicComponentDefinition>;
869
- getWidgetDefinitions(): any;
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
@@ -200,7 +200,7 @@ interface ModifiedCustomSeriesOptions extends echarts.EChartsOption {
200
200
  isDpTemplateSelected?: boolean;
201
201
  id: string;
202
202
  data: SeriesValue[];
203
- itemStyle: {
203
+ itemStyle?: {
204
204
  color: string;
205
205
  };
206
206
  }
@@ -194,7 +194,7 @@ interface ModifiedCustomSeriesOptions extends echarts.EChartsOption {
194
194
  isDpTemplateSelected?: boolean;
195
195
  id: string;
196
196
  data: SeriesValue[];
197
- itemStyle: {
197
+ itemStyle?: {
198
198
  color: string;
199
199
  };
200
200
  }
@@ -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) {