@microsoft/windows-admin-center-sdk 2.510.2 → 2.523.1
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/id-ID/strings.json +1 -0
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +53 -14
- 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 +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/accordion/accordion-panel/accordion-panel.component.js +30 -5
- package/angular/esm2015/src/controls/details/details.component.js +18 -5
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +52 -14
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +26 -1
- package/angular/src/controls/details/details.component.d.ts +5 -1
- package/core/assets/strings/id-ID/strings.json +1 -0
- package/core/data/wdac-operations.d.ts +0 -48
- package/core/data/wdac-operations.js +1 -37
- package/core/data/wdac-operations.js.map +1 -1
- package/core/manifest/module-schema.json +1 -0
- package/core/security/sign-on-manager.d.ts +1 -1
- package/core/security/sign-on-manager.js +1 -1
- package/core/security/sign-on-manager.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/id-ID/strings.json +1 -0
- 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 +1 -1
- package/styles/css/main-v2.css +1 -1
- package/tools/gulp-ps-resjson/index.js +1 -1
- package/tools/gulp-ps-resjson/index.js.map +1 -1
|
@@ -5,13 +5,38 @@ export declare class PanelControlComponent {
|
|
|
5
5
|
static ɵcmp: i0.ɵɵComponentDefWithMeta<PanelControlComponent, "sme-panel-control", never, {}, {}, never, ["*"]>;
|
|
6
6
|
}
|
|
7
7
|
export declare class AccordionPanelComponent {
|
|
8
|
+
/**
|
|
9
|
+
* It determines the header for the panel.
|
|
10
|
+
*/
|
|
8
11
|
header: string;
|
|
12
|
+
/**
|
|
13
|
+
* It indicates whether the panel is opened.
|
|
14
|
+
*/
|
|
9
15
|
opened: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* It indicates whether the panel is expandable.
|
|
18
|
+
*/
|
|
10
19
|
isExpandable: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* It determines the border radius for the panel.
|
|
22
|
+
* True will apply border radius to have round corners.
|
|
23
|
+
*/
|
|
24
|
+
borderRadius: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* It determines the padding inset for the panel body.
|
|
27
|
+
* True will apply a default padding to the panel body.
|
|
28
|
+
*/
|
|
29
|
+
paddingInset: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* It indicates whether the panel can be closed.
|
|
32
|
+
*/
|
|
11
33
|
canClose: boolean;
|
|
12
34
|
constructor();
|
|
13
35
|
toggled: EventEmitter<AccordionPanelComponent>;
|
|
36
|
+
/**
|
|
37
|
+
* The on toggle function implementation.
|
|
38
|
+
*/
|
|
14
39
|
onToggle(): void;
|
|
15
40
|
static ɵfac: i0.ɵɵFactoryDef<AccordionPanelComponent, never>;
|
|
16
|
-
static ɵcmp: i0.ɵɵComponentDefWithMeta<AccordionPanelComponent, "sme-accordion-panel", never, { "header": "header"; "opened": "opened"; "isExpandable": "isExpandable"; }, { "toggled": "toggled"; }, never, ["sme-panel-control", "*"]>;
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDefWithMeta<AccordionPanelComponent, "sme-accordion-panel", never, { "header": "header"; "opened": "opened"; "isExpandable": "isExpandable"; "borderRadius": "borderRadius"; "paddingInset": "paddingInset"; }, { "toggled": "toggled"; }, never, ["sme-panel-control", "*"]>;
|
|
17
42
|
}
|
|
@@ -28,6 +28,10 @@ export declare class DetailsComponent extends CoreBaseComponent implements OnCha
|
|
|
28
28
|
initialHeightPercentage: number;
|
|
29
29
|
header: string;
|
|
30
30
|
chevronInverted: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The detail component's height will be determined on the whole children's height.
|
|
33
|
+
*/
|
|
34
|
+
autoHeight: boolean;
|
|
31
35
|
/**
|
|
32
36
|
* @deprecated since 02/25/2019. Please use 'header' instead
|
|
33
37
|
*/
|
|
@@ -57,5 +61,5 @@ export declare class DetailsComponent extends CoreBaseComponent implements OnCha
|
|
|
57
61
|
protected getInitialHostClasses(): string[];
|
|
58
62
|
protected createIdBag(): MsftSme.StringMap<string>;
|
|
59
63
|
static ɵfac: i0.ɵɵFactoryDef<DetailsComponent, [null, { optional: true; }]>;
|
|
60
|
-
static ɵcmp: i0.ɵɵComponentDefWithMeta<DetailsComponent, "sme-details", never, { "initialHeightPercentage": "initialHeightPercentage"; "header": "header"; "chevronInverted": "chevronInverted"; "title": "title"; "isExpanded": "isExpanded"; }, { "isExpandedChange": "isExpandedChange"; }, never, ["*"]>;
|
|
64
|
+
static ɵcmp: i0.ɵɵComponentDefWithMeta<DetailsComponent, "sme-details", never, { "initialHeightPercentage": "initialHeightPercentage"; "header": "header"; "chevronInverted": "chevronInverted"; "autoHeight": "autoHeight"; "title": "title"; "isExpanded": "isExpanded"; }, { "isExpandedChange": "isExpandedChange"; }, never, ["*"]>;
|
|
61
65
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"Strings":{"MsftSmeShell":{"Core":{"Error":{"ArgumentNullError":{"message":"{0} - Kesalahan null argumen: {1}"},"ArgumentError":{"message":"{0} - Kesalahan argumen: {1}."},"UnknownBrowser":{"message":"{0} - Jenis browser tidak diketahui."},"GatewayNameRequired":{"message":"Nama gateway wajib diisi."},"NoResponseError":{"message":"Tidak dapat menemukan objek kesalahan."},"NoCode":{"message":"Tipe format kode kesalahan tidak diketahui."},"PowerShellUnableSessionClose":{"message":"PowerShell: Tidak dapat menutup sesi; tidak aktif."},"PowerShellUnableCancelCommand":{"message":"PowerShell: Tidak dapat membatalkan sesi/perintah; tidak aktif."},"QueryCacheFetchOrder":{"message":"QueryCache: Tidak dapat mengambil data; panggil createObservable() terlebih dahulu."},"QueryCacheFetchErrorOnce":{"message":"QueryCache: Tidak dapat mengambil setelah kesalahan."},"QueryCacheRefreshOrder":{"message":"QueryCache: Tidak dapat menyegarkan data; panggil createObservable() dan fetch() terlebih dahulu."},"QueryCacheRefreshErrorOnce":{"message":"QueryCache: Tidak dapat me-refresh setelah kesalahan."},"QueryCacheRecoverNoCachedResource":{"message":"QueryCache: Tidak dapat memulihkan; tidak ada sumber daya singgahan."},"QueryCacheRecoverMissingRecoveryOption":{"message":"QueryCache: Tidak dapat memulihkan; tidak ada opsi enableRecovery yang dikonfigurasi."},"ResourceCacheUnableFind":{"message":"ResourceCache: Tidak dapat menemukan sumber daya tipe: {0}."},"LoggingUnableSubmit":{"message":"Pengelogan: Tidak dapat mengirimkan data pengelogan/telemetri: {0}"},"EnvironmentNotInitialized":{"message":"Manifes: lingkungan belum diinisialisasi. Harap tunggu untuk mendapatkan koleksi objek 'entryPoint' hingga setelah inisialisasi selesai."},"EnvironmentMissingDefault":{"message":"Manifes: connectionTypeDefaultSolution atau connectionTypeDefaultTool tidak ada dalam manifes."},"NotificationRpcInitialization":{"message":"Pemberitahuan: Tidak dapat menginisialisasi komunikasi RPC:{0}."},"NotificationUnsupportedState":{"message":"Pemberitahuan: Status pemberitahuan yang tidak didukung ditentukan."},"NotificationEmptyMessage":{"message":"Pemberitahuan: Menerima pesan pemberitahuan kosong."},"NotificationNoWorkItemFound":{"message":"Pemberitahuan: Tidak dapat memperoleh item kerja saat ini:{0}."},"NotificationUnexpectedReceived":{"message":"Pemberitahuan: Pembaruan pemberitahuan tak terduga diterima: {0}."},"NotificationWebsocketInitialize":{"message":"Pemberitahuan: Tidak dapat menginisialisasi komunikasi WebSocket:{0}"},"NotificationNoIdFound":{"message":"Pemberitahuan: Tidak dapat menemukan pemberitahuan berdasarkan ID: {0}."},"RpcTypeNoMatch":{"message":"RPC: Tipe terdaftar tidak cocok. '{0}'"},"RpcNotFoundModule":{"message":"RPC: Tidak dapat menemukan modul untuk {0}#{1}."},"RpcTargetWindowNotConfigured":{"message":"RPC: TargetWindows tidak dikonfigurasi."},"RpcExpiredRetry":{"message":"RPC: Percobaan ulang yang kedaluwarsa '{0}'."},"RpcExpired":{"message":"RPC: Pengiriman kedaluwarsa dari '{0}:{1}' ke '{2}:{3}' '{4}/{5}'."},"RpcSignatureError":{"message":"RPC: Kejadian tanda tangan tak terduga diterima."},"RpcUnexpectedDestination":{"message":"RPC: Nama tujuan tak terduga diterima: {0}"},"RpcUnexpectedEvent":{"message":"RPC: Kejadian tak terduga diterima: {0}:{1}"},"RpcUnexpectedSequence":{"message":"RPC: Urutan data respons tak terduga diterima."},"RpcUnexpectedErrorSequence":{"message":"RPC: Data kesalahan urutan tak terduga diterima."},"RpcNotInitialized":{"message":"RPC: Tidak diinisialisasi dan belum siap."},"RpcNotFountInbound":{"message":"RPC: Tidak ditemukan {0} yang masuk: {1}."},"RpcTimeout":{"message":"RPC: Waktu habis"},"AddNativeErrorCode":{"message":"{0} Detail: {1}."},"RpcSubjectClosed":{"message":"RPC: Subjek telah ditutup atau mengalami kesalahan: {0}."},"RpcNotRegisteredHandler":{"message":"RPC: Handler perintah tidak terdaftar dipanggil. Nama perintah:{0}."},"RpcFailedFindModuleManifest":{"message":"RPC: Tidak dapat menemukan manifes modul: {0}"},"ForwarderIdConflict":{"message":"Forwarder: Layanan dengan ID '{0}' telah terdaftar sebagai forwarder RPC."},"ForwarderIdNotFound":{"message":"Penerus: Tidak ditemukan layanan penerusan dengan ID '{0}'."},"ForwarderUnknownType":{"message":"Penerus: Tipe penerusan RPC tidak diketahui: {0}."},"InvalidValue":{"message":"Nilai tidak valid untuk {0}"},"ServerListRetrieve":{"message":"Tidak dapat mengambil daftar server yang disimpan:{0}."},"ServerListFailedSave":{"message":"Tidak dapat menyimpan koneksi. Bidang tipe atau nama tidak ada."},"ConnectionStream":{"message":"Terjadi kesalahan saat mengalirkan koneksi: {0}."},"ExpectedSingleNode":{"message":"Diharapkan node tunggal atau node kluster untuk mengambil nama node."},"ExpectedClusterNode":{"message":"Diharapkan node kluster untuk mengambil node anggota."},"BatchConnection":{"message":"Tidak dapat membuat sesi PowerShell pada node, status: {0}, kode kesalahan:{1}, pesan kesalahan:{2}."},"BatchResponseParsing":{"message":"Tidak dapat mengekstrak batas dari respons; awal yang diekstrak: {0}, akhir: {1}."},"BatchUnSupportedInvocation":{"message":"Invokasi metode yang tidak didukung: {0}."},"GatewayUrlNotConfigured":{"message":"URL gateway belum dikonfigurasi."},"GatewayUrlMalformed":{"message":"URL gateway rusak."},"ToolValidationResult":{"message":"Tidak dapat memvalidasi kondisi alat: {0} {1}"},"ToolValidationUnsupportedOperator":{"message":"Manifes menyertakan tipe operator yang tidak didukung dalam pernyataan kondisi: {0}: {1}."},"ToolValidationUnsupportedDataType":{"message":"Manifes menyertakan tipe data yang tidak didukung dalam pernyataan kondisi: {0}: {1}."},"ToolValidationVersionFormat":{"message":"Manifes memiliki kesalahan format kondisi versi."},"ToolValidationInventoryError":{"title":"Tidak dapat mengkueri inventori komputer","message":"Coba perbaiki masalah koneksi komputer dan refresh browser. Kami tidak dapat mengkueri data inventori komputer untuk menentukan kumpulan alat. Kesalahan: {0}"},"ToolValidationGatewayInventoryError":{"title":"Tidak dapat mengkueri inventori gateway","message":"Coba perbaiki masalah koneksi komputer dan refresh browser. Kami tidak dapat mengkueri data inventori gateway untuk menentukan kumpulan alat. Kesalahan: {0}"},"PowerShellRunCommandFormat":{"message":"Kesalahan argumen perintah Windows PowerShell 'run' dengan format data yang tidak didukung."},"PrefixFormat":{"message":"Kesalahan: {0}"}},"ErrorCode":{"Code0":{"message":"Berhasil"},"Code5":{"message":"Akses ditolak"},"Code50":{"message":"Permintaan tidak didukung"},"Code87":{"message":"Parameter salah"},"Code110":{"message":"Sistem tidak dapat membuka objek yang ditentukan"},"Code1323":{"message":"Tidak dapat memperbarui kata sandi"},"Code1326":{"message":"Kegagalan log masuk: nama pengguna tidak diketahui atau kata sandi buruk"},"Code1355":{"message":"Domain yang ditentukan tidak ada atau tidak dapat dihubungi"},"Code2224":{"message":"Akun sudah ada"},"Code2691":{"message":"Mesin sudah bergabung dengan domain"},"Code2692":{"message":"Komputer saat ini tidak tergabung ke domain"},"Code8004108":{"message":"Kata sandi dan Nama pengguna ditentukan tetapi tingkat autentikasi tidak RPC_C_AUTHN_LEVEL_PKT_PRIVACY"},"Translated":{"message":"{0}, Kode kesalahan={1}."},"Generic":{"message":"Kode kesalahan={0}."}},"ErrorFormat":{"Single":{"message":"{0}: {1}","Details":{"message":"{0}: {1}{2}."}},"Multiple":{"message":"({0}) {1}: {2}","Details":{"message":"({0}) {1}: {2}{3}"}}},"Units":{"MediaConversionFormat":{"message":"{0}{1}"},"MediaConversionUnknownFormat":{"message":"-"},"MediaConversionB":{"label":"B"},"MediaConversionKB":{"label":"KB"},"MediaConversionMB":{"label":"MB"},"MediaConversionGB":{"label":"GB"},"MediaConversionTB":{"label":"TB"},"MediaConversionPT":{"label":"PB"},"MediaConversionXB":{"label":"XB"},"MediaConversionZB":{"label":"ZB"},"MediaConversionYB":{"label":"YB"},"PercentageConversionPercentFormat":{"message":"{0} %"},"PercentageConversionUnknownFormat":{"message":"-"}},"Connection":{"NoConnection":{"label":"Tidak dapat tersambung","message":"Verifikasi detail koneksi, lalu coba lagi."},"NoStatusProvider":{"label":"Penyedia status tidak ada.","message":"Tidak ada penyedia status untuk tipe koneksi '{0}'"},"ErrorState":{"label":"Kesalahan koneksi"},"FatalState":{"label":"Kesalahan koneksi"},"OnlineState":{"label":"Online"},"fqdn":{"foundFormat":"Ditemukan '{0}'"},"NeedsAuthorizationState":{"label":"Tentukan kredensial Anda"},"UnknownState":{"label":"Tidak Dikenal","description":"Kami tidak dapat mengonfirmasi bahwa Anda dapat menggunakan koneksi ini, tetapi kami akan tetap menambahkannya."},"WarningState":{"label":"Peringatan"},"ErrorNodeName":{"message":"Penyedia Status menentukan penggunaan <connection>.{0} sebagai nama node; {0} tidak ada atau bukan string."},"ErrorGatewayUrl":{"message":"Penyedia Status menentukan menggunakan URL gateway relatif, tetapi tidak ada yang ditentukan."},"ErrorService":{"message":"Penyedia Status menentukan menggunakan metode layanan ekstensi, tetapi tidak ada yang ditentukan."},"ErrorWorker":{"message":"Penyedia Status menentukan menggunakan metode pekerja ekstensi, tetapi tidak ada yang ditentukan."}},"DirectoryList":{"Upload":{"Error":{"FileNotFound":"File tidak ditemukan atau masalah jaringan lainnya.","OperationBlocked":"Operasi ini diblokir oleh pengaturan kontrol akses berbasis peran atau masalah jaringan lainnya.","Unknown":"Gagal mengunggah dengan kode status {0}"}}},"WebsocketStream":{"Common":{"ConnectionRetiesError":{"message":"Kesalahan koneksi WebSocket setelah percobaan ulang."},"HandlerRegistrationError":{"message":"Handler panggilan balik WebSocket dari {0} tidak terdaftar."},"CommunicationError":{"message":"Kesalahan komunikasi WebSocket."},"CommunicationErrorDetail":{"message":"Kesalahan komunikasi WebSocket. {0}"}},"CimStream":{"ResetError":{"message":"WebSocket/CIM telah diatur ulang."},"NoContentError":{"message":"WebSocket/CIM tidak memiliki konten pesan."},"UnexpectedReceivedError":{"message":"WebSocket/CIM menerima pesan yang tidak terduga."},"UnexpectedMultipleError":{"message":"WebSocket/CIM menerima beberapa format instans yang tidak terduga."},"ConnectionError":{"message":"WebSocket/CIM tidak tersambung atau tidak dikonfigurasi."}},"PowerShellStream":{"ResetError":{"message":"WebSocket/PowerShell telah diatur ulang."},"NoContentError":{"message":"WebSocket/PowerShell tidak memiliki konten pesan."},"UnexpectedReceivedError":{"message":"WebSocket/PowerShell menerima pesan yang tidak terduga."},"ConnectionError":{"message":"WebSocket/PowerShell tidak tersambung atau tidak dikonfigurasi."}}},"Rpc":{"Version":{"message":"Versi RPC: versi shell={0}, {1} version={2}."},"MissingVersion":{"message":"RPC: Inisialisasi gagal dengan informasi versi yang hilang: module={0}."},"Azure":{"Unexpected":{"Error":{"message":"Respons Tak Terduga dari Permintaan Azure RPC"}}}},"Decorators":{"Deprecated":{"messageFormat":"\"{0}\" tidak digunakan lagi sejak {1}. {2} {3}","alternateSignatureFormat":"Gunakan \"{0}\" sebagai gantinya.","CssClass":{"messageFormat":"\"{0}\" Kelas CSS tidak digunakan lagi sejak {1}. {2} {3}"}},"Obsolete":{"messageFormat":"\"{0}\" sudah usang sejak {1} dan akan segera dihapus. {2} {3}","alternateSignatureFormat":"Gunakan \"{0}\" sebagai gantinya."}},"Errors":{"UserProfile":{"Get":{"formatMessage":"Terjadi kesalahan saat mengambil profil pengguna: {0}."}}},"ScheduleReboot":{"Restart":{"Inprogress":{"Title":"Memulai ulang komputer","Message":"Memulai ulang komputer {0}..."},"Success":{"Title":"Berhasil memulai ulang komputer","Message":"Berhasil memulai ulang komputer {0}"},"Fail":{"Title":"Tidak dapat memulai ulang komputer","Message":"Kami tidak dapat memulai ulang {0} komputer. Kesalahan: {1}"}},"Schedule":{"Success":{"Title":"Boot ulang perangkat berhasil dijadwalkan","Message":"Berhasil menjadwalkan {0} perangkat untuk di-boot ulang pada {1}"},"Fail":{"Title":"Tidak dapat menjadwalkan boot ulang perangkat","Message":"Kami tidak dapat memulai ulang terjadwal sistem untuk {0} perangkat. Kesalahan: {1}"}},"Confirmation":{"Title":"Hidupkan ulang komputer","Message":"Yakin ingin memulai ulang perangkat {0}?"},"Error":{"NoRestartOptions":"Opsi mulai ulang tidak disediakan"},"Info":{"CancellingReboot":"Membatalkan boot ulang sistem terjadwal..."}},"CredSSPManager":{"TryGatewayLocalPowerShellConfigNotConfirmed":{"error":"Pengguna tidak mengonfirmasi pengaktifan CredSSP."}}}}}}
|
|
@@ -47,39 +47,6 @@ export interface PsLanguageModeResult {
|
|
|
47
47
|
*/
|
|
48
48
|
psLanguageMode: PSLanguageMode;
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Represents the data returned from the TransferModules endpoint - /api/nodes/<node>/features/wdac/operations/transferModules
|
|
52
|
-
*/
|
|
53
|
-
export interface TransferModulesResult {
|
|
54
|
-
/**
|
|
55
|
-
* The node the modules have been transferred to.
|
|
56
|
-
*/
|
|
57
|
-
targetNodeName: string;
|
|
58
|
-
/**
|
|
59
|
-
* (msft.sme.x) name of the transferred module.
|
|
60
|
-
*/
|
|
61
|
-
name: string;
|
|
62
|
-
/**
|
|
63
|
-
* Version of the transferred module.
|
|
64
|
-
*/
|
|
65
|
-
version: string;
|
|
66
|
-
/**
|
|
67
|
-
* (Microsoft.SME.X) name of the transferred module.
|
|
68
|
-
*/
|
|
69
|
-
powerShellModuleName: string;
|
|
70
|
-
/**
|
|
71
|
-
* Indicates if the transferred module is localized.
|
|
72
|
-
*/
|
|
73
|
-
isLocalized: boolean;
|
|
74
|
-
/**
|
|
75
|
-
* Indicates if all subdirectories & files within the module folder were successfully copied.
|
|
76
|
-
*/
|
|
77
|
-
noErrorOccurred: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Error message (if any).
|
|
80
|
-
*/
|
|
81
|
-
errorMessage: string;
|
|
82
|
-
}
|
|
83
50
|
/**
|
|
84
51
|
* Windows Defender Application Control (WDAC) Constants.
|
|
85
52
|
*/
|
|
@@ -92,11 +59,6 @@ export declare class WdacConstants {
|
|
|
92
59
|
* PowerShell Language mode API endpoint.
|
|
93
60
|
*/
|
|
94
61
|
static psLanguageModeUrl: string;
|
|
95
|
-
/**
|
|
96
|
-
* Wdac module transfer API endpoint.
|
|
97
|
-
* NOTE: Any specific module requests need to be specified in the body.
|
|
98
|
-
*/
|
|
99
|
-
static wdacTransferToTargetUrl: string;
|
|
100
62
|
}
|
|
101
63
|
/**
|
|
102
64
|
* Windows Defender Application Control (WDAC) operations class.
|
|
@@ -121,14 +83,4 @@ export declare class WdacOperations {
|
|
|
121
83
|
* @param options the NodeRequestOptions for this API call.
|
|
122
84
|
*/
|
|
123
85
|
getPsLanguageMode(targetNodeName: string, options?: NodeRequestOptions): Observable<PsLanguageModeResult>;
|
|
124
|
-
/**
|
|
125
|
-
* Transfer WAC module(s) to the target node specified. (Elevate the desktop gateway if required.)
|
|
126
|
-
* @deprecated This method is not currently used for any WDAC flow and was originally intended for WDAC cluster support.
|
|
127
|
-
* TODO: Will be removed after WDAC optimizations are implemented.
|
|
128
|
-
*
|
|
129
|
-
* @param targetNodeName the node modules are being transferred to.
|
|
130
|
-
* @param options the NodeRequestOptions for this API call.
|
|
131
|
-
* @param moduleNames the specific PS modules requests to be transferred to this node (optional).
|
|
132
|
-
*/
|
|
133
|
-
transferModulesToTargetNode(targetNodeName: string, options: NodeRequestOptions, moduleNames?: string[]): Observable<TransferModulesResult[]>;
|
|
134
86
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { throwError } from 'rxjs';
|
|
2
|
-
import { catchError,
|
|
2
|
+
import { catchError, switchMap } from 'rxjs/operators';
|
|
3
3
|
/**
|
|
4
4
|
* Windows Defender Application Control (WDAC) mode values.
|
|
5
5
|
* https://learn.microsoft.com/lv-lv/dotnet/api/microsoft.powershell.commands.deviceguardconfigcodeintegritystatus?view=powershellsdk-1.1.0
|
|
@@ -34,11 +34,6 @@ WdacConstants.wdacModeUrl = 'features/wdac/operations/wdacMode';
|
|
|
34
34
|
* PowerShell Language mode API endpoint.
|
|
35
35
|
*/
|
|
36
36
|
WdacConstants.psLanguageModeUrl = 'features/wdac/operations/psLanguageMode';
|
|
37
|
-
/**
|
|
38
|
-
* Wdac module transfer API endpoint.
|
|
39
|
-
* NOTE: Any specific module requests need to be specified in the body.
|
|
40
|
-
*/
|
|
41
|
-
WdacConstants.wdacTransferToTargetUrl = 'features/wdac/operations/transferModules';
|
|
42
37
|
/**
|
|
43
38
|
* Windows Defender Application Control (WDAC) operations class.
|
|
44
39
|
*/
|
|
@@ -83,37 +78,6 @@ export class WdacOperations {
|
|
|
83
78
|
return throwError(error);
|
|
84
79
|
}));
|
|
85
80
|
}
|
|
86
|
-
/**
|
|
87
|
-
* Transfer WAC module(s) to the target node specified. (Elevate the desktop gateway if required.)
|
|
88
|
-
* @deprecated This method is not currently used for any WDAC flow and was originally intended for WDAC cluster support.
|
|
89
|
-
* TODO: Will be removed after WDAC optimizations are implemented.
|
|
90
|
-
*
|
|
91
|
-
* @param targetNodeName the node modules are being transferred to.
|
|
92
|
-
* @param options the NodeRequestOptions for this API call.
|
|
93
|
-
* @param moduleNames the specific PS modules requests to be transferred to this node (optional).
|
|
94
|
-
*/
|
|
95
|
-
transferModulesToTargetNode(targetNodeName, options, moduleNames) {
|
|
96
|
-
// Specific module transfers need to be in the included in the body,
|
|
97
|
-
// otherwise all manifest-mapped modules are transferred from Gateway.
|
|
98
|
-
let body = null;
|
|
99
|
-
if (moduleNames) {
|
|
100
|
-
body = JSON.stringify({ requestedModules: moduleNames });
|
|
101
|
-
}
|
|
102
|
-
return this.appContext.node.post(targetNodeName, WdacConstants.wdacTransferToTargetUrl, body, options)
|
|
103
|
-
.pipe(catchError((error, caught) => {
|
|
104
|
-
// catch elevation error and retry after elevated.
|
|
105
|
-
if (this.appContext.gateway.isElevationRequired(error)) {
|
|
106
|
-
return this.appContext.gateway.pollingGatewayElevated()
|
|
107
|
-
.pipe(switchMap(elevated => elevated ? caught : throwError(error)));
|
|
108
|
-
}
|
|
109
|
-
return throwError(error);
|
|
110
|
-
}), map((response) => {
|
|
111
|
-
if (!response) {
|
|
112
|
-
throw new Error('WdacOperations transferModulesToTargetNode() call failed with a null response result.');
|
|
113
|
-
}
|
|
114
|
-
return response;
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
81
|
}
|
|
118
82
|
|
|
119
83
|
//# sourceMappingURL=wdac-operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/data/wdac-operations.ts"],"names":[],"mappings":"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","file":"wdac-operations.js","sourcesContent":["import { Observable, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { AppContext } from './app-context';\r\nimport { HttpStatusCode } from './http-constants';\r\nimport { NodeRequestOptions } from './node-connection';\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) mode values.\r\n * https://learn.microsoft.com/lv-lv/dotnet/api/microsoft.powershell.commands.deviceguardconfigcodeintegritystatus?view=powershellsdk-1.1.0\r\n */\r\nexport enum WdacMode {\r\n Off = 0,\r\n AuditMode = 1,\r\n EnforcementMode = 2\r\n}\r\n\r\n/**\r\n * PowerShell Language mode values.\r\n * https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.pslanguagemode?view=powershellsdk-7.0.0\r\n */\r\nexport enum PSLanguageMode {\r\n FullLanguage = 0,\r\n RestrictedLanguage = 1,\r\n NoLanguage = 2,\r\n ConstrainedLanguage = 3\r\n}\r\n\r\n/**\r\n * Represents the data returned from the wdacMode endpoint - /api/nodes/<node>/features/wdac/operations/wdacMode\r\n */\r\nexport interface WdacModeResult {\r\n /**\r\n * Status of the request/response.\r\n */\r\n status: HttpStatusCode;\r\n\r\n /**\r\n * WdacMode of the target node.\r\n */\r\n wdacMode: WdacMode;\r\n}\r\n\r\n/**\r\n * Represents the data returned from the psLanguageMode endpoint - /api/nodes/<node>/features/wdac/operations/psLanguageMode\r\n */\r\n export interface PsLanguageModeResult {\r\n /**\r\n * Status of the request/response.\r\n */\r\n status: HttpStatusCode;\r\n\r\n /**\r\n * PowerShell Language Mode of the target node.\r\n */\r\n psLanguageMode: PSLanguageMode;\r\n}\r\n\r\n/**\r\n * Represents the data returned from the TransferModules endpoint - /api/nodes/<node>/features/wdac/operations/transferModules\r\n */\r\nexport interface TransferModulesResult {\r\n /**\r\n * The node the modules have been transferred to.\r\n */\r\n targetNodeName: string;\r\n\r\n /**\r\n * (msft.sme.x) name of the transferred module.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Version of the transferred module.\r\n */\r\n version: string;\r\n\r\n /**\r\n * (Microsoft.SME.X) name of the transferred module.\r\n */\r\n powerShellModuleName: string;\r\n\r\n /**\r\n * Indicates if the transferred module is localized.\r\n */\r\n isLocalized: boolean;\r\n\r\n /**\r\n * Indicates if all subdirectories & files within the module folder were successfully copied.\r\n */\r\n noErrorOccurred: boolean;\r\n\r\n /**\r\n * Error message (if any).\r\n */\r\n errorMessage: string;\r\n}\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) Constants.\r\n */\r\nexport class WdacConstants {\r\n /**\r\n * Wdac mode API endpoint.\r\n */\r\n public static wdacModeUrl = 'features/wdac/operations/wdacMode';\r\n\r\n /**\r\n * PowerShell Language mode API endpoint.\r\n */\r\n public static psLanguageModeUrl = 'features/wdac/operations/psLanguageMode';\r\n\r\n /**\r\n * Wdac module transfer API endpoint.\r\n * NOTE: Any specific module requests need to be specified in the body.\r\n */\r\n public static wdacTransferToTargetUrl = 'features/wdac/operations/transferModules';\r\n}\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) operations class.\r\n */\r\nexport class WdacOperations {\r\n /**\r\n * Initializes a new instance of the WdacOperations class.\r\n *\r\n * @param appContext the application context.\r\n */\r\n constructor(private appContext: AppContext) { }\r\n\r\n /**\r\n * Gets the WdacMode of a specified targetNodeName.\r\n * @param targetNodeName the machine name to get the WdacMode for.\r\n * @param options the NodeRequestOptions for this API call.\r\n */\r\n public getWdacMode(targetNodeName: string, options?: NodeRequestOptions): Observable<WdacModeResult> {\r\n return this.appContext.node.get(targetNodeName, WdacConstants.wdacModeUrl, options)\r\n .pipe(\r\n catchError((error, caught) => {\r\n // catch elevation error and retry after elevated.\r\n if (this.appContext.gateway.isElevationRequired(error)) {\r\n return this.appContext.gateway.pollingGatewayElevated()\r\n .pipe(switchMap(elevated => elevated ? caught : throwError(error)));\r\n }\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Gets the PowerShell Language Mode of a specified targetNodeName.\r\n * @param targetNodeName the machine name to get the WdacMode for.\r\n * @param options the NodeRequestOptions for this API call.\r\n */\r\n public getPsLanguageMode(targetNodeName: string, options?: NodeRequestOptions): Observable<PsLanguageModeResult> {\r\n return this.appContext.node.get(targetNodeName, WdacConstants.psLanguageModeUrl, options)\r\n .pipe(\r\n catchError((error, caught) => {\r\n // catch elevation error and retry after elevated.\r\n if (this.appContext.gateway.isElevationRequired(error)) {\r\n return this.appContext.gateway.pollingGatewayElevated()\r\n .pipe(switchMap(elevated => elevated ? caught : throwError(error)));\r\n }\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Transfer WAC module(s) to the target node specified. (Elevate the desktop gateway if required.)\r\n * @deprecated This method is not currently used for any WDAC flow and was originally intended for WDAC cluster support.\r\n * TODO: Will be removed after WDAC optimizations are implemented.\r\n *\r\n * @param targetNodeName the node modules are being transferred to.\r\n * @param options the NodeRequestOptions for this API call.\r\n * @param moduleNames the specific PS modules requests to be transferred to this node (optional).\r\n */\r\n public transferModulesToTargetNode(\r\n targetNodeName: string,\r\n options: NodeRequestOptions,\r\n moduleNames?: string[]\r\n ): Observable<TransferModulesResult[]> {\r\n // Specific module transfers need to be in the included in the body,\r\n // otherwise all manifest-mapped modules are transferred from Gateway.\r\n let body = null;\r\n if (moduleNames) {\r\n body = JSON.stringify({ requestedModules: moduleNames });\r\n }\r\n\r\n return this.appContext.node.post(targetNodeName, WdacConstants.wdacTransferToTargetUrl, body, options)\r\n .pipe(\r\n catchError((error, caught) => {\r\n // catch elevation error and retry after elevated.\r\n if (this.appContext.gateway.isElevationRequired(error)) {\r\n return this.appContext.gateway.pollingGatewayElevated()\r\n .pipe(switchMap(elevated => elevated ? caught : throwError(error)));\r\n }\r\n return throwError(error);\r\n }),\r\n map((response: TransferModulesResult[]) => {\r\n if (!response) {\r\n throw new Error('WdacOperations transferModulesToTargetNode() call failed with a null response result.');\r\n }\r\n\r\n return response;\r\n })\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/data/wdac-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,UAAU,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKvD;;;GAGG;AACH,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,qCAAO,CAAA;IACP,iDAAa,CAAA;IACb,6DAAmB,CAAA;AACvB,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,mEAAgB,CAAA;IAChB,+EAAsB,CAAA;IACtB,+DAAc,CAAA;IACd,iFAAuB,CAAA;AAC3B,CAAC,EALW,cAAc,KAAd,cAAc,QAKzB;AAgCD;;GAEG;AACH,MAAM,OAAO,aAAa;;AACtB;;GAEG;AACW,yBAAW,GAAG,mCAAmC,CAAC;AAEhE;;GAEG;AACW,+BAAiB,GAAG,yCAAyC,CAAC;AAGhF;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB;;;;OAIG;IACH,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAI,CAAC;IAE/C;;;;OAIG;IACI,WAAW,CAAC,cAAsB,EAAE,OAA4B;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC;aAC9E,IAAI,CACD,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,kDAAkD;YAClD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBACpD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,EAAE;qBAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3E;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CACL,CAAC;IACV,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,cAAsB,EAAE,OAA4B;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACpF,IAAI,CACD,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,kDAAkD;YAClD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBACpD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,EAAE;qBAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3E;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CACL,CAAC;IACV,CAAC;CACJ","file":"wdac-operations.js","sourcesContent":["import { Observable, throwError } from 'rxjs';\r\nimport { catchError, switchMap } from 'rxjs/operators';\r\nimport { AppContext } from './app-context';\r\nimport { HttpStatusCode } from './http-constants';\r\nimport { NodeRequestOptions } from './node-connection';\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) mode values.\r\n * https://learn.microsoft.com/lv-lv/dotnet/api/microsoft.powershell.commands.deviceguardconfigcodeintegritystatus?view=powershellsdk-1.1.0\r\n */\r\nexport enum WdacMode {\r\n Off = 0,\r\n AuditMode = 1,\r\n EnforcementMode = 2\r\n}\r\n\r\n/**\r\n * PowerShell Language mode values.\r\n * https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.pslanguagemode?view=powershellsdk-7.0.0\r\n */\r\nexport enum PSLanguageMode {\r\n FullLanguage = 0,\r\n RestrictedLanguage = 1,\r\n NoLanguage = 2,\r\n ConstrainedLanguage = 3\r\n}\r\n\r\n/**\r\n * Represents the data returned from the wdacMode endpoint - /api/nodes/<node>/features/wdac/operations/wdacMode\r\n */\r\nexport interface WdacModeResult {\r\n /**\r\n * Status of the request/response.\r\n */\r\n status: HttpStatusCode;\r\n\r\n /**\r\n * WdacMode of the target node.\r\n */\r\n wdacMode: WdacMode;\r\n}\r\n\r\n/**\r\n * Represents the data returned from the psLanguageMode endpoint - /api/nodes/<node>/features/wdac/operations/psLanguageMode\r\n */\r\nexport interface PsLanguageModeResult {\r\n /**\r\n * Status of the request/response.\r\n */\r\n status: HttpStatusCode;\r\n\r\n /**\r\n * PowerShell Language Mode of the target node.\r\n */\r\n psLanguageMode: PSLanguageMode;\r\n}\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) Constants.\r\n */\r\nexport class WdacConstants {\r\n /**\r\n * Wdac mode API endpoint.\r\n */\r\n public static wdacModeUrl = 'features/wdac/operations/wdacMode';\r\n\r\n /**\r\n * PowerShell Language mode API endpoint.\r\n */\r\n public static psLanguageModeUrl = 'features/wdac/operations/psLanguageMode';\r\n}\r\n\r\n/**\r\n * Windows Defender Application Control (WDAC) operations class.\r\n */\r\nexport class WdacOperations {\r\n /**\r\n * Initializes a new instance of the WdacOperations class.\r\n *\r\n * @param appContext the application context.\r\n */\r\n constructor(private appContext: AppContext) { }\r\n\r\n /**\r\n * Gets the WdacMode of a specified targetNodeName.\r\n * @param targetNodeName the machine name to get the WdacMode for.\r\n * @param options the NodeRequestOptions for this API call.\r\n */\r\n public getWdacMode(targetNodeName: string, options?: NodeRequestOptions): Observable<WdacModeResult> {\r\n return this.appContext.node.get(targetNodeName, WdacConstants.wdacModeUrl, options)\r\n .pipe(\r\n catchError((error, caught) => {\r\n // catch elevation error and retry after elevated.\r\n if (this.appContext.gateway.isElevationRequired(error)) {\r\n return this.appContext.gateway.pollingGatewayElevated()\r\n .pipe(switchMap(elevated => elevated ? caught : throwError(error)));\r\n }\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Gets the PowerShell Language Mode of a specified targetNodeName.\r\n * @param targetNodeName the machine name to get the WdacMode for.\r\n * @param options the NodeRequestOptions for this API call.\r\n */\r\n public getPsLanguageMode(targetNodeName: string, options?: NodeRequestOptions): Observable<PsLanguageModeResult> {\r\n return this.appContext.node.get(targetNodeName, WdacConstants.psLanguageModeUrl, options)\r\n .pipe(\r\n catchError((error, caught) => {\r\n // catch elevation error and retry after elevated.\r\n if (this.appContext.gateway.isElevationRequired(error)) {\r\n return this.appContext.gateway.pollingGatewayElevated()\r\n .pipe(switchMap(elevated => elevated ? caught : throwError(error)));\r\n }\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -81,7 +81,7 @@ export declare class SignOnManager {
|
|
|
81
81
|
* Check if it can handle unauthorized login case.
|
|
82
82
|
* @param code the error code.
|
|
83
83
|
* @param error the ajax error response.
|
|
84
|
-
* @returns
|
|
84
|
+
* @returns true if it can handle.
|
|
85
85
|
*/
|
|
86
86
|
canHandleUnauthorizedLogin(code: HttpStatusCode, error: AjaxError): boolean;
|
|
87
87
|
/**
|
|
@@ -60,7 +60,7 @@ export class SignOnManager {
|
|
|
60
60
|
* Check if it can handle unauthorized login case.
|
|
61
61
|
* @param code the error code.
|
|
62
62
|
* @param error the ajax error response.
|
|
63
|
-
* @returns
|
|
63
|
+
* @returns true if it can handle.
|
|
64
64
|
*/
|
|
65
65
|
canHandleUnauthorizedLogin(code, error) {
|
|
66
66
|
// unauthorized login was observed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/security/sign-on-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
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\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 true 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"]}
|