@microsoft/windows-admin-center-sdk 2.186.0 → 2.295.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1103 -1209
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/actions/actions.module.js +2 -2
- package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -2
- package/angular/esm2015/src/controls/actions/items/action-button/action-button-renderer.component.js +5 -5
- package/angular/esm2015/src/controls/actions/items/action-dropdown/action-dropdown.component.js +31 -13
- package/angular/esm2015/src/controls/actions/items/action-item.component.js +7 -3
- package/angular/esm2015/src/controls/badge/badge-base.component.js +2 -13
- package/angular/esm2015/src/controls/badge/bugfixes-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/coming-soon-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/credssp-enabled-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/critical-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/custom-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/feedback-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/improvement-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/new-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/new-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/preview-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/warning-badge.component.js +42 -70
- package/angular/esm2015/src/controls/breadcrumb/breadcrumb.component.js +6 -6
- package/angular/esm2015/src/controls/breadcrumb-header/breadcrumb-header.component.js +2 -2
- package/angular/esm2015/src/controls/data-table/data-table-column.component.js +5 -3
- package/angular/esm2015/src/controls/data-table/data-table.component.js +20 -26
- package/angular/esm2015/src/controls/data-table/extensions/data-table-column-picker-extension.js +2 -1
- package/angular/esm2015/src/controls/details/details.component.js +2 -2
- package/angular/esm2015/src/controls/dialog/base-dialog.component.js +1 -1
- package/angular/esm2015/src/controls/dialog/confirmation-dialog/confirmation-dialog.component.js +20 -30
- package/angular/esm2015/src/controls/dialog/dialog.service.js +7 -3
- package/angular/esm2015/src/controls/dropdown/dropdown.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +50 -40
- package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +3 -3
- package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +14 -13
- package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/form-field.component.js +16 -4
- package/angular/esm2015/src/controls/form/form-field/options-form-field/form-field-option.component.js +5 -3
- package/angular/esm2015/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.js +25 -21
- package/angular/esm2015/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.js +5 -5
- package/angular/esm2015/src/controls/form/form-field/search/search-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/tags/tags-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +4 -10
- package/angular/esm2015/src/controls/form/validation-alert/validation-alert.js +1 -1
- package/angular/esm2015/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.js +17 -1
- package/angular/esm2015/src/controls/icon/layered-icon/layered-icon.component.js +12 -1
- package/angular/esm2015/src/controls/icon/layered-icon/status/status-icon.component.js +53 -9
- package/angular/esm2015/src/controls/loading-wheel/loading-wheel.component.js +17 -1
- package/angular/esm2015/src/controls/master-view/master-view.component.js +34 -30
- package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +13 -29
- package/angular/esm2015/src/controls/schema-form/schema-form-content.component.js +7 -4
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +23 -35
- package/angular/esm2015/src/controls/settings/settings.component.js +28 -1
- package/angular/esm2015/src/controls/settings/settings.module.js +8 -3
- package/angular/esm2015/src/controls/tooltip/tooltip-host.component.js +16 -5
- package/angular/esm2015/src/controls/wizard/wizard.component.js +38 -6
- package/angular/esm2015/src/directives/clamp/clamp.directive.js +26 -7
- package/angular/esm2015/src/directives/discard/discard.directive.js +2 -2
- package/angular/esm2015/src/directives/markdown/markdown.directive.js +5 -18
- package/angular/esm2015/src/generated/strings.js +1 -1
- package/angular/esm2015/src/guards/experiment.guard.service.js +14 -1
- package/angular/esm2015/src/pipes/boolean-converter-pipe.js +11 -1
- package/angular/esm2015/src/pipes/byte-unit-converter-pipe.js +11 -1
- package/angular/esm2015/src/pipes/enum-converter-pipe.js +16 -1
- package/angular/esm2015/src/pipes/format-pipe.js +11 -1
- package/angular/esm2015/src/pipes/highlight-pipe.js +11 -1
- package/angular/esm2015/src/pipes/yesno-converter-pipe.js +11 -1
- package/angular/esm2015/src/service/gateway.service.js +8 -5
- package/angular/esm2015/src/service/notification.service.js +23 -1
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1042 -1069
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/package.json +0 -1
- package/angular/src/controls/actions/items/action-dropdown/action-dropdown.component.d.ts +2 -0
- package/angular/src/controls/actions/items/action-item.component.d.ts +11 -1
- package/angular/src/controls/badge/badge-base.component.d.ts +0 -4
- package/angular/src/controls/data-table/data-table-column.component.d.ts +2 -1
- package/angular/src/controls/data-table/data-table.component.d.ts +4 -0
- package/angular/src/controls/dialog/base-dialog.component.d.ts +1 -1
- package/angular/src/controls/form/form-field/form-field.component.d.ts +10 -1
- package/angular/src/controls/form/form-field/options-form-field/form-field-option.component.d.ts +5 -1
- package/angular/src/controls/form/validation-alert/validation-alert.component.d.ts +0 -4
- package/angular/src/controls/form/validation-alert/validation-alert.d.ts +0 -1
- package/angular/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.d.ts +16 -0
- package/angular/src/controls/icon/layered-icon/layered-icon.component.d.ts +11 -0
- package/angular/src/controls/icon/layered-icon/status/status-icon.component.d.ts +13 -2
- package/angular/src/controls/loading-wheel/loading-wheel.component.d.ts +16 -0
- package/angular/src/controls/master-view/master-view.component.d.ts +1 -0
- package/angular/src/controls/pivot/pivot-tab.component.d.ts +0 -1
- package/angular/src/controls/pivot/pivot.component.d.ts +4 -0
- package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +6 -5
- package/angular/src/controls/settings/settings.component.d.ts +27 -0
- package/angular/src/controls/settings/settings.module.d.ts +7 -6
- package/angular/src/controls/tooltip/tooltip-host.component.d.ts +1 -1
- package/angular/src/controls/wizard/wizard.component.d.ts +23 -0
- package/angular/src/directives/clamp/clamp.directive.d.ts +5 -0
- package/angular/src/directives/markdown/markdown.directive.d.ts +2 -3
- package/angular/src/generated/strings.d.ts +9 -0
- package/angular/src/guards/experiment.guard.service.d.ts +13 -0
- package/angular/src/pipes/boolean-converter-pipe.d.ts +10 -0
- package/angular/src/pipes/byte-unit-converter-pipe.d.ts +10 -0
- package/angular/src/pipes/enum-converter-pipe.d.ts +15 -0
- package/angular/src/pipes/format-pipe.d.ts +10 -0
- package/angular/src/pipes/highlight-pipe.d.ts +10 -0
- package/angular/src/pipes/yesno-converter-pipe.d.ts +10 -0
- package/angular/src/service/gateway.service.d.ts +3 -1
- package/angular/src/service/notification.service.d.ts +22 -0
- package/core/base/environment.d.ts +7 -0
- package/core/base/environment.js.map +1 -1
- package/core/base/versioned-object.js +2 -2
- package/core/base/versioned-object.js.map +1 -1
- package/core/data/cim-stream.js +8 -1
- package/core/data/cim-stream.js.map +1 -1
- package/core/data/core-environment.d.ts +4 -0
- package/core/data/core-environment.js +1 -0
- package/core/data/core-environment.js.map +1 -1
- package/core/data/crypto.js +10 -9
- package/core/data/crypto.js.map +1 -1
- package/core/data/file-transfer.js +5 -1
- package/core/data/file-transfer.js.map +1 -1
- package/core/data/gateway-connection.d.ts +11 -1
- package/core/data/gateway-connection.js +51 -9
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/http-constants.d.ts +5 -1
- package/core/data/http-constants.js +5 -1
- package/core/data/http-constants.js.map +1 -1
- package/core/data/net.d.ts +15 -11
- package/core/data/net.js +44 -41
- package/core/data/net.js.map +1 -1
- package/core/data/node-connection.d.ts +2 -2
- package/core/data/node-connection.js.map +1 -1
- package/core/data/powershell-stream.js +11 -3
- package/core/data/powershell-stream.js.map +1 -1
- package/core/data/powershell.d.ts +17 -1
- package/core/data/powershell.js +35 -9
- package/core/data/powershell.js.map +1 -1
- package/core/data/settings-manager.d.ts +9 -0
- package/core/data/settings-manager.js +18 -1
- package/core/data/settings-manager.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts +5 -4
- package/core/generated/powershell-scripts.js +5 -4
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/host/host-core-manager.d.ts +36 -0
- package/core/host/host-core-manager.js +134 -0
- package/core/host/host-core-manager.js.map +1 -0
- package/core/host/host-core-message-type.d.ts +12 -0
- package/core/host/host-core-message-type.js +17 -0
- package/core/host/host-core-message-type.js.map +1 -0
- package/core/host/host-core-messages.d.ts +14 -0
- package/core/host/host-core-messages.js +3 -0
- package/core/host/host-core-messages.js.map +1 -0
- package/core/manifest/manifest-loader.d.ts +2 -1
- package/core/manifest/manifest-loader.js +27 -18
- package/core/manifest/manifest-loader.js.map +1 -1
- package/core/notification/notification.js +4 -0
- package/core/notification/notification.js.map +1 -1
- package/core/security/authorization-manager.d.ts +44 -0
- package/core/security/authorization-manager.js +111 -5
- package/core/security/authorization-manager.js.map +1 -1
- package/core/security/sign-on-manager.d.ts +109 -0
- package/core/security/sign-on-manager.js +119 -0
- package/core/security/sign-on-manager.js.map +1 -0
- package/core/security/tag-manager.js.map +1 -1
- package/core/shared/cluster-inventory/cluster-inventory-cache.js +3 -2
- package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.d.ts +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.js +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.js.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.js +2 -1
- package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
- package/core/shared/tool-inventory/tool-inventory-cache.js +1 -1
- package/core/shared/tool-inventory/tool-inventory-cache.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +5 -5
- package/styles/css/fonts.css +2 -2
- package/styles/css/main.css +1 -1
- package/styles/fonts/ServMDL2/ServMDL2-4.62.woff +0 -0
- package/styles/fonts/ServMDL2/ServMDL2.json +238 -2039
- package/styles/fonts/ServMDL2/ServMDL2.scss +238 -2039
- package/tools/gulp-manifest-resource/index.js +3 -1
- package/tools/gulp-manifest-resource/index.js.map +1 -1
- package/tools/gulp-ps-cim/index.js +1 -1
- package/tools/gulp-ps-cim/index.js.map +1 -1
- package/tools/gulp-ps-cim/powershell-cim-config-schema.json +1 -1
- package/tools/gulp-ps-code/index.js +36 -2
- package/tools/gulp-ps-code/index.js.map +1 -1
- package/tools/gulp-ps-code/ps-code-convert.js +4 -8
- package/tools/gulp-ps-code/ps-code-convert.js.map +1 -1
- package/tools/gulp-ps-resjson/index.js +79 -74
- package/tools/gulp-ps-resjson/index.js.map +1 -1
- package/tools/module-template/build/pipelines/codeinspector.yml +27 -0
- package/tools/module-template/gulpfile.ts/common/lint.ts +3 -3
- package/tools/module-template/gulpfile.ts/common/pack.ts +14 -14
- package/tools/module-template/gulpfile.ts/common/ui-test-automation.ts +40 -0
- package/tools/module-template/gulpfile.ts/common/utilities.ts +10 -10
- package/tools/module-template/gulpfile.ts/common/validate.ts +14 -4
- package/tools/module-template/gulpfile.ts/index.ts +20 -8
- package/tools/wac-cli/src/upgrade/file-updater.d.ts +1 -0
- package/tools/wac-cli/src/upgrade/file-updater.js +7 -1
- package/tools/wac-cli/src/upgrade/file-updater.js.map +1 -1
- package/styles/fonts/ServMDL2/ServMDL2-4.33.woff +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { filter, map, timeout } from 'rxjs/operators';
|
|
3
|
+
import { headerConstants } from '../data/http-constants';
|
|
4
|
+
import { Net } from '../data/net';
|
|
5
|
+
/**
|
|
6
|
+
* Manage Signed HTTP Request token (Proof of possession token) handling.
|
|
7
|
+
*/
|
|
8
|
+
export class SignOnManager {
|
|
9
|
+
/**
|
|
10
|
+
* Initializes a new instance of the SignOnManager class.
|
|
11
|
+
*/
|
|
12
|
+
constructor(refreshCall) {
|
|
13
|
+
/**
|
|
14
|
+
* Wait for one minute to respond by the portal.
|
|
15
|
+
*/
|
|
16
|
+
this.portalMaxWaitTimeout = 60 * 1000;
|
|
17
|
+
this.refreshCall = refreshCall;
|
|
18
|
+
if (MsftSme.isShell()) {
|
|
19
|
+
this.signOnTokenAwaiter = new Subject();
|
|
20
|
+
this.signOnTokenRefresh = new Subject();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Gets a valude indicating whethere sign on token is active and configured.
|
|
25
|
+
*/
|
|
26
|
+
get isSignOnTokenEnabled() {
|
|
27
|
+
return !!this.signedHttpRequestToken;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the sign on token request observable by Shell.
|
|
31
|
+
*/
|
|
32
|
+
get signOnTokenRefreshTarget() {
|
|
33
|
+
if (this.signOnTokenRefresh == null) {
|
|
34
|
+
throw new Error('Request object is only for Shell.');
|
|
35
|
+
}
|
|
36
|
+
return this.signOnTokenRefresh.asObservable();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Apply signed http request token.
|
|
40
|
+
*/
|
|
41
|
+
applySignedHttpRequestToken(token) {
|
|
42
|
+
if (token) {
|
|
43
|
+
const time = Date.now();
|
|
44
|
+
this.signedHttpRequestToken = token;
|
|
45
|
+
this.signOnTokenAwaiter.next({ time, token });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Request sign on token to refresh.
|
|
50
|
+
* @returns success void.
|
|
51
|
+
*/
|
|
52
|
+
requestSignOnRefresh() {
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
const awaiter = this.signOnTokenAwaiter
|
|
55
|
+
.pipe(filter(token => token.time > now), timeout(this.portalMaxWaitTimeout));
|
|
56
|
+
this.signOnTokenRefresh.next({ time: now });
|
|
57
|
+
return awaiter;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if it can handle unauthorized login case.
|
|
61
|
+
* @param code the error code.
|
|
62
|
+
* @param error the ajax error response.
|
|
63
|
+
* @returns ture if it can handle.
|
|
64
|
+
*/
|
|
65
|
+
canHandleUnauthorizedLogin(code, error) {
|
|
66
|
+
// unauthorized login was observed.
|
|
67
|
+
return Net.isUnauthorizedLogin(error);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handles the unauthorized login case.
|
|
71
|
+
* @param code the error code.
|
|
72
|
+
* @param request the ajax request.
|
|
73
|
+
* @param error the ajex error reponse.
|
|
74
|
+
* @returns success if it could handled.
|
|
75
|
+
*/
|
|
76
|
+
handleUnauthorizedLogin(code, request, error) {
|
|
77
|
+
// request new Sign On token to the parent frame which is Azure Compute VM UI.
|
|
78
|
+
return this.refreshCall()
|
|
79
|
+
.pipe(map(() => {
|
|
80
|
+
// update with newly aquired PoP jwt token.
|
|
81
|
+
this.SetAadAuthorizationHeader(request.headers);
|
|
82
|
+
return request;
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if it can handle unauthorized login case.
|
|
87
|
+
* @param response the response of CIM stream query.
|
|
88
|
+
*/
|
|
89
|
+
canHandleStreamUnauthorizedLogin(response) {
|
|
90
|
+
// access denied case.
|
|
91
|
+
const responseObject = response && response.response;
|
|
92
|
+
if (!responseObject) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return responseObject.statusCode === 401 /* Unauthorized */ && responseObject.forbidden && responseObject.forbidden === 'UnauthorizedLogin';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handle returns true for an ajax error, this method can be called to handle that error.
|
|
99
|
+
*/
|
|
100
|
+
handleStreamUnauthorizedLogin(options, response) {
|
|
101
|
+
let message = response.response.error && response.response.error.message;
|
|
102
|
+
if (!message) {
|
|
103
|
+
const errors = response.response.errors;
|
|
104
|
+
if (errors && errors.length > 0) {
|
|
105
|
+
message = errors[0].message;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return this.refreshCall().pipe(map(() => options));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Set AAD authorization header.
|
|
112
|
+
* @param headers the headers.
|
|
113
|
+
*/
|
|
114
|
+
SetAadAuthorizationHeader(headers) {
|
|
115
|
+
headers[headerConstants.SME_AAD_AUTHORIZATION] = `WAC;PAS ${this.signedHttpRequestToken.jwt}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=sign-on-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/security/sign-on-manager.ts"],"names":[],"mappings":"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","file":"sign-on-manager.js","sourcesContent":["import { Observable, Subject } from 'rxjs';\r\nimport { AjaxError, AjaxRequest } from 'rxjs/ajax';\r\nimport { filter, map, timeout } from 'rxjs/operators';\r\nimport { CimStreamOptions, CimStreamResponse } from '../data/cim-stream';\r\nimport { headerConstants, HttpStatusCode } from '../data/http-constants';\r\nimport { Net } from '../data/net';\r\nimport { PowerShellStreamResponse } from '../data/powershell-stream';\r\nimport { NodeAuthorizationErrorData } from './authorization-manager';\r\n\r\n/**\r\n * Defines an signed http request token\r\n */\r\nexport interface SignedHttpRequestToken {\r\n /**\r\n * JSON Web Token (string).\r\n */\r\n jwt: string;\r\n\r\n /**\r\n * User name.\r\n */\r\n username: string;\r\n}\r\n\r\nexport interface SignOnTokenResponse {\r\n /**\r\n * The time aquired.\r\n */\r\n time: number;\r\n\r\n /**\r\n * The signed http request token.\r\n */\r\n token: SignedHttpRequestToken;\r\n}\r\n\r\nexport interface SignOnTokenRefresh {\r\n /**\r\n * The time aquired.\r\n */\r\n time: number;\r\n}\r\n\r\n/**\r\n * Manage Signed HTTP Request token (Proof of possession token) handling.\r\n */\r\nexport class SignOnManager {\r\n /**\r\n * Wait for one minute to respond by the portal.\r\n */\r\n private portalMaxWaitTimeout = 60 * 1000;\r\n\r\n /**\r\n * The PoP Authorization Token.\r\n */\r\n public signedHttpRequestToken: SignedHttpRequestToken;\r\n\r\n /**\r\n * The sign on token awaiter subject.\r\n */\r\n public signOnTokenAwaiter: Subject<SignOnTokenResponse>;\r\n\r\n /**\r\n * The sign on token requester subject.\r\n */\r\n private signOnTokenRefresh: Subject<SignOnTokenRefresh>;\r\n\r\n /**\r\n * The refresh request to the authorization manager.\r\n */\r\n private refreshCall: () => Observable<SignOnTokenResponse>;\r\n\r\n /**\r\n * Initializes a new instance of the SignOnManager class.\r\n */\r\n constructor(refreshCall: () => Observable<SignOnTokenResponse>) {\r\n this.refreshCall = refreshCall;\r\n if (MsftSme.isShell()) {\r\n this.signOnTokenAwaiter = new Subject<SignOnTokenResponse>();\r\n this.signOnTokenRefresh = new Subject<SignOnTokenRefresh>();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a valude indicating whethere sign on token is active and configured.\r\n */\r\n public get isSignOnTokenEnabled(): boolean {\r\n return !!this.signedHttpRequestToken;\r\n }\r\n\r\n /**\r\n * Gets the sign on token request observable by Shell.\r\n */\r\n public get signOnTokenRefreshTarget(): Observable<SignOnTokenRefresh> {\r\n if (this.signOnTokenRefresh == null) {\r\n throw new Error('Request object is only for Shell.');\r\n }\r\n\r\n return this.signOnTokenRefresh.asObservable();\r\n }\r\n\r\n /**\r\n * Apply signed http request token.\r\n */\r\n public applySignedHttpRequestToken(token: SignedHttpRequestToken): void {\r\n if (token) {\r\n const time = Date.now();\r\n this.signedHttpRequestToken = token;\r\n this.signOnTokenAwaiter.next({ time, token });\r\n }\r\n }\r\n\r\n /**\r\n * Request sign on token to refresh.\r\n * @returns success void.\r\n */\r\n public requestSignOnRefresh(): Observable<SignOnTokenResponse> {\r\n const now = Date.now();\r\n const awaiter = this.signOnTokenAwaiter\r\n .pipe(\r\n filter(token => token.time > now),\r\n timeout(this.portalMaxWaitTimeout)\r\n );\r\n this.signOnTokenRefresh.next({ time: now });\r\n return awaiter;\r\n }\r\n\r\n /**\r\n * Check if it can handle unauthorized login case.\r\n * @param code the error code.\r\n * @param error the ajax error response.\r\n * @returns ture if it can handle.\r\n */\r\n public canHandleUnauthorizedLogin(code: HttpStatusCode, error: AjaxError): boolean {\r\n // unauthorized login was observed.\r\n return Net.isUnauthorizedLogin(error);\r\n }\r\n\r\n /**\r\n * Handles the unauthorized login case.\r\n * @param code the error code.\r\n * @param request the ajax request.\r\n * @param error the ajex error reponse.\r\n * @returns success if it could handled.\r\n */\r\n public handleUnauthorizedLogin(code: HttpStatusCode, request: AjaxRequest, error: AjaxError): Observable<AjaxRequest> {\r\n // request new Sign On token to the parent frame which is Azure Compute VM UI.\r\n return this.refreshCall()\r\n .pipe(map(() => {\r\n // update with newly aquired PoP jwt token.\r\n this.SetAadAuthorizationHeader(request.headers);\r\n return request;\r\n }));\r\n }\r\n\r\n /**\r\n * Check if it can handle unauthorized login case.\r\n * @param response the response of CIM stream query.\r\n */\r\n public canHandleStreamUnauthorizedLogin(response: CimStreamResponse): boolean {\r\n // access denied case.\r\n const responseObject = response && response.response;\r\n if (!responseObject) {\r\n return false;\r\n }\r\n\r\n return responseObject.statusCode === HttpStatusCode.Unauthorized && responseObject.forbidden && responseObject.forbidden === 'UnauthorizedLogin';\r\n }\r\n\r\n /**\r\n * Handle returns true for an ajax error, this method can be called to handle that error.\r\n */\r\n public handleStreamUnauthorizedLogin(\r\n options: CimStreamOptions, response: CimStreamResponse | PowerShellStreamResponse): Observable<CimStreamOptions> {\r\n let message = response.response.error && response.response.error.message;\r\n if (!message) {\r\n const errors = response.response.errors;\r\n if (errors && errors.length > 0) {\r\n message = errors[0].message;\r\n }\r\n }\r\n\r\n return this.refreshCall().pipe(map(() => options));\r\n }\r\n\r\n /**\r\n * Set AAD authorization header.\r\n * @param headers the headers.\r\n */\r\n public SetAadAuthorizationHeader(headers?: any): void {\r\n headers[headerConstants.SME_AAD_AUTHORIZATION] = `WAC;PAS ${this.signedHttpRequestToken.jwt}`;\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/security/tag-manager.ts"],"names":[],"mappings":"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","file":"tag-manager.js","sourcesContent":["import { Observable, Subject } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ExtensionBroker } from '../data/extension-broker/extension-broker';\r\nexport abstract class TagManagerQuery {\r\n public abstract showDialog(componentId: string, items: any[], suggestions: TagSuggestion[]);\r\n}\r\n\r\nexport enum TagsChangeType {\r\n Initialized = 0,\r\n Activated = 1,\r\n Added = 2,\r\n Removed = 3\r\n}\r\n\r\nexport interface TagsChangedEvent {\r\n type: TagsChangeType;\r\n componentId: string;\r\n items: any[];\r\n}\r\n\r\nexport interface TagsSaveRequest {\r\n componentId: string;\r\n items: any[];\r\n}\r\n\r\nexport interface TagSuggestion {\r\n text: string;\r\n value: boolean | null;\r\n}\r\n\r\nexport interface ComponentPaths {\r\n pathToTags: string;\r\n pathToId: string;\r\n}\r\n\r\nexport class TagManager extends TagManagerQuery {\r\n /**\r\n * mapping of tags to a set of ids.\r\n */\r\n public tagToIdsMap: MsftSme.StringMap<MsftSme.StringMap<Set<string>>> = {};\r\n\r\n public componentIdToPathsMap: MsftSme.StringMap<ComponentPaths> = {};\r\n /**\r\n * Event subject that signals that the tags(s) have changed.\r\n * Filter on changeType to determine what type of change has occurred\r\n */\r\n public itemsChanged = new Subject<TagsChangedEvent>();\r\n\r\n public onSave = new Subject<TagsSaveRequest>();\r\n\r\n /**\r\n * Creates a new instance of the TagManager\r\n * @param extensionBroker the extension broker\r\n */\r\n constructor(private extensionBroker: ExtensionBroker) {\r\n super();\r\n this.monitorChanges();\r\n }\r\n\r\n public registerComponent(componentId: string, pathToId: string, pathToTags: string) {\r\n this.componentIdToPathsMap[componentId] = {\r\n pathToId: pathToId,\r\n pathToTags: pathToTags\r\n };\r\n\r\n this.tagToIdsMap[componentId] = {};\r\n }\r\n\r\n public showDialog(componentId: string, items: any[], suggestions: TagSuggestion[]): Observable<void> {\r\n const activeElement = <HTMLElement>document.activeElement;\r\n return this.extensionBroker.showDialog(\r\n 'msft.sme.shell-extensions!editTagsDialog',\r\n 0,\r\n suggestions\r\n ).pipe(\r\n map(\r\n (result: any) => {\r\n if (result) {\r\n this.addRemoveTags(componentId, items, result.tagsAdded, result.tagsRemoved);\r\n }\r\n this.focusOnElement(activeElement);\r\n }\r\n )\r\n );\r\n }\r\n\r\n private focusOnElement(element: HTMLElement) {\r\n setTimeout(() => {\r\n if (element) {\r\n element.focus();\r\n }\r\n });\r\n }\r\n\r\n private validateComponentRegistration(componentId: string) {\r\n if (MsftSme.isNullOrUndefined(this.componentIdToPathsMap[componentId])) {\r\n throw Error('No component with this ID found. Please register component using registerComponent() function.');\r\n }\r\n }\r\n\r\n /**\r\n * Adds/Removes respective sets of tags to/from a set of items and returns the result of the change\r\n * @param componentId the componentId of a component registered with the service\r\n * @param items the list of items to modify\r\n * @param tagsToAdd the tags to add\r\n * @param tagsToRemove the tags to remove\r\n */\r\n public addRemoveTags(\r\n componentId: string, items: any[], tagsToAdd: string[], tagsToRemove: string[]): void {\r\n this.validateComponentRegistration(componentId);\r\n const pathToId = this.componentIdToPathsMap[componentId].pathToId;\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n if (tagsToAdd.length > 0 || tagsToRemove.length > 0) {\r\n // ensure all tags are lowercase\r\n tagsToAdd = tagsToAdd.map(tag => tag.toLocaleLowerCase());\r\n tagsToRemove = tagsToRemove.map(tag => tag.toLocaleLowerCase());\r\n\r\n // preserve old tags in case save fails.\r\n const oldTags: MsftSme.StringMap<string[]> = {};\r\n\r\n // process each item to add the new tags\r\n items.forEach(item => {\r\n\r\n const itemId = MsftSme.getValue(item, pathToId).toString();\r\n let itemTags = <string[]>MsftSme.getValue(item, pathToTags);\r\n /** PRESERVE TAGS */\r\n oldTags[itemId] = itemTags ? [...itemTags] : [];\r\n\r\n /** ADD TAGS */\r\n // push the new tags to the tag list\r\n const tags = itemTags || [];\r\n tags.push(...tagsToAdd);\r\n\r\n // ensure the combined list has only unique values\r\n itemTags = MsftSme.unique(tags);\r\n\r\n // for each new tag, add it to the item by tag mapping\r\n tagsToAdd.forEach(tag => this.addIdToTagMapping(componentId, itemId, tag));\r\n\r\n /** REMOVE TAGS */\r\n // if there are no tags on the item, then return\r\n if (!itemTags || itemTags.length === 0) {\r\n return;\r\n }\r\n\r\n // process each tag to remove\r\n tagsToRemove.forEach(tag => {\r\n // remove the tag from the item tags\r\n MsftSme.remove(itemTags, tag);\r\n // remove the item id from the tag mapping\r\n this.removeIdToTagMapping(componentId, itemId, tag);\r\n });\r\n\r\n /** SORT TAGS */\r\n itemTags = itemTags.sort();\r\n MsftSme.setValue(item, pathToTags, itemTags);\r\n });\r\n\r\n // save the changes to the item\r\n this.onSave.next({\r\n componentId: componentId,\r\n items: items\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Suggests tags for the user based on some input text\r\n * @param text The starting text to generate suggestions for\r\n */\r\n public getTagSuggestions(componentId: string, items: any[], text?: string): TagSuggestion[] {\r\n this.validateComponentRegistration(componentId);\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n // start with all tags currently being used\r\n const allSuggestions = Object.keys(this.tagToIdsMap[componentId]);\r\n\r\n // filter all suggestions to only those that match our text\r\n let suggestions: string[] = [];\r\n\r\n if (text) {\r\n allSuggestions.forEach(suggestion => {\r\n if (suggestion === text) {\r\n // exact matches always come as the first suggestion\r\n suggestions.unshift(suggestion);\r\n } else if (suggestion.startsWith(text)) {\r\n // startsWith matches are inserted in the order they fall naturally.\r\n suggestions.push(suggestion);\r\n }\r\n });\r\n } else {\r\n suggestions = allSuggestions;\r\n }\r\n\r\n const tagSuggestions = suggestions.map(s => {\r\n const suggestion: TagSuggestion = { text: s, value: false };\r\n let allItemsTagged = true;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n const tags = <string[]>MsftSme.getValue(item, pathToTags);\r\n if (tags && tags.find(t => t === s)) {\r\n suggestion.value = null;\r\n } else {\r\n allItemsTagged = false;\r\n }\r\n }\r\n\r\n if (allItemsTagged) {\r\n suggestion.value = true;\r\n }\r\n return suggestion;\r\n });\r\n\r\n\r\n return tagSuggestions;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Retrieves a unique list of tags from a list of items\r\n * @param items the items to get tags from\r\n */\r\n public getUniqueTagsFromItems(items: any[], pathToTags: string): string[] {\r\n const tags = MsftSme.mapMany(items, item => MsftSme.getValue(item, pathToTags) || []);\r\n return MsftSme.unique(tags);\r\n }\r\n\r\n /**\r\n * listens to changes and adjusts the tag to id mapping accordingly\r\n */\r\n private monitorChanges() {\r\n this.itemsChanged.subscribe(event => {\r\n switch (event.type) {\r\n case TagsChangeType.Initialized: {\r\n // items list was initialized, clear tag list and repopulate\r\n this.tagToIdsMap[event.componentId] = {};\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.addIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n case TagsChangeType.Added: {\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.addIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n case TagsChangeType.Removed: {\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.removeIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n default: break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Processes the tags in a list of items\r\n * @param componentId the componentId of a component registered with the service\r\n * @param items the items to process\r\n * @param processor the method to process a tag for a given item id\r\n */\r\n private processTags(componentId: string, items: any[], processor: (id, tag) => void) {\r\n this.validateComponentRegistration(componentId);\r\n const pathToId = this.componentIdToPathsMap[componentId].pathToId;\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n items.forEach(c => {\r\n const tags = <string[]>MsftSme.getValue(c, pathToTags);\r\n // ignore items with no tags\r\n if (!tags || tags.length === 0) {\r\n return;\r\n }\r\n\r\n const id = MsftSme.getValue(c, pathToId);\r\n // process item tags\r\n tags.forEach(tag => processor(id, tag));\r\n });\r\n }\r\n\r\n /**\r\n * Adds a mapping between a tag and an id\r\n * @param id the id\r\n * @param tag the tag\r\n */\r\n private addIdToTagMapping(componentId: string, itemId: string, tag: string) {\r\n if (MsftSme.isNullOrUndefined(this.tagToIdsMap[componentId][tag])) {\r\n this.tagToIdsMap[componentId][tag] = new Set<string>();\r\n }\r\n this.tagToIdsMap[componentId][tag].add(itemId);\r\n }\r\n\r\n\r\n /**\r\n * Removes a mapping between a tag and an id\r\n * @param id the id\r\n * @param tag the tag\r\n */\r\n private removeIdToTagMapping(componentId: string, itemId: string, tag: string) {\r\n if (!MsftSme.isNullOrUndefined(this.tagToIdsMap[componentId][tag])) {\r\n this.tagToIdsMap[componentId][tag].delete(itemId);\r\n if (this.tagToIdsMap[componentId][tag].size === 0) {\r\n delete this.tagToIdsMap[componentId][tag];\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/security/tag-manager.ts"],"names":[],"mappings":"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","file":"tag-manager.js","sourcesContent":["import { Observable, Subject } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ExtensionBroker } from '../data/extension-broker/extension-broker';\r\nexport abstract class TagManagerQuery {\r\n public abstract showDialog(componentId: string, items: any[], suggestions: TagSuggestion[]);\r\n}\r\n\r\nexport enum TagsChangeType {\r\n Initialized = 0,\r\n Activated = 1,\r\n Added = 2,\r\n Removed = 3\r\n}\r\n\r\nexport interface TagsChangedEvent {\r\n type: TagsChangeType;\r\n componentId: string;\r\n items: any[];\r\n}\r\n\r\nexport interface TagsSaveRequest {\r\n componentId: string;\r\n items: any[];\r\n}\r\n\r\nexport interface TagSuggestion {\r\n text: string;\r\n value: boolean | null;\r\n}\r\n\r\nexport interface ComponentPaths {\r\n pathToTags: string;\r\n pathToId: string;\r\n}\r\n\r\nexport class TagManager extends TagManagerQuery {\r\n /**\r\n * mapping of tags to a set of ids.\r\n */\r\n public tagToIdsMap: MsftSme.StringMap<MsftSme.StringMap<Set<string>>> = {};\r\n\r\n public componentIdToPathsMap: MsftSme.StringMap<ComponentPaths> = {};\r\n /**\r\n * Event subject that signals that the tags(s) have changed.\r\n * Filter on changeType to determine what type of change has occurred\r\n */\r\n public itemsChanged = new Subject<TagsChangedEvent>();\r\n\r\n public onSave = new Subject<TagsSaveRequest>();\r\n\r\n /**\r\n * Creates a new instance of the TagManager\r\n * @param extensionBroker the extension broker\r\n */\r\n constructor(private extensionBroker: ExtensionBroker) {\r\n super();\r\n this.monitorChanges();\r\n }\r\n\r\n public registerComponent(componentId: string, pathToId: string, pathToTags: string) {\r\n this.componentIdToPathsMap[componentId] = {\r\n pathToId: pathToId,\r\n pathToTags: pathToTags\r\n };\r\n\r\n this.tagToIdsMap[componentId] = {};\r\n }\r\n\r\n public showDialog(componentId: string, items: any[], suggestions: TagSuggestion[]): Observable<void> {\r\n const activeElement = <HTMLElement>document.activeElement;\r\n return this.extensionBroker.showDialog(\r\n 'msft.sme.shell-extensions!editTagsDialog',\r\n 0,\r\n suggestions\r\n ).pipe(\r\n map(\r\n (result: any) => {\r\n if (result) {\r\n this.addRemoveTags(componentId, items, result.tagsAdded, result.tagsRemoved);\r\n }\r\n this.focusOnElement(activeElement);\r\n }\r\n )\r\n );\r\n }\r\n\r\n private focusOnElement(element: HTMLElement) {\r\n setTimeout(() => {\r\n if (element) {\r\n element.focus();\r\n }\r\n });\r\n }\r\n\r\n private validateComponentRegistration(componentId: string) {\r\n if (MsftSme.isNullOrUndefined(this.componentIdToPathsMap[componentId])) {\r\n throw Error('No component with this ID found. Please register component using registerComponent() function.');\r\n }\r\n }\r\n\r\n /**\r\n * Adds/Removes respective sets of tags to/from a set of items and returns the result of the change\r\n * @param componentId the componentId of a component registered with the service\r\n * @param items the list of items to modify\r\n * @param tagsToAdd the tags to add\r\n * @param tagsToRemove the tags to remove\r\n */\r\n public addRemoveTags(\r\n componentId: string, items: any[], tagsToAdd: string[], tagsToRemove: string[]): void {\r\n this.validateComponentRegistration(componentId);\r\n const pathToId = this.componentIdToPathsMap[componentId].pathToId;\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n if (tagsToAdd.length > 0 || tagsToRemove.length > 0) {\r\n // ensure all tags are lowercase\r\n tagsToAdd = tagsToAdd.map(tag => tag.toLocaleLowerCase());\r\n tagsToRemove = tagsToRemove.map(tag => tag.toLocaleLowerCase());\r\n\r\n // preserve old tags in case save fails.\r\n const oldTags: MsftSme.StringMap<string[]> = {};\r\n\r\n // process each item to add the new tags\r\n items.forEach(item => {\r\n\r\n const itemId = MsftSme.getValue(item, pathToId).toString();\r\n let itemTags = <string[]>MsftSme.getValue(item, pathToTags);\r\n /** PRESERVE TAGS */\r\n oldTags[itemId] = itemTags ? [...itemTags] : [];\r\n\r\n /** ADD TAGS */\r\n // push the new tags to the tag list\r\n const tags = itemTags || [];\r\n tags.push(...tagsToAdd);\r\n\r\n // ensure the combined list has only unique values\r\n itemTags = MsftSme.unique(tags);\r\n\r\n // for each new tag, add it to the item by tag mapping\r\n tagsToAdd.forEach(tag => this.addIdToTagMapping(componentId, itemId, tag));\r\n\r\n /** REMOVE TAGS */\r\n // if there are no tags on the item, then return\r\n if (!itemTags || itemTags.length === 0) {\r\n return;\r\n }\r\n\r\n // process each tag to remove\r\n tagsToRemove.forEach(tag => {\r\n // remove the tag from the item tags\r\n MsftSme.remove(itemTags, tag);\r\n // remove the item id from the tag mapping\r\n this.removeIdToTagMapping(componentId, itemId, tag);\r\n });\r\n\r\n /** SORT TAGS */\r\n itemTags = itemTags.sort();\r\n MsftSme.setValue(item, pathToTags, itemTags);\r\n });\r\n\r\n // save the changes to the item\r\n this.onSave.next({\r\n componentId: componentId,\r\n items: items\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Suggests tags for the user based on some input text\r\n * @param text The starting text to generate suggestions for\r\n */\r\n public getTagSuggestions(componentId: string, items: any[], text?: string): TagSuggestion[] {\r\n this.validateComponentRegistration(componentId);\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n // start with all tags currently being used\r\n const allSuggestions = Object.keys(this.tagToIdsMap[componentId]);\r\n\r\n // filter all suggestions to only those that match our text\r\n let suggestions: string[] = [];\r\n\r\n if (text) {\r\n allSuggestions.forEach(suggestion => {\r\n if (suggestion === text) {\r\n // exact matches always come as the first suggestion\r\n suggestions.unshift(suggestion);\r\n } else if (suggestion.startsWith(text)) {\r\n // startsWith matches are inserted in the order they fall naturally.\r\n suggestions.push(suggestion);\r\n }\r\n });\r\n } else {\r\n suggestions = allSuggestions;\r\n }\r\n\r\n const tagSuggestions = suggestions.map(s => {\r\n const suggestion: TagSuggestion = { text: s, value: false };\r\n let allItemsTagged = true;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n const tags = <string[]>MsftSme.getValue(item, pathToTags);\r\n if (tags && tags.find(t => t === s)) {\r\n suggestion.value = null;\r\n } else {\r\n allItemsTagged = false;\r\n }\r\n }\r\n\r\n if (allItemsTagged) {\r\n suggestion.value = true;\r\n }\r\n return suggestion;\r\n });\r\n\r\n\r\n return tagSuggestions;\r\n }\r\n\r\n /**\r\n * Retrieves a unique list of tags from a list of items\r\n * @param items the items to get tags from\r\n */\r\n public getUniqueTagsFromItems(items: any[], pathToTags: string): string[] {\r\n const tags = MsftSme.mapMany(items, item => MsftSme.getValue(item, pathToTags) || []);\r\n return MsftSme.unique(tags);\r\n }\r\n\r\n /**\r\n * listens to changes and adjusts the tag to id mapping accordingly\r\n */\r\n private monitorChanges() {\r\n this.itemsChanged.subscribe(event => {\r\n switch (event.type) {\r\n case TagsChangeType.Initialized: {\r\n // items list was initialized, clear tag list and repopulate\r\n this.tagToIdsMap[event.componentId] = {};\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.addIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n case TagsChangeType.Added: {\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.addIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n case TagsChangeType.Removed: {\r\n this.processTags(\r\n event.componentId,\r\n event.items,\r\n (id, tag) => this.removeIdToTagMapping(event.componentId, id, tag));\r\n break;\r\n }\r\n default: break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Processes the tags in a list of items\r\n * @param componentId the componentId of a component registered with the service\r\n * @param items the items to process\r\n * @param processor the method to process a tag for a given item id\r\n */\r\n private processTags(componentId: string, items: any[], processor: (id, tag) => void) {\r\n this.validateComponentRegistration(componentId);\r\n const pathToId = this.componentIdToPathsMap[componentId].pathToId;\r\n const pathToTags = this.componentIdToPathsMap[componentId].pathToTags;\r\n\r\n items.forEach(c => {\r\n const tags = <string[]>MsftSme.getValue(c, pathToTags);\r\n // ignore items with no tags\r\n if (!tags || tags.length === 0) {\r\n return;\r\n }\r\n\r\n const id = MsftSme.getValue(c, pathToId);\r\n // process item tags\r\n tags.forEach(tag => processor(id, tag));\r\n });\r\n }\r\n\r\n /**\r\n * Adds a mapping between a tag and an id\r\n * @param id the id\r\n * @param tag the tag\r\n */\r\n private addIdToTagMapping(componentId: string, itemId: string, tag: string) {\r\n if (MsftSme.isNullOrUndefined(this.tagToIdsMap[componentId][tag])) {\r\n this.tagToIdsMap[componentId][tag] = new Set<string>();\r\n }\r\n this.tagToIdsMap[componentId][tag].add(itemId);\r\n }\r\n\r\n\r\n /**\r\n * Removes a mapping between a tag and an id\r\n * @param id the id\r\n * @param tag the tag\r\n */\r\n private removeIdToTagMapping(componentId: string, itemId: string, tag: string) {\r\n if (!MsftSme.isNullOrUndefined(this.tagToIdsMap[componentId][tag])) {\r\n this.tagToIdsMap[componentId][tag].delete(itemId);\r\n if (this.tagToIdsMap[componentId][tag].size === 0) {\r\n delete this.tagToIdsMap[componentId][tag];\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { of, zip } from 'rxjs';
|
|
2
2
|
import { map, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { PowerShell } from '../../data/powershell';
|
|
3
4
|
import { PowerShellScripts } from '../../generated/powershell-scripts';
|
|
4
5
|
import { ServerInventoryCache } from '../server-inventory/server-inventory-cache';
|
|
5
6
|
import { SharedCache } from '../shared-cache';
|
|
@@ -58,7 +59,7 @@ export class ClusterInventoryCache extends SharedCache {
|
|
|
58
59
|
const options = Object.assign({}, params.requestOptions);
|
|
59
60
|
const clusterPsSession = this.appContext.powerShell.createSession(params.name, null, options);
|
|
60
61
|
const clusterNodePsSession = this.appContext.powerShell.createSession(params.name, null, options);
|
|
61
|
-
return zip(this.appContext.powerShell.run(clusterPsSession, PowerShellScripts.Get_ClusterInventory), this.appContext.powerShell.run(clusterNodePsSession, PowerShellScripts.Get_ClusterNodes))
|
|
62
|
+
return zip(this.appContext.powerShell.run(clusterPsSession, PowerShell.createCommand(PowerShellScripts.Get_ClusterInventory)), this.appContext.powerShell.run(clusterNodePsSession, PowerShell.createCommand(PowerShellScripts.Get_ClusterNodes)))
|
|
62
63
|
.pipe(map(([cluster, nodes]) => {
|
|
63
64
|
var _a;
|
|
64
65
|
const inventory = new ClusterInventory(params.name);
|
|
@@ -131,7 +132,7 @@ export class ClusterInventoryCache extends SharedCache {
|
|
|
131
132
|
}
|
|
132
133
|
const errorMessages = [];
|
|
133
134
|
const batchSession = this.appContext.powerShell.createBatchSession(liveNodeNames, null, options);
|
|
134
|
-
return this.appContext.powerShell.runBatchSingleCommand(batchSession, PowerShellScripts.Get_ServerInventory)
|
|
135
|
+
return this.appContext.powerShell.runBatchSingleCommand(batchSession, PowerShell.createCommand(PowerShellScripts.Get_ServerInventory))
|
|
135
136
|
.pipe(map((responseItems) => {
|
|
136
137
|
for (let index = 0; index < responseItems.length; index++) {
|
|
137
138
|
const response = responseItems[index];
|
|
@@ -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 { PowerShell } from '../../data/powershell';\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, PowerShell.createCommand(PowerShellScripts.Get_ClusterInventory)),\r\n this.appContext.powerShell.run(clusterNodePsSession, PowerShell.createCommand(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(\r\n batchSession, PowerShell.createCommand(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"]}
|
|
@@ -10,7 +10,7 @@ export declare class GatewayInventoryCache extends SharedCache<GatewayInventory,
|
|
|
10
10
|
private static uniqueVersion;
|
|
11
11
|
private static gatewayName;
|
|
12
12
|
/**
|
|
13
|
-
* Initializes a new instance of the
|
|
13
|
+
* Initializes a new instance of the GatewayInventoryCache class.
|
|
14
14
|
*
|
|
15
15
|
* @param appContext the app context.
|
|
16
16
|
* @param options the option of shared cache.
|
|
@@ -6,7 +6,7 @@ import { GatewayInstallationType, GatewayInventory, GatewayMode } from './gatewa
|
|
|
6
6
|
*/
|
|
7
7
|
export class GatewayInventoryCache extends SharedCache {
|
|
8
8
|
/**
|
|
9
|
-
* Initializes a new instance of the
|
|
9
|
+
* Initializes a new instance of the GatewayInventoryCache class.
|
|
10
10
|
*
|
|
11
11
|
* @param appContext the app context.
|
|
12
12
|
* @param options the option of shared cache.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/shared/gateway-inventory/gateway-inventory-cache.ts"],"names":[],"mappings":"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","file":"gateway-inventory-cache.js","sourcesContent":["import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { GatewayInstallationType, GatewayInventory, GatewayInventoryData, GatewayInventoryParams, GatewayMode } from './gateway-inventory';\r\n\r\n/**\r\n * Gateway Inventory cache class.\r\n */\r\nexport class GatewayInventoryCache extends SharedCache<GatewayInventory, GatewayInventoryData, GatewayInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:gatewayInventory';\r\n private static uniqueVersion = 5;\r\n private static gatewayName = 'gateway';\r\n\r\n /**\r\n * Initializes a new instance of the
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/shared/gateway-inventory/gateway-inventory-cache.ts"],"names":[],"mappings":"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","file":"gateway-inventory-cache.js","sourcesContent":["import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { GatewayInstallationType, GatewayInventory, GatewayInventoryData, GatewayInventoryParams, GatewayMode } from './gateway-inventory';\r\n\r\n/**\r\n * Gateway Inventory cache class.\r\n */\r\nexport class GatewayInventoryCache extends SharedCache<GatewayInventory, GatewayInventoryData, GatewayInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:gatewayInventory';\r\n private static uniqueVersion = 5;\r\n private static gatewayName = 'gateway';\r\n\r\n /**\r\n * Initializes a new instance of the GatewayInventoryCache 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 GatewayInventoryCache.uniqueId,\r\n GatewayInventoryCache.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\r\n /**\r\n * Defines how to collect the gateway inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ServerInventory data.\r\n */\r\n private dataQuery(params: GatewayInventoryParams): Observable<GatewayInventory> {\r\n return this.appContext.gateway.get('gateway/status')\r\n .pipe(map((data: any) => {\r\n const inventory = new GatewayInventory();\r\n\r\n if (data) {\r\n inventory.availableMemoryMByte = data.availableMemoryMByte;\r\n inventory.gatewayWorkingSetMByte = data.gatewayWorkingSetMByte;\r\n inventory.totalCpuUtilizationPercent = data.totalCpuUtilizationPercent;\r\n inventory.gatewayCpuUtilizationPercent = data.gatewayCpuUtilizationPercent;\r\n inventory.gatewayVersion = data.gatewayVersion;\r\n inventory.gatewayDisplayVersion = data.gatewayDisplayVersion;\r\n inventory.friendlyOsName = data.friendlyOsName;\r\n inventory.installedDate = data.installedDate;\r\n inventory.logicalProcessorCount = data.logicalProcessorCount;\r\n inventory.name = data.name.toLowerCase();\r\n inventory.isGatewayProcessElevated = data.isGatewayProcessElevated;\r\n inventory.mode = GatewayMode[<string>data.gatewayMode] || GatewayMode.Desktop;\r\n inventory.jwk = JSON.stringify(data.jwk);\r\n inventory.installationType = data.installationType || GatewayInstallationType.Standard;\r\n inventory.allowedHostOrigins = data.allowedHostOrigins || [];\r\n if (MsftSme.isShell()) {\r\n inventory.allowedHostOrigins.push(MsftSme.getSafeOrigin());\r\n }\r\n }\r\n\r\n return inventory;\r\n }));\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: GatewayInventoryParams): string {\r\n // dont use the passed in name. Gateway cache is always to the same name\r\n return GatewayInventoryCache.gatewayName;\r\n }\r\n\r\n /**\r\n * Defines how to deserialize the class object from seralized data.\r\n *\r\n * @param serialized the serialized string;\r\n */\r\n private dataDeserialize(serialized: string): GatewayInventory {\r\n const inventory: GatewayInventoryData = JSON.parse(serialized);\r\n return new GatewayInventory(inventory);\r\n }\r\n\r\n /**\r\n * Defines how to serialize the class object to seralized data.\r\n *\r\n * @param instance the class instance.\r\n */\r\n private dataSerialize(instance: GatewayInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { map } from 'rxjs/operators';
|
|
2
|
+
import { PowerShell } from '../../data/powershell';
|
|
2
3
|
import { PowerShellScripts } from '../../generated/powershell-scripts';
|
|
3
4
|
import { SharedCache } from '../shared-cache';
|
|
4
5
|
import { ServerInventory } from './server-inventory';
|
|
@@ -76,7 +77,7 @@ export class ServerInventoryCache extends SharedCache {
|
|
|
76
77
|
*/
|
|
77
78
|
dataQuery(params) {
|
|
78
79
|
const psSession = this.appContext.powerShell.createSession(params.name, null, Object.assign({ automatic: true }, params.requestOptions));
|
|
79
|
-
return this.appContext.powerShell.run(psSession, PowerShellScripts.Get_ServerInventory)
|
|
80
|
+
return this.appContext.powerShell.run(psSession, PowerShell.createCommand(PowerShellScripts.Get_ServerInventory))
|
|
80
81
|
.pipe(map((data) => ServerInventoryCache.createServerInventoryData(params.name, data)));
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/shared/server-inventory/server-inventory-cache.ts"],"names":[],"mappings":"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","file":"server-inventory-cache.js","sourcesContent":["import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { PowerShellScripts } from '../../generated/powershell-scripts';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ServerInventory, ServerInventoryData, ServerInventoryParams } from './server-inventory';\r\n\r\n/**\r\n * Server Inventory cache class.\r\n */\r\nexport class ServerInventoryCache extends SharedCache<ServerInventory, ServerInventoryData, ServerInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:serverInventory';\r\n private static uniqueVersion = 17;\r\n\r\n /**\r\n * Create Server Inventory data from the script result data.\r\n *\r\n * @param name the name of server node.\r\n * @param data the PowerShell script result data.\r\n */\r\n public static createServerInventoryData(name: string, data: any): ServerInventory {\r\n const inventory = new ServerInventory(name);\r\n\r\n if (data && data.results && data.results.length > 0) {\r\n const result = data.results[0];\r\n const operatingSystem = result.operatingSystem;\r\n const computerSystem = result.computerSystem;\r\n\r\n inventory.isAdministrator = result.isAdministrator;\r\n inventory.isWmfInstalled = result.isWmfInstalled;\r\n inventory.name = operatingSystem.csName ? operatingSystem.csName.toString().toLowerCase() : null;\r\n inventory.operatingSystemName = operatingSystem.caption;\r\n inventory.operatingSystemSKU = operatingSystem.operatingSystemSKU;\r\n inventory.operatingSystemVersion = operatingSystem.version;\r\n inventory.productType = operatingSystem.productType;\r\n inventory.osType = operatingSystem.osType;\r\n inventory.lastBootUpTime = operatingSystem.lastBootUpTime;\r\n\r\n inventory.totalPhysicalMemory = computerSystem.totalPhysicalMemory;\r\n inventory.domainRole = computerSystem.domainRole;\r\n inventory.computerManufacturer = computerSystem.manufacturer;\r\n inventory.computerModel = computerSystem.model;\r\n inventory.totalLogicalProcessors = computerSystem.numberOfLogicalProcessors;\r\n inventory.isRemoteAppEnabled = result.isRemoteAppEnabled;\r\n\r\n if (computerSystem.partOfDomain) {\r\n inventory.domainName = computerSystem.domain;\r\n } else {\r\n inventory.workgroupName = computerSystem.workgroup;\r\n }\r\n\r\n inventory.fullyQualifiedDomainName = result.fqdn.toLowerCase();\r\n inventory.fullyQualifiedDomainNameRaw = result.fqdn;\r\n inventory.addressList = result.addressList;\r\n inventory.hostname = result.hostname.toLowerCase();\r\n inventory.hostnameRaw = result.hostname;\r\n inventory.netBios = result.netBios;\r\n inventory.clusterFqdn = result.clusterFqdn ? result.clusterFqdn.toLowerCase() : null;\r\n inventory.isCluster = result.isCluster;\r\n inventory.isManagementToolsAvailable = result.isManagementToolsAvailable;\r\n inventory.isServerManagerAvailable = result.isServerManagerAvailable;\r\n inventory.isS2dEnabled = result.isS2dEnabled;\r\n inventory.isBritannicaEnabled = result.isBritannicaEnabled;\r\n inventory.isHyperVRoleInstalled = result.isHyperVRoleInstalled;\r\n inventory.isHyperVPowershellInstalled = result.isHyperVPowershellInstalled;\r\n inventory.isCredSSPEnabled = result.isCredSSPEnabled;\r\n inventory.smbiosData = result.smbiosData;\r\n }\r\n\r\n return inventory;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the ServerInventoryCache 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 ServerInventoryCache.uniqueId,\r\n ServerInventoryCache.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\r\n /**\r\n * Defines how to collect the server inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ServerInventory data.\r\n */\r\n private dataQuery(params: ServerInventoryParams): Observable<ServerInventory> {\r\n const psSession = this.appContext.powerShell.createSession(params.name, null, { ...{ automatic: true }, ...params.requestOptions });\r\n return this.appContext.powerShell.run(psSession, PowerShellScripts.Get_ServerInventory)\r\n .pipe(map((data: any) => ServerInventoryCache.createServerInventoryData(params.name, data)));\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: ServerInventoryParams): 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): ServerInventory {\r\n const inventory: ServerInventoryData = JSON.parse(serialized);\r\n return new ServerInventory(inventory.serverName, 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: ServerInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/shared/server-inventory/server-inventory-cache.ts"],"names":[],"mappings":"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","file":"server-inventory-cache.js","sourcesContent":["import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { PowerShell } from '../../data/powershell';\r\nimport { PowerShellScripts } from '../../generated/powershell-scripts';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ServerInventory, ServerInventoryData, ServerInventoryParams } from './server-inventory';\r\n\r\n/**\r\n * Server Inventory cache class.\r\n */\r\nexport class ServerInventoryCache extends SharedCache<ServerInventory, ServerInventoryData, ServerInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:serverInventory';\r\n private static uniqueVersion = 17;\r\n\r\n /**\r\n * Create Server Inventory data from the script result data.\r\n *\r\n * @param name the name of server node.\r\n * @param data the PowerShell script result data.\r\n */\r\n public static createServerInventoryData(name: string, data: any): ServerInventory {\r\n const inventory = new ServerInventory(name);\r\n\r\n if (data && data.results && data.results.length > 0) {\r\n const result = data.results[0];\r\n const operatingSystem = result.operatingSystem;\r\n const computerSystem = result.computerSystem;\r\n\r\n inventory.isAdministrator = result.isAdministrator;\r\n inventory.isWmfInstalled = result.isWmfInstalled;\r\n inventory.name = operatingSystem.csName ? operatingSystem.csName.toString().toLowerCase() : null;\r\n inventory.operatingSystemName = operatingSystem.caption;\r\n inventory.operatingSystemSKU = operatingSystem.operatingSystemSKU;\r\n inventory.operatingSystemVersion = operatingSystem.version;\r\n inventory.productType = operatingSystem.productType;\r\n inventory.osType = operatingSystem.osType;\r\n inventory.lastBootUpTime = operatingSystem.lastBootUpTime;\r\n\r\n inventory.totalPhysicalMemory = computerSystem.totalPhysicalMemory;\r\n inventory.domainRole = computerSystem.domainRole;\r\n inventory.computerManufacturer = computerSystem.manufacturer;\r\n inventory.computerModel = computerSystem.model;\r\n inventory.totalLogicalProcessors = computerSystem.numberOfLogicalProcessors;\r\n inventory.isRemoteAppEnabled = result.isRemoteAppEnabled;\r\n\r\n if (computerSystem.partOfDomain) {\r\n inventory.domainName = computerSystem.domain;\r\n } else {\r\n inventory.workgroupName = computerSystem.workgroup;\r\n }\r\n\r\n inventory.fullyQualifiedDomainName = result.fqdn.toLowerCase();\r\n inventory.fullyQualifiedDomainNameRaw = result.fqdn;\r\n inventory.addressList = result.addressList;\r\n inventory.hostname = result.hostname.toLowerCase();\r\n inventory.hostnameRaw = result.hostname;\r\n inventory.netBios = result.netBios;\r\n inventory.clusterFqdn = result.clusterFqdn ? result.clusterFqdn.toLowerCase() : null;\r\n inventory.isCluster = result.isCluster;\r\n inventory.isManagementToolsAvailable = result.isManagementToolsAvailable;\r\n inventory.isServerManagerAvailable = result.isServerManagerAvailable;\r\n inventory.isS2dEnabled = result.isS2dEnabled;\r\n inventory.isBritannicaEnabled = result.isBritannicaEnabled;\r\n inventory.isHyperVRoleInstalled = result.isHyperVRoleInstalled;\r\n inventory.isHyperVPowershellInstalled = result.isHyperVPowershellInstalled;\r\n inventory.isCredSSPEnabled = result.isCredSSPEnabled;\r\n inventory.smbiosData = result.smbiosData;\r\n }\r\n\r\n return inventory;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the ServerInventoryCache 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 ServerInventoryCache.uniqueId,\r\n ServerInventoryCache.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\r\n /**\r\n * Defines how to collect the server inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ServerInventory data.\r\n */\r\n private dataQuery(params: ServerInventoryParams): Observable<ServerInventory> {\r\n const psSession = this.appContext.powerShell.createSession(params.name, null, { ...{ automatic: true }, ...params.requestOptions });\r\n return this.appContext.powerShell.run(psSession, PowerShell.createCommand(PowerShellScripts.Get_ServerInventory))\r\n .pipe(map((data: any) => ServerInventoryCache.createServerInventoryData(params.name, data)));\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: ServerInventoryParams): 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): ServerInventory {\r\n const inventory: ServerInventoryData = JSON.parse(serialized);\r\n return new ServerInventory(inventory.serverName, 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: ServerInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n}\r\n"]}
|
|
@@ -24,7 +24,7 @@ export class ToolInventoryCache extends SharedCache {
|
|
|
24
24
|
*/
|
|
25
25
|
dataQuery(params) {
|
|
26
26
|
const psSession = this.appContext.powerShell.createSession(params.name, null, params.requestOptions);
|
|
27
|
-
return this.appContext.powerShell.run(psSession, params.command ? { command: params.command, script: params.script } : params.script)
|
|
27
|
+
return this.appContext.powerShell.run(psSession, params.command ? { command: params.command, script: params.script, module: params.module } : params.script)
|
|
28
28
|
.pipe(map((data) => {
|
|
29
29
|
const inventory = new ToolInventory(params.name);
|
|
30
30
|
if (data && data.results && data.results.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/shared/tool-inventory/tool-inventory-cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/shared/tool-inventory/tool-inventory-cache.ts"],"names":[],"mappings":"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","file":"tool-inventory-cache.js","sourcesContent":["import { PowerShellCommand } from 'index';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { EnvironmentModuleToolState } from '../../manifest/environment-modules';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ToolInventory, ToolInventoryData, ToolInventoryParams, ToolInventoryProperty } from './tool-inventory';\r\n\r\n/**\r\n * Tool Inventory cache class.\r\n */\r\nexport class ToolInventoryCache extends SharedCache<ToolInventory, ToolInventoryData, ToolInventoryParams> {\r\n private static uniqueId = '@msft-sme/shell:toolInventory';\r\n private static uniqueVersion = 0;\r\n\r\n /**\r\n * Initializes a new instance of the ToolInventoryCache 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 ToolInventoryCache.uniqueId,\r\n ToolInventoryCache.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\r\n /**\r\n * Defines how to collect the tool inventory data.\r\n *\r\n * @param params the server inventory query params.\r\n * @return the Observable of ServerInventory data.\r\n */\r\n private dataQuery(params: ToolInventoryParams): Observable<ToolInventory> {\r\n const psSession = this.appContext.powerShell.createSession(params.name, null, params.requestOptions);\r\n return this.appContext.powerShell.run(\r\n psSession,\r\n params.command ? <PowerShellCommand>{ command: params.command, script: params.script, module: params.module } : params.script)\r\n .pipe(\r\n map((data: any) => {\r\n const inventory = new ToolInventory(params.name);\r\n if (data && data.results && data.results.length > 0) {\r\n const result = data.results[0];\r\n inventory.name = params.name;\r\n inventory.id = params.id;\r\n switch (result.state) {\r\n case EnvironmentModuleToolState[EnvironmentModuleToolState.Available]:\r\n inventory.state = EnvironmentModuleToolState.Available;\r\n break;\r\n case EnvironmentModuleToolState[EnvironmentModuleToolState.NotConfigured]:\r\n inventory.state = EnvironmentModuleToolState.NotConfigured;\r\n break;\r\n case EnvironmentModuleToolState[EnvironmentModuleToolState.NotSupported]:\r\n default:\r\n inventory.state = EnvironmentModuleToolState.NotSupported;\r\n break;\r\n }\r\n\r\n inventory.message = result.message;\r\n inventory.properties = [];\r\n const properties: ToolInventoryProperty[] = result.properties;\r\n if (properties) {\r\n for (const pair of properties) {\r\n inventory.properties.push(pair);\r\n }\r\n }\r\n }\r\n\r\n return inventory;\r\n }));\r\n }\r\n\r\n /**\r\n * Defines how to identify the cache entry by params.\r\n *\r\n * @param params the tool inventory query params.\r\n * @return the id string.\r\n */\r\n private dataInstanceId(params: ToolInventoryParams): string {\r\n return `${params.name}:${params.id}`;\r\n }\r\n\r\n /**\r\n * Defines how to deserialize the class object from seralized data.\r\n *\r\n * @param serialized the serialized string;\r\n */\r\n private dataDeserialize(serialized: string): ToolInventory {\r\n const inventory: ToolInventoryData = JSON.parse(serialized);\r\n return new ToolInventory(inventory.name, inventory);\r\n }\r\n\r\n /**\r\n * Defines how to serialize the class object to seralized data.\r\n *\r\n * @param instance the class instance.\r\n */\r\n private dataSerialize(instance: ToolInventory): string {\r\n // automatically stripped out class related data.\r\n return JSON.stringify(instance);\r\n }\r\n}\r\n"]}
|