@microsoft/windows-admin-center-sdk 2.128.0 → 2.165.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 (129) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/sv-SE/strings.json +1 -1
  15. package/angular/assets/strings/tr-TR/strings.json +1 -1
  16. package/angular/assets/strings/zh-CN/strings.json +1 -1
  17. package/angular/assets/strings/zh-TW/strings.json +1 -1
  18. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +706 -507
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  22. package/angular/esm2015/src/controls/accordion/index.js +5 -0
  23. package/angular/esm2015/src/controls/data-table/data-table.component.js +135 -129
  24. package/angular/esm2015/src/controls/dialog/dialog.component.js +11 -5
  25. package/angular/esm2015/src/controls/dialog/dialog.service.js +6 -13
  26. package/angular/esm2015/src/controls/dropdown/dropdown.service.js +3 -2
  27. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +29 -22
  28. package/angular/esm2015/src/controls/form/form-field/datetime-range/datetime-range-form-field.component.js +4 -3
  29. package/angular/esm2015/src/controls/form/form-field/list/list-form-field.component.js +1 -1
  30. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +3 -2
  31. package/angular/esm2015/src/controls/index.js +2 -1
  32. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  33. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +38 -34
  34. package/angular/esm2015/src/controls/settings/settings-content.component.js +3 -2
  35. package/angular/esm2015/src/controls/settings/settings.component.js +45 -13
  36. package/angular/esm2015/src/controls/settings/settings.module.js +5 -1
  37. package/angular/esm2015/src/controls/tooltip/tooltip-zone.directive.js +2 -2
  38. package/angular/esm2015/src/controls/wizard/models/index.js +1 -1
  39. package/angular/esm2015/src/controls/wizard/models/wizard-builder-interface.js +2 -0
  40. package/angular/esm2015/src/controls/wizard/models/wizard-navigation-interface.js +2 -0
  41. package/angular/esm2015/src/controls/wizard/wizard-builder.js +70 -1
  42. package/angular/esm2015/src/controls/wizard/wizard-navigation-information.js +56 -2
  43. package/angular/esm2015/src/controls/wizard/wizard.component.js +8 -2
  44. package/angular/esm2015/src/service/connectivity-enforcer.js +5 -2
  45. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +656 -462
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  47. package/angular/src/controls/accordion/index.d.ts +4 -0
  48. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +2 -1
  49. package/angular/src/controls/index.d.ts +1 -0
  50. package/angular/src/controls/pivot/pivot.component.d.ts +2 -2
  51. package/angular/src/controls/settings/settings.component.d.ts +3 -0
  52. package/angular/src/controls/settings/settings.module.d.ts +3 -2
  53. package/angular/src/controls/wizard/models/index.d.ts +2 -0
  54. package/angular/src/controls/wizard/models/wizard-builder-interface.d.ts +8 -0
  55. package/angular/src/controls/wizard/models/wizard-navigation-interface.d.ts +4 -0
  56. package/angular/src/controls/wizard/wizard-builder.d.ts +36 -1
  57. package/angular/src/controls/wizard/wizard-navigation-information.d.ts +48 -5
  58. package/angular/src/controls/wizard/wizard.component.d.ts +2 -1
  59. package/core/azure/azure-constants.d.ts +8 -0
  60. package/core/azure/azure-constants.js +8 -0
  61. package/core/azure/azure-constants.js.map +1 -1
  62. package/core/azure/azure-manager.d.ts +1 -0
  63. package/core/azure/azure-manager.js +7 -1
  64. package/core/azure/azure-manager.js.map +1 -1
  65. package/core/base/environment.d.ts +3 -0
  66. package/core/base/environment.js.map +1 -1
  67. package/core/base/msft-sme.mock.js +3 -0
  68. package/core/base/msft-sme.mock.js.map +1 -1
  69. package/core/base/utilities.d.ts +0 -3
  70. package/core/base/utilities.js +0 -34
  71. package/core/base/utilities.js.map +1 -1
  72. package/core/data/resource-cache.d.ts +1 -1
  73. package/core/data/resource-cache.js +1 -1
  74. package/core/data/resource-cache.js.map +1 -1
  75. package/core/data/settings-manager.d.ts +3 -0
  76. package/core/data/settings-manager.js +14 -1
  77. package/core/data/settings-manager.js.map +1 -1
  78. package/core/dom/dom.d.ts +5 -0
  79. package/core/dom/dom.js +20 -0
  80. package/core/dom/dom.js.map +1 -1
  81. package/core/manifest/environment-modules.js +3 -0
  82. package/core/manifest/environment-modules.js.map +1 -1
  83. package/core/notification/client-notification-instance.d.ts +5 -2
  84. package/core/notification/client-notification-instance.js +9 -5
  85. package/core/notification/client-notification-instance.js.map +1 -1
  86. package/core/notification/client-notification.d.ts +4 -0
  87. package/core/notification/client-notification.js.map +1 -1
  88. package/core/notification/notification.d.ts +6 -1
  89. package/core/notification/notification.js +3 -1
  90. package/core/notification/notification.js.map +1 -1
  91. package/core/rpc/credssp/rpc-credssp-model.d.ts +4 -0
  92. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  93. package/core/rpc/dialog/rpc-dialog-client.js +11 -5
  94. package/core/rpc/dialog/rpc-dialog-client.js.map +1 -1
  95. package/core/rpc/rpc.d.ts +6 -6
  96. package/core/rpc/rpc.js +7 -7
  97. package/core/rpc/rpc.js.map +1 -1
  98. package/core/security/authorization-manager.js +1 -1
  99. package/core/security/authorization-manager.js.map +1 -1
  100. package/core/security/credssp-manager.d.ts +13 -6
  101. package/core/security/credssp-manager.js +37 -21
  102. package/core/security/credssp-manager.js.map +1 -1
  103. package/core/shared/cluster-inventory/cluster-inventory-cache.js +2 -1
  104. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  105. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  106. package/e2e/assets/strings/de-DE/strings.json +1 -1
  107. package/e2e/assets/strings/es-ES/strings.json +1 -1
  108. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  109. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  110. package/e2e/assets/strings/it-IT/strings.json +1 -1
  111. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  112. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  113. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  114. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  115. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  116. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  117. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  118. package/e2e/assets/strings/strings.json +1 -1
  119. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  120. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  121. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  122. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  123. package/package.json +11 -4
  124. package/styles/css/main.css +1 -1
  125. package/tools/gulp-ps-cim/index.js +1 -1
  126. package/tools/gulp-ps-cim/index.js.map +1 -1
  127. package/angular/assets/strings/en-US/strings.json +0 -1
  128. package/core/assets/strings/en-US/strings.json +0 -1
  129. package/e2e/assets/strings/en-US/strings.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/security/credssp-manager.ts"],"names":[],"mappings":"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","file":"credssp-manager.js","sourcesContent":["import { from, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { filter, mergeMap, take } from 'rxjs/operators';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport {\r\n Credentials,\r\n RpcCredSSPOperation, RpcCredSSPOperationResult, RpcCredSSPOperationType, RpcCredSspResponseKey\r\n} from '../rpc/credssp/rpc-credssp-model';\r\nimport { RpcCredSspRequestClient } from '../rpc/credssp/rpc-credssp-request-client';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport { CreateAuthorizationTokenOptions } from './authorization-manager';\r\n\r\n/**\r\n * CredSPP Manager class. Handles detecting and configuring CredSSP on a set of servers.\r\n */\r\nexport class CredSSPManager {\r\n private watcher: Subject<RpcCredSSPOperationResult>;\r\n\r\n /**\r\n * Initializes a new instance of the Authorization Manager class.\r\n *\r\n * @param rpc The rpc to forward auth requests to a parent window\r\n */\r\n constructor(private rpc: Rpc) {\r\n this.watcher = new Subject<RpcCredSSPOperationResult>();\r\n }\r\n\r\n public initialize() {\r\n // When in Shell do not register.\r\n if (!this.rpc.isShell) {\r\n this.rpc.register(RpcCredSspResponseKey.command, this.onRpcResponse.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * New Enable CredSSP on the passed in server.\r\n *\r\n * @param serverName This server on which CredSSP should be enabled\r\n */\r\n public wsmanEnableManagedServer(serverName: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * New Disable CredSSP for the passed in server.\r\n *\r\n * @param serverName This server on which CredSSP should be disabled\r\n */\r\n public wsmanDisableManagedServer(serverName: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * New Enable CredSSP client role for the gateway and delegate to the list of servers.\r\n *\r\n * @param serverNames This list of servers where CredSSP should be enabled.\r\n */\r\n public wsmanEnableClientRole(serverNames: string[]): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableClientRole,\r\n serverNames: serverNames,\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * New Disable CredSSP client role for the gateway and remove all delegated servers.\r\n *\r\n * @param serverNames This list of servers where CredSSP should be disabled.\r\n */\r\n public wsmanDisableClientRole(serverNames: string[]): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableClientRole,\r\n serverNames,\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * New Enable the server as a CredSSP server, and enable the gateway as a CredSSP client of the server.\r\n *\r\n * @param serverName The sever where CredSSP delegation should be enabled.\r\n */\r\n public wsmanEnableDelegation(serverName: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('The server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableDelegation,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * Test WSMan CredSSP connection from gateway to server(s)\r\n * @param serverNames the servers to test connection to from gateway\r\n * @param credentials explicit credentials(username and password) to be used to WSMan CredSSP test\r\n * @returns true if we can safely connect to all server without isssues otherwise returns false\r\n */\r\n public testCredSSP(serverNames: string[], credentials: Credentials): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames.length || serverNames.some(\r\n serverName => MsftSme.isNullOrWhiteSpace(serverName))\r\n ) {\r\n throw new Error('The server name(s) must be provided.');\r\n }\r\n\r\n if (!credentials || !credentials.username || !credentials.password) {\r\n throw new Error('Username and password must be provided in the options.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.TestCredSSP,\r\n serverNames: serverNames,\r\n credentials,\r\n notificationTitle: null,\r\n notificationId: null\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableManagedServer instead.\r\n *\r\n * Enable CredSSP on the passed in server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName This server on which CredSSP should be enabled\r\n * @param alertId Optional notification Id\r\n */\r\n public enableManagedServer(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanDisableManagedServer instead.\r\n *\r\n * Disable CredSSP for the passed in server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName This server on which CredSSP should be disabled\r\n * @param alertId Optional notification Id\r\n */\r\n public disableManagedServer(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableClientRole instead.\r\n *\r\n * Enable CredSSP client role for the gateway and delegate to the list of servers.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverNames This list of servers where CredSSP should be enabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public enableClientRole(alertTitle: string, serverNames: string[], alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableClientRole,\r\n serverNames: serverNames,\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanDisableClientRole instead.\r\n *\r\n * Disable CredSSP client role for the gateway and remove all delegated servers.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverNames This list of servers where CredSSP should be disabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public disableClientRole(alertTitle: string, serverNames: string[], alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableClientRole,\r\n serverNames,\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n });\r\n }\r\n\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableDelegation instead.\r\n *\r\n * Enable the server as a CredSSP server, and enable the gateway as a CredSSP client of the server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName The sever where CredSSP delegation should be enabled.\r\n * @param disableTaskDelay Time in hours, for the scheduled that disables CredSSP to wait before being triggered\r\n * @param alertId Optional notification Id\r\n */\r\n public enableDelegation(alertTitle: string, serverName: string, alertId?: string, disableTaskDelay?: number): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('The server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableDelegation,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * This method is obsolete!\r\n *\r\n * Disable the server as a CredSSP server, and disable the gateway as a CredSSP client of the server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName The sever where CredSSP delegation should be disabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public disableDelegation(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n return of(true);\r\n }\r\n\r\n /**\r\n * The RPC request to the CredSSPManagerShellService.\r\n * @param request The requested CredSSP manager operation\r\n */\r\n private sendRequest(request: RpcCredSSPOperation): Observable<boolean> {\r\n Logging.logDebug(\r\n 'CredSSPManager',\r\n 'Sending request to CredSSPManagerService. Request:{0}'.format(JSON.stringify(request)));\r\n\r\n return from(RpcCredSspRequestClient.credSspRequest(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter(result => result.requestId === request.requestId),\r\n take(1),\r\n mergeMap(result => {\r\n if (result.error) {\r\n // shell reports 'error' property originated from the CredSSP operation.\r\n // the client using this API should get this error message to display to user.\r\n return throwError(new Error(result.error));\r\n }\r\n\r\n return of(result.succeeded);\r\n }));\r\n }\r\n\r\n /**\r\n * Process the RPC response from the CredSSPManagerShellService.\r\n * @param data The requested CredSSP manager operation result.\r\n */\r\n private onRpcResponse(data: RpcCredSSPOperationResult): Promise<any> {\r\n Logging.logDebug(\r\n 'CredSSPManager',\r\n 'Processing response from CredSSPManagerService Response:{0}'.format(JSON.stringify(data)));\r\n\r\n this.watcher.next(data);\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/security/credssp-manager.ts"],"names":[],"mappings":"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","file":"credssp-manager.js","sourcesContent":["import { from, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { filter, mergeMap, take } from 'rxjs/operators';\r\nimport { ErrorExtended } from '../data/error-extended';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport {\r\n Credentials,\r\n RpcCredSSPOperation, RpcCredSSPOperationResult, RpcCredSSPOperationType, RpcCredSspResponseKey\r\n} from '../rpc/credssp/rpc-credssp-model';\r\nimport { RpcCredSspRequestClient } from '../rpc/credssp/rpc-credssp-request-client';\r\nimport { Rpc } from '../rpc/rpc';\r\n\r\n/**\r\n * CredSPP Manager class. Handles detecting and configuring CredSSP on a set of servers.\r\n */\r\nexport class CredSSPManager {\r\n private watcher: Subject<RpcCredSSPOperationResult>;\r\n\r\n /**\r\n * Initializes a new instance of the Authorization Manager class.\r\n *\r\n * @param rpc The rpc to forward auth requests to a parent window\r\n */\r\n constructor(private rpc: Rpc) {\r\n this.watcher = new Subject<RpcCredSSPOperationResult>();\r\n }\r\n\r\n public initialize() {\r\n // When in Shell do not register.\r\n if (!this.rpc.isShell) {\r\n this.rpc.register(RpcCredSspResponseKey.command, this.onRpcResponse.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * New Enable CredSSP on the passed in server.\r\n *\r\n * @param serverName This server on which CredSSP should be enabled\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n public wsmanEnableManagedServer(serverName: string, verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * New Disable CredSSP for the passed in server.\r\n *\r\n * @param serverName This server on which CredSSP should be disabled\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n public wsmanDisableManagedServer(serverName: string, verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * New Enable CredSSP client role for the gateway and delegate to the list of servers.\r\n *\r\n * @param serverNames This list of servers where CredSSP should be enabled.\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n public wsmanEnableClientRole(serverNames: string[], verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableClientRole,\r\n serverNames: serverNames,\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * New Disable CredSSP client role for the gateway and remove all delegated servers.\r\n *\r\n * @param serverNames This list of servers where CredSSP should be disabled.\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n public wsmanDisableClientRole(serverNames: string[], verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableClientRole,\r\n serverNames,\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * New Enable the server as a CredSSP server, and enable the gateway as a CredSSP client of the server.\r\n *\r\n * @param serverName The sever where CredSSP delegation should be enabled.\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n public wsmanEnableDelegation(serverName: string, verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('The server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableDelegation,\r\n serverNames: [serverName],\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * Test WSMan CredSSP connection from gateway to server(s)\r\n * @param serverNames the servers to test connection to from gateway\r\n * @param credentials explicit credentials(username and password) to be used to WSMan CredSSP test\r\n * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored\r\n * @returns true if we can safely connect to all server without isssues otherwise returns false\r\n */\r\n public testCredSSP(serverNames: string[], credentials: Credentials, verbose: boolean = false): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames.length || serverNames.some(\r\n serverName => MsftSme.isNullOrWhiteSpace(serverName))\r\n ) {\r\n throw new Error('The server name(s) must be provided.');\r\n }\r\n\r\n if (!credentials || !credentials.username || !credentials.password) {\r\n throw new Error('Username and password must be provided in the options.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.TestCredSSP,\r\n serverNames: serverNames,\r\n credentials,\r\n notificationTitle: null,\r\n notificationId: null\r\n }, verbose);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableManagedServer instead.\r\n *\r\n * Enable CredSSP on the passed in server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName This server on which CredSSP should be enabled\r\n * @param alertId Optional notification Id\r\n */\r\n public enableManagedServer(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n }, false);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanDisableManagedServer instead.\r\n *\r\n * Disable CredSSP for the passed in server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName This server on which CredSSP should be disabled\r\n * @param alertId Optional notification Id\r\n */\r\n public disableManagedServer(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('A server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableManagedServer,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n }, false);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableClientRole instead.\r\n *\r\n * Enable CredSSP client role for the gateway and delegate to the list of servers.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverNames This list of servers where CredSSP should be enabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public enableClientRole(alertTitle: string, serverNames: string[], alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableClientRole,\r\n serverNames: serverNames,\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n }, false);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanDisableClientRole instead.\r\n *\r\n * Disable CredSSP client role for the gateway and remove all delegated servers.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverNames This list of servers where CredSSP should be disabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public disableClientRole(alertTitle: string, serverNames: string[], alertId?: string): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (!serverNames || serverNames.length < 1) {\r\n throw new Error('At least one server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.DisableClientRole,\r\n serverNames,\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n }, false);\r\n }\r\n\r\n\r\n /**\r\n * @deprecated\r\n * Notification message wouldn't be displayed from this call. Display the notification by own code,\r\n * and use wsmanEnableDelegation instead.\r\n *\r\n * Enable the server as a CredSSP server, and enable the gateway as a CredSSP client of the server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName The sever where CredSSP delegation should be enabled.\r\n * @param disableTaskDelay Time in hours, for the scheduled that disables CredSSP to wait before being triggered\r\n * @param alertId Optional notification Id\r\n */\r\n public enableDelegation(alertTitle: string, serverName: string, alertId?: string, disableTaskDelay?: number): Observable<boolean> {\r\n if (this.rpc.isShell) {\r\n throw new Error('Not supported on the shell environment.');\r\n }\r\n\r\n if (MsftSme.isNullOrWhiteSpace(serverName)) {\r\n throw new Error('The server name must be provided.');\r\n }\r\n\r\n return this.sendRequest({\r\n requestId: MsftSme.getUniqueId(),\r\n operation: RpcCredSSPOperationType.EnableDelegation,\r\n serverNames: [serverName],\r\n notificationTitle: alertTitle,\r\n notificationId: alertId\r\n }, false);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * This method is obsolete!\r\n *\r\n * Disable the server as a CredSSP server, and disable the gateway as a CredSSP client of the server.\r\n *\r\n * @param alertTitle Title for notifications raised by this servers. Should be contextual to the scenario that is using this service\r\n * @param serverName The sever where CredSSP delegation should be disabled.\r\n * @param alertId Optional notification Id\r\n */\r\n public disableDelegation(alertTitle: string, serverName: string, alertId?: string): Observable<boolean> {\r\n return of(true);\r\n }\r\n\r\n /**\r\n * The RPC request to the CredSSPManagerShellService.\r\n * @param request The requested CredSSP manager operation\r\n * @param verbose Specify whether a solution (if any) should be returned if CredSSP errored\r\n */\r\n private sendRequest(request: RpcCredSSPOperation, verbose: boolean): Observable<boolean> {\r\n Logging.logDebug(\r\n 'CredSSPManager',\r\n 'Sending request to CredSSPManagerService. Request:{0}'.format(JSON.stringify(request)));\r\n\r\n return from(RpcCredSspRequestClient.credSspRequest(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter(result => result.requestId === request.requestId),\r\n take(1),\r\n mergeMap(result => {\r\n // shell reports 'error' property originated from the CredSSP operation.\r\n // the client using this API should get this error message to display to user.\r\n if (result.error) {\r\n if (verbose) {\r\n const error = new ErrorExtended<{solutionMessage: string}>(result.error);\r\n error.extendedSource = `${request.operation}-credSSPError`;\r\n error.extended = { solutionMessage: result.solutionMessage };\r\n return throwError(error);\r\n } else {\r\n return throwError(new Error(result.error));\r\n }\r\n }\r\n\r\n return of(result.succeeded);\r\n }));\r\n }\r\n\r\n /**\r\n * Process the RPC response from the CredSSPManagerShellService.\r\n * @param data The requested CredSSP manager operation result.\r\n */\r\n private onRpcResponse(data: RpcCredSSPOperationResult): Promise<any> {\r\n Logging.logDebug(\r\n 'CredSSPManager',\r\n 'Processing response from CredSSPManagerService Response:{0}'.format(JSON.stringify(data)));\r\n\r\n this.watcher.next(data);\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n"]}
@@ -60,6 +60,7 @@ export class ClusterInventoryCache extends SharedCache {
60
60
  const clusterNodePsSession = this.appContext.powerShell.createSession(params.name, null, options);
61
61
  return zip(this.appContext.powerShell.run(clusterPsSession, PowerShellScripts.Get_ClusterInventory), this.appContext.powerShell.run(clusterNodePsSession, PowerShellScripts.Get_ClusterNodes))
62
62
  .pipe(map(([cluster, nodes]) => {
63
+ var _a;
63
64
  const inventory = new ClusterInventory(params.name);
64
65
  if (!cluster || !cluster.results || cluster.results.length === 0) {
65
66
  return inventory;
@@ -72,7 +73,7 @@ export class ClusterInventoryCache extends SharedCache {
72
73
  const nodesResultLower = {};
73
74
  // make node name and fqdn lower casing.
74
75
  inventory.isClusterCmdletAvailable = clusterResult.isClusterCmdletAvailable;
75
- clusterResult.fqdn = clusterResult.fqdn.toLowerCase();
76
+ clusterResult.fqdn = (_a = clusterResult.fqdn) === null || _a === void 0 ? void 0 : _a.toLowerCase();
76
77
  inventory.fqdn = clusterResult.fqdn;
77
78
  inventory.currentClusterNode = clusterResult.currentClusterNode.toLowerCase();
78
79
  inventory.nodeNames = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/shared/cluster-inventory/cluster-inventory-cache.ts"],"names":[],"mappings":"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","file":"cluster-inventory-cache.js","sourcesContent":["import { Observable, of, zip } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { NodeRequestOptions } from '../../data/node-connection';\r\nimport { PowerShellBatchResponseItem } from '../../data/powershell-batch';\r\nimport { PowerShellScripts } from '../../generated/powershell-scripts';\r\nimport { ServerInventoryCache } from '../server-inventory/server-inventory-cache';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ClusterInventory, ClusterInventoryData, ClusterInventoryParams } from './cluster-inventory';\r\nimport { ClusterNodeInventory, ClusterNodeState } from './cluster-node-inventory';\r\n\r\n/**\r\n * Cluster Inventory cache class.\r\n */\r\nexport class ClusterInventoryCache extends SharedCache<ClusterInventory, ClusterInventoryData, ClusterInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:clusterInventory';\r\n private static uniqueVersion = 1; // increment this if you make breaking changes\r\n\r\n private serverInventoryCache: ServerInventoryCache;\r\n\r\n /**\r\n * Initializes a new instance of the ClusterInventoryCache class.\r\n *\r\n * @param appContext the app context.\r\n * @param options the option of shared cache.\r\n */\r\n constructor(private appContext: AppContext, options?: SharedCacheOptions) {\r\n super(\r\n ClusterInventoryCache.uniqueId,\r\n ClusterInventoryCache.uniqueVersion,\r\n (params) => this.dataInstanceId(params),\r\n (instance) => this.dataSerialize(instance),\r\n (serialized) => this.dataDeserialize(serialized),\r\n (params) => this.dataQuery(params),\r\n options);\r\n\r\n this.serverInventoryCache = new ServerInventoryCache(appContext);\r\n }\r\n\r\n /**\r\n * Defines how to identify the cache entry by params.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the id string.\r\n */\r\n private dataInstanceId(params: ClusterInventoryParams): string {\r\n return params.name;\r\n }\r\n\r\n /**\r\n * Defines how to deserialize the class object from serialized data.\r\n *\r\n * @param serialized the serialized string;\r\n */\r\n private dataDeserialize(serialized: string): ClusterInventory {\r\n const inventory: ClusterInventoryData = JSON.parse(serialized);\r\n return new ClusterInventory(inventory.clusterName, inventory);\r\n }\r\n\r\n /**\r\n * Defines how to serialize the class object to serialized data.\r\n *\r\n * @param instance the class instance.\r\n */\r\n private dataSerialize(instance: ClusterInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n\r\n /**\r\n * Defines how to collect the cluster inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ClusterInventory data.\r\n */\r\n private dataQuery(params: ClusterInventoryParams): Observable<ClusterInventory> {\r\n // options object will be updated at the http layer, so it makes an each copy before passing.\r\n const options = { ...params.requestOptions };\r\n const clusterPsSession = this.appContext.powerShell.createSession(params.name, null, options);\r\n const clusterNodePsSession = this.appContext.powerShell.createSession(params.name, null, options);\r\n\r\n return zip<any, any>(\r\n this.appContext.powerShell.run(clusterPsSession, PowerShellScripts.Get_ClusterInventory),\r\n this.appContext.powerShell.run(clusterNodePsSession, PowerShellScripts.Get_ClusterNodes))\r\n .pipe(map<any, any>(([cluster, nodes]) => {\r\n const inventory = new ClusterInventory(params.name);\r\n\r\n if (!cluster || !cluster.results || cluster.results.length === 0) {\r\n return inventory;\r\n }\r\n\r\n if (!nodes || !nodes.results || nodes.results.length === 0) {\r\n return inventory;\r\n }\r\n\r\n const nodesResult = nodes.results[0];\r\n const clusterResult = cluster.results[0];\r\n const nodesResultLower = {};\r\n\r\n // make node name and fqdn lower casing.\r\n inventory.isClusterCmdletAvailable = clusterResult.isClusterCmdletAvailable;\r\n clusterResult.fqdn = clusterResult.fqdn.toLowerCase();\r\n inventory.fqdn = clusterResult.fqdn;\r\n inventory.currentClusterNode = clusterResult.currentClusterNode.toLowerCase();\r\n inventory.nodeNames = [];\r\n for (const node in nodesResult) {\r\n if (node && nodesResult[node] && nodesResult[node].name) {\r\n nodesResult[node].name = nodesResult[node].name.toLowerCase();\r\n nodesResult[node].fullyQualifiedDomainName = nodesResult[node].fullyQualifiedDomainName.toLowerCase();\r\n inventory.nodeNames.push(nodesResult[node].name);\r\n const nodeLower = node.toLowerCase();\r\n nodesResultLower[nodeLower] = nodesResult[node];\r\n }\r\n }\r\n\r\n inventory.isS2dEnabled = clusterResult.isS2DEnabled;\r\n inventory.isTsdbEnabled = clusterResult.isTsdbEnabled;\r\n inventory.isBritannicaEnabled = clusterResult.isBritannicaEnabled;\r\n inventory.isBritannicaVirtualMachineEnabled = clusterResult.isBritannicaVirtualMachineEnabled;\r\n inventory.isBritannicaVirtualSwitchEnabled = clusterResult.isBritannicaVirtualSwitchEnabled;\r\n inventory.isClusterHealthCmdletAvailable = clusterResult.isClusterHealthCmdletAvailable;\r\n inventory.isHyperVPowershellInstalled = false;\r\n inventory.isHyperVRoleInstalled = false;\r\n inventory.isManagementToolsAvailable = false;\r\n inventory.nodeMap = nodesResultLower;\r\n return inventory;\r\n }),\r\n mergeMap(inventory => this.queryClusterNodeInventories(inventory, params)));\r\n }\r\n\r\n /**\r\n * Defines how to collect the cluster node-server inventory data.\r\n * @param clusterInventory the initial cluster inventory query params.\r\n * @param params the parameters for cluster inventory query.\r\n * @return Observable<ClusterInventory> the Observable of ClusterInventory data.\r\n */\r\n private queryClusterNodeInventories(clusterInventory: ClusterInventory, params: ClusterInventoryParams): Observable<ClusterInventory> {\r\n if (!clusterInventory.nodeNames || clusterInventory.nodeNames.length === 0) {\r\n return of(clusterInventory);\r\n }\r\n\r\n // Can only get server inventory data from live nodes\r\n const nodeMap = clusterInventory.nodeMap;\r\n const liveNodeNames: string[] = [];\r\n for (const key in nodeMap) {\r\n if (nodeMap[key].state === ClusterNodeState.Up || nodeMap[key].state === ClusterNodeState.Paused) {\r\n liveNodeNames.push(nodeMap[key].fullyQualifiedDomainName);\r\n }\r\n }\r\n\r\n const authToken = this.appContext.authorizationManager.getSavedNodeToken(params.name);\r\n let options: NodeRequestOptions = {};\r\n\r\n if (params.requestOptions) {\r\n options = <NodeRequestOptions>{ ...params.requestOptions };\r\n\r\n if (options.authToken == null && authToken) {\r\n // override auth token if not there.\r\n options.authToken = authToken;\r\n }\r\n } else if (authToken) {\r\n options.authToken = authToken;\r\n }\r\n\r\n const errorMessages: string[] = [];\r\n\r\n const batchSession = this.appContext.powerShell.createBatchSession(liveNodeNames, null, options);\r\n return this.appContext.powerShell.runBatchSingleCommand(batchSession, PowerShellScripts.Get_ServerInventory)\r\n .pipe(map((responseItems: PowerShellBatchResponseItem[]) => {\r\n for (let index = 0; index < responseItems.length; index++) {\r\n const response = responseItems[index];\r\n\r\n if (response.error || response.errors) {\r\n const message = (response.error && response.error.message) ||\r\n (response.errors && response.errors[0] && response.errors[0].message);\r\n errorMessages.push(message);\r\n continue;\r\n }\r\n\r\n const currentServer = liveNodeNames[index];\r\n const serverNameParts: string[] = currentServer.split('.');\r\n const serverName = serverNameParts.length > 1 ? serverNameParts[0] : currentServer;\r\n\r\n const data = response.properties;\r\n const serverInventory = ServerInventoryCache.createServerInventoryData(serverName, data);\r\n\r\n this.serverInventoryCache.save({ name: serverName }, serverInventory);\r\n\r\n const inventoryServerName = clusterInventory.nodeMap[clusterInventory.currentClusterNode].name;\r\n\r\n if (serverName === inventoryServerName) {\r\n clusterInventory.isHyperVPowershellInstalled = serverInventory.isHyperVPowershellInstalled;\r\n clusterInventory.isHyperVRoleInstalled = serverInventory.isHyperVRoleInstalled;\r\n clusterInventory.isManagementToolsAvailable = serverInventory.isManagementToolsAvailable;\r\n }\r\n\r\n // combine cluster node inventory and server inventory\r\n const clusterNodeInventory = new ClusterNodeInventory(serverName);\r\n const clusterServerInventory = clusterInventory.nodeMap[serverName];\r\n\r\n Object.assign(clusterNodeInventory, serverInventory);\r\n\r\n for (const property in clusterServerInventory) {\r\n if (property) {\r\n clusterNodeInventory[property] = clusterServerInventory[property];\r\n }\r\n }\r\n\r\n clusterInventory.nodeMap[serverName] = clusterNodeInventory;\r\n }\r\n\r\n if (errorMessages.length > 0) {\r\n clusterInventory.clusterErrors = errorMessages;\r\n }\r\n\r\n return clusterInventory;\r\n }));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/shared/cluster-inventory/cluster-inventory-cache.ts"],"names":[],"mappings":"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","file":"cluster-inventory-cache.js","sourcesContent":["import { Observable, of, zip } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { NodeRequestOptions } from '../../data/node-connection';\r\nimport { PowerShellBatchResponseItem } from '../../data/powershell-batch';\r\nimport { PowerShellScripts } from '../../generated/powershell-scripts';\r\nimport { ServerInventoryCache } from '../server-inventory/server-inventory-cache';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ClusterInventory, ClusterInventoryData, ClusterInventoryParams } from './cluster-inventory';\r\nimport { ClusterNodeInventory, ClusterNodeState } from './cluster-node-inventory';\r\n\r\n/**\r\n * Cluster Inventory cache class.\r\n */\r\nexport class ClusterInventoryCache extends SharedCache<ClusterInventory, ClusterInventoryData, ClusterInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:clusterInventory';\r\n private static uniqueVersion = 1; // increment this if you make breaking changes\r\n\r\n private serverInventoryCache: ServerInventoryCache;\r\n\r\n /**\r\n * Initializes a new instance of the ClusterInventoryCache class.\r\n *\r\n * @param appContext the app context.\r\n * @param options the option of shared cache.\r\n */\r\n constructor(private appContext: AppContext, options?: SharedCacheOptions) {\r\n super(\r\n ClusterInventoryCache.uniqueId,\r\n ClusterInventoryCache.uniqueVersion,\r\n (params) => this.dataInstanceId(params),\r\n (instance) => this.dataSerialize(instance),\r\n (serialized) => this.dataDeserialize(serialized),\r\n (params) => this.dataQuery(params),\r\n options);\r\n\r\n this.serverInventoryCache = new ServerInventoryCache(appContext);\r\n }\r\n\r\n /**\r\n * Defines how to identify the cache entry by params.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the id string.\r\n */\r\n private dataInstanceId(params: ClusterInventoryParams): string {\r\n return params.name;\r\n }\r\n\r\n /**\r\n * Defines how to deserialize the class object from serialized data.\r\n *\r\n * @param serialized the serialized string;\r\n */\r\n private dataDeserialize(serialized: string): ClusterInventory {\r\n const inventory: ClusterInventoryData = JSON.parse(serialized);\r\n return new ClusterInventory(inventory.clusterName, inventory);\r\n }\r\n\r\n /**\r\n * Defines how to serialize the class object to serialized data.\r\n *\r\n * @param instance the class instance.\r\n */\r\n private dataSerialize(instance: ClusterInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n\r\n /**\r\n * Defines how to collect the cluster inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ClusterInventory data.\r\n */\r\n private dataQuery(params: ClusterInventoryParams): Observable<ClusterInventory> {\r\n // options object will be updated at the http layer, so it makes an each copy before passing.\r\n const options = { ...params.requestOptions };\r\n const clusterPsSession = this.appContext.powerShell.createSession(params.name, null, options);\r\n const clusterNodePsSession = this.appContext.powerShell.createSession(params.name, null, options);\r\n\r\n return zip<any, any>(\r\n this.appContext.powerShell.run(clusterPsSession, PowerShellScripts.Get_ClusterInventory),\r\n this.appContext.powerShell.run(clusterNodePsSession, PowerShellScripts.Get_ClusterNodes))\r\n .pipe(map<any, any>(([cluster, nodes]) => {\r\n const inventory = new ClusterInventory(params.name);\r\n\r\n if (!cluster || !cluster.results || cluster.results.length === 0) {\r\n return inventory;\r\n }\r\n\r\n if (!nodes || !nodes.results || nodes.results.length === 0) {\r\n return inventory;\r\n }\r\n\r\n const nodesResult = nodes.results[0];\r\n const clusterResult = cluster.results[0];\r\n const nodesResultLower = {};\r\n\r\n // make node name and fqdn lower casing.\r\n inventory.isClusterCmdletAvailable = clusterResult.isClusterCmdletAvailable;\r\n clusterResult.fqdn = clusterResult.fqdn?.toLowerCase();\r\n inventory.fqdn = clusterResult.fqdn;\r\n inventory.currentClusterNode = clusterResult.currentClusterNode.toLowerCase();\r\n inventory.nodeNames = [];\r\n for (const node in nodesResult) {\r\n if (node && nodesResult[node] && nodesResult[node].name) {\r\n nodesResult[node].name = nodesResult[node].name.toLowerCase();\r\n nodesResult[node].fullyQualifiedDomainName = nodesResult[node].fullyQualifiedDomainName.toLowerCase();\r\n inventory.nodeNames.push(nodesResult[node].name);\r\n const nodeLower = node.toLowerCase();\r\n nodesResultLower[nodeLower] = nodesResult[node];\r\n }\r\n }\r\n\r\n inventory.isS2dEnabled = clusterResult.isS2DEnabled;\r\n inventory.isTsdbEnabled = clusterResult.isTsdbEnabled;\r\n inventory.isBritannicaEnabled = clusterResult.isBritannicaEnabled;\r\n inventory.isBritannicaVirtualMachineEnabled = clusterResult.isBritannicaVirtualMachineEnabled;\r\n inventory.isBritannicaVirtualSwitchEnabled = clusterResult.isBritannicaVirtualSwitchEnabled;\r\n inventory.isClusterHealthCmdletAvailable = clusterResult.isClusterHealthCmdletAvailable;\r\n inventory.isHyperVPowershellInstalled = false;\r\n inventory.isHyperVRoleInstalled = false;\r\n inventory.isManagementToolsAvailable = false;\r\n inventory.nodeMap = nodesResultLower;\r\n return inventory;\r\n }),\r\n mergeMap(inventory => this.queryClusterNodeInventories(inventory, params)));\r\n }\r\n\r\n /**\r\n * Defines how to collect the cluster node-server inventory data.\r\n * @param clusterInventory the initial cluster inventory query params.\r\n * @param params the parameters for cluster inventory query.\r\n * @return Observable<ClusterInventory> the Observable of ClusterInventory data.\r\n */\r\n private queryClusterNodeInventories(clusterInventory: ClusterInventory, params: ClusterInventoryParams): Observable<ClusterInventory> {\r\n if (!clusterInventory.nodeNames || clusterInventory.nodeNames.length === 0) {\r\n return of(clusterInventory);\r\n }\r\n\r\n // Can only get server inventory data from live nodes\r\n const nodeMap = clusterInventory.nodeMap;\r\n const liveNodeNames: string[] = [];\r\n for (const key in nodeMap) {\r\n if (nodeMap[key].state === ClusterNodeState.Up || nodeMap[key].state === ClusterNodeState.Paused) {\r\n liveNodeNames.push(nodeMap[key].fullyQualifiedDomainName);\r\n }\r\n }\r\n\r\n const authToken = this.appContext.authorizationManager.getSavedNodeToken(params.name);\r\n let options: NodeRequestOptions = {};\r\n\r\n if (params.requestOptions) {\r\n options = <NodeRequestOptions>{ ...params.requestOptions };\r\n\r\n if (options.authToken == null && authToken) {\r\n // override auth token if not there.\r\n options.authToken = authToken;\r\n }\r\n } else if (authToken) {\r\n options.authToken = authToken;\r\n }\r\n\r\n const errorMessages: string[] = [];\r\n\r\n const batchSession = this.appContext.powerShell.createBatchSession(liveNodeNames, null, options);\r\n return this.appContext.powerShell.runBatchSingleCommand(batchSession, PowerShellScripts.Get_ServerInventory)\r\n .pipe(map((responseItems: PowerShellBatchResponseItem[]) => {\r\n for (let index = 0; index < responseItems.length; index++) {\r\n const response = responseItems[index];\r\n\r\n if (response.error || response.errors) {\r\n const message = (response.error && response.error.message) ||\r\n (response.errors && response.errors[0] && response.errors[0].message);\r\n errorMessages.push(message);\r\n continue;\r\n }\r\n\r\n const currentServer = liveNodeNames[index];\r\n const serverNameParts: string[] = currentServer.split('.');\r\n const serverName = serverNameParts.length > 1 ? serverNameParts[0] : currentServer;\r\n\r\n const data = response.properties;\r\n const serverInventory = ServerInventoryCache.createServerInventoryData(serverName, data);\r\n\r\n this.serverInventoryCache.save({ name: serverName }, serverInventory);\r\n\r\n const inventoryServerName = clusterInventory.nodeMap[clusterInventory.currentClusterNode].name;\r\n\r\n if (serverName === inventoryServerName) {\r\n clusterInventory.isHyperVPowershellInstalled = serverInventory.isHyperVPowershellInstalled;\r\n clusterInventory.isHyperVRoleInstalled = serverInventory.isHyperVRoleInstalled;\r\n clusterInventory.isManagementToolsAvailable = serverInventory.isManagementToolsAvailable;\r\n }\r\n\r\n // combine cluster node inventory and server inventory\r\n const clusterNodeInventory = new ClusterNodeInventory(serverName);\r\n const clusterServerInventory = clusterInventory.nodeMap[serverName];\r\n\r\n Object.assign(clusterNodeInventory, serverInventory);\r\n\r\n for (const property in clusterServerInventory) {\r\n if (property) {\r\n clusterNodeInventory[property] = clusterServerInventory[property];\r\n }\r\n }\r\n\r\n clusterInventory.nodeMap[serverName] = clusterNodeInventory;\r\n }\r\n\r\n if (errorMessages.length > 0) {\r\n clusterInventory.clusterErrors = errorMessages;\r\n }\r\n\r\n return clusterInventory;\r\n }));\r\n }\r\n}\r\n"]}