@pnp/cli-microsoft365 6.0.0-beta.78fdd2c → 6.0.0-beta.80d195f
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/.devcontainer/Dockerfile +3 -1
- package/.devcontainer/devcontainer.json +1 -0
- package/dist/m365/aad/commands/app/app-add.js +161 -22
- package/dist/m365/aad/commands/approleassignment/approleassignment-add.js +13 -13
- package/dist/m365/aad/commands/approleassignment/approleassignment-list.js +14 -14
- package/dist/m365/aad/commands/approleassignment/approleassignment-remove.js +12 -12
- package/dist/m365/aad/commands/o365group/o365group-add.js +2 -7
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-list.js +6 -6
- package/dist/m365/aad/commands/o365group/o365group-teamify.js +12 -12
- package/dist/m365/aad/commands/policy/policy-list.js +6 -6
- package/dist/m365/aad/commands/sp/sp-get.js +14 -14
- package/dist/m365/booking/commands/business/business-get.js +86 -0
- package/dist/m365/booking/commands/business/business-list.js +30 -0
- package/dist/m365/booking/commands.js +8 -0
- package/dist/m365/flow/commands/flow-disable.js +2 -2
- package/dist/m365/flow/commands/flow-enable.js +2 -2
- package/dist/m365/flow/commands/flow-export.js +5 -5
- package/dist/m365/flow/commands/flow-get.js +2 -2
- package/dist/m365/flow/commands/flow-list.js +2 -2
- package/dist/m365/flow/commands/flow-remove.js +3 -3
- package/dist/m365/flow/commands/run/run-cancel.js +6 -6
- package/dist/m365/flow/commands/run/run-get.js +4 -4
- package/dist/m365/flow/commands/run/run-list.js +4 -4
- package/dist/m365/flow/commands/run/run-resubmit.js +7 -7
- package/dist/m365/outlook/commands/message/message-move.js +2 -2
- package/dist/m365/pa/commands/connector/connector-export.js +3 -3
- package/dist/m365/pa/commands/connector/connector-list.js +2 -2
- package/dist/m365/pa/commands/solution/solution-reference-add.js +7 -7
- package/dist/m365/search/commands/externalconnection/externalconnection-remove.js +101 -0
- package/dist/m365/search/commands.js +2 -1
- package/dist/m365/spfx/commands/package/package-generate.js +2 -2
- package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
- package/dist/m365/spo/commands/app/SpoAppBaseCommand.js +1 -1
- package/dist/m365/spo/commands/app/app-add.js +7 -7
- package/dist/m365/spo/commands/app/app-deploy.js +7 -7
- package/dist/m365/spo/commands/app/app-get.js +7 -7
- package/dist/m365/spo/commands/app/app-install.js +6 -6
- package/dist/m365/spo/commands/app/app-list.js +7 -7
- package/dist/m365/spo/commands/app/app-remove.js +7 -7
- package/dist/m365/spo/commands/app/app-retract.js +7 -7
- package/dist/m365/spo/commands/app/app-uninstall.js +6 -6
- package/dist/m365/spo/commands/app/app-upgrade.js +6 -6
- package/dist/m365/spo/commands/apppage/apppage-set.js +2 -2
- package/dist/m365/spo/commands/cdn/cdn-policy-list.js +7 -7
- package/dist/m365/spo/commands/cdn/cdn-policy-set.js +7 -7
- package/dist/m365/spo/commands/contenttype/contenttype-field-set.js +13 -13
- package/dist/m365/spo/commands/customaction/customaction-add.js +3 -3
- package/dist/m365/spo/commands/customaction/customaction-clear.js +3 -3
- package/dist/m365/spo/commands/customaction/customaction-get.js +5 -4
- package/dist/m365/spo/commands/customaction/customaction-list.js +5 -4
- package/dist/m365/spo/commands/customaction/customaction-remove.js +6 -5
- package/dist/m365/spo/commands/customaction/customaction-set.js +3 -3
- package/dist/m365/spo/commands/feature/feature-disable.js +4 -4
- package/dist/m365/spo/commands/feature/feature-enable.js +5 -5
- package/dist/m365/spo/commands/feature/feature-list.js +3 -3
- package/dist/m365/spo/commands/field/field-get.js +1 -7
- package/dist/m365/spo/commands/field/field-remove.js +1 -7
- package/dist/m365/spo/commands/file/file-checkin.js +8 -8
- package/dist/m365/spo/commands/file/file-checkout.js +8 -8
- package/dist/m365/spo/commands/file/file-sharinginfo-get.js +16 -16
- package/dist/m365/spo/commands/folder/folder-get.js +2 -2
- package/dist/m365/spo/commands/folder/folder-remove.js +3 -3
- package/dist/m365/spo/commands/folder/folder-rename.js +4 -4
- package/dist/m365/spo/commands/hubsite/hubsite-connect.js +7 -7
- package/dist/m365/spo/commands/hubsite/hubsite-disconnect.js +6 -6
- package/dist/m365/spo/commands/hubsite/hubsite-register.js +4 -4
- package/dist/m365/spo/commands/hubsite/hubsite-rights-grant.js +4 -4
- package/dist/m365/spo/commands/hubsite/hubsite-rights-revoke.js +5 -5
- package/dist/m365/spo/commands/knowledgehub/knowledgehub-set.js +4 -4
- package/dist/m365/spo/commands/list/list-contenttype-add.js +4 -4
- package/dist/m365/spo/commands/list/list-contenttype-remove.js +6 -6
- package/dist/m365/spo/commands/list/list-roleassignment-add.js +208 -0
- package/dist/m365/spo/commands/list/list-roleassignment-remove.js +171 -0
- package/dist/m365/spo/commands/list/list-view-field-add.js +23 -23
- package/dist/m365/spo/commands/list/list-view-field-remove.js +14 -14
- package/dist/m365/spo/commands/list/list-view-field-set.js +18 -18
- package/dist/m365/spo/commands/list/list-view-get.js +12 -12
- package/dist/m365/spo/commands/list/list-view-remove.js +14 -14
- package/dist/m365/spo/commands/list/list-view-set.js +14 -14
- package/dist/m365/spo/commands/listitem/listitem-list.js +1 -1
- package/dist/m365/spo/commands/listitem/listitem-record-declare.js +4 -4
- package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +4 -4
- package/dist/m365/spo/commands/page/page-column-get.js +2 -2
- package/dist/m365/spo/commands/page/page-column-list.js +2 -2
- package/dist/m365/spo/commands/page/page-control-get.js +4 -4
- package/dist/m365/spo/commands/page/page-control-list.js +3 -3
- package/dist/m365/spo/commands/page/page-control-set.js +3 -3
- package/dist/m365/spo/commands/page/page-section-add.js +2 -2
- package/dist/m365/spo/commands/page/page-section-get.js +2 -2
- package/dist/m365/spo/commands/page/page-section-list.js +2 -2
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.js +2 -2
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.js +4 -4
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.js +4 -4
- package/dist/m365/spo/commands/site/site-appcatalog-add.js +3 -3
- package/dist/m365/spo/commands/site/site-appcatalog-remove.js +3 -3
- package/dist/m365/spo/commands/site/site-apppermission-get.js +2 -2
- package/dist/m365/spo/commands/site/site-apppermission-remove.js +9 -9
- package/dist/m365/spo/commands/site/site-apppermission-set.js +6 -6
- package/dist/m365/spo/commands/site/site-chrome-set.js +3 -3
- package/dist/m365/spo/commands/site/site-ensure.js +1 -1
- package/dist/m365/spo/commands/site/site-groupify.js +3 -3
- package/dist/m365/spo/commands/site/site-rename.js +9 -9
- package/dist/m365/spo/commands/sitedesign/sitedesign-rights-grant.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-rights-list.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-rights-revoke.js +5 -5
- package/dist/m365/spo/commands/sitedesign/sitedesign-task-get.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-task-remove.js +5 -5
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-remove.js +5 -5
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-restore.js +3 -3
- package/dist/m365/spo/commands/web/web-add.js +5 -5
- package/dist/m365/spo/commands/web/web-get.js +3 -3
- package/dist/m365/spo/commands/web/web-list.js +4 -4
- package/dist/m365/spo/commands/web/web-reindex.js +8 -8
- package/dist/m365/spo/commands/web/web-remove.js +5 -5
- package/dist/m365/spo/commands/web/web-roleinheritance-reset.js +63 -0
- package/dist/m365/spo/commands/web/web-set.js +4 -4
- package/dist/m365/spo/commands.js +3 -0
- package/dist/m365/teams/commands/app/app-install.js +4 -4
- package/dist/m365/teams/commands/app/app-uninstall.js +3 -3
- package/dist/m365/teams/commands/channel/channel-get.js +19 -19
- package/dist/m365/teams/commands/channel/channel-remove.js +15 -15
- package/dist/m365/teams/commands/channel/channel-set.js +7 -7
- package/dist/m365/teams/commands/chat/chat-get.js +2 -2
- package/dist/m365/teams/commands/chat/chat-message-send.js +2 -2
- package/dist/m365/teams/commands/chat/chatUtil.js +0 -12
- package/dist/m365/teams/commands/message/message-get.js +3 -3
- package/dist/m365/teams/commands/tab/tab-get.js +13 -13
- package/dist/m365/teams/commands/tab/tab-remove.js +6 -6
- package/dist/m365/teams/commands/team/team-archive.js +3 -13
- package/dist/m365/teams/commands/team/team-clone.js +3 -20
- package/dist/m365/teams/commands/team/team-remove.js +2 -11
- package/dist/m365/teams/commands/team/team-set.js +1 -13
- package/dist/m365/teams/commands/team/team-unarchive.js +2 -11
- package/dist/m365/teams/commands/user/user-app-add.js +4 -4
- package/dist/m365/teams/commands/user/user-app-remove.js +3 -3
- package/dist/m365/viva/commands/connections/connections-app-create.js +9 -9
- package/dist/m365/yammer/commands/group/group-user-add.js +8 -8
- package/dist/m365/yammer/commands/group/group-user-remove.js +11 -11
- package/dist/m365/yammer/commands/message/message-like-set.js +5 -5
- package/dist/m365/yammer/commands/user/user-get.js +5 -5
- package/docs/docs/cmd/aad/app/app-add.md +12 -1
- package/docs/docs/cmd/aad/app/app-set.md +1 -1
- package/docs/docs/cmd/aad/approleassignment/approleassignment-add.md +5 -5
- package/docs/docs/cmd/aad/approleassignment/approleassignment-list.md +5 -5
- package/docs/docs/cmd/aad/approleassignment/approleassignment-remove.md +5 -5
- package/docs/docs/cmd/aad/o365group/o365group-add.md +3 -3
- package/docs/docs/cmd/aad/o365group/o365group-recyclebinitem-list.md +7 -7
- package/docs/docs/cmd/aad/o365group/o365group-teamify.md +4 -4
- package/docs/docs/cmd/aad/policy/policy-list.md +2 -2
- package/docs/docs/cmd/aad/sp/sp-get.md +5 -5
- package/docs/docs/cmd/booking/business/business-get.md +33 -0
- package/docs/docs/cmd/booking/business/business-list.md +21 -0
- package/docs/docs/cmd/flow/flow-disable.md +3 -3
- package/docs/docs/cmd/flow/flow-enable.md +1 -1
- package/docs/docs/cmd/flow/flow-export.md +5 -5
- package/docs/docs/cmd/flow/flow-get.md +3 -3
- package/docs/docs/cmd/flow/flow-list.md +3 -3
- package/docs/docs/cmd/flow/flow-remove.md +5 -5
- package/docs/docs/cmd/flow/run/run-cancel.md +3 -3
- package/docs/docs/cmd/flow/run/run-get.md +3 -3
- package/docs/docs/cmd/flow/run/run-list.md +3 -3
- package/docs/docs/cmd/flow/run/run-resubmit.md +4 -4
- package/docs/docs/cmd/outlook/message/message-move.md +4 -4
- package/docs/docs/cmd/pa/connector/connector-export.md +3 -3
- package/docs/docs/cmd/pa/connector/connector-list.md +2 -2
- package/docs/docs/cmd/pa/solution/solution-reference-add.md +2 -2
- package/docs/docs/cmd/search/externalconnection/externalconnection-remove.md +40 -0
- package/docs/docs/cmd/spfx/package/package-generate.md +2 -2
- package/docs/docs/cmd/spo/app/app-add.md +2 -2
- package/docs/docs/cmd/spo/app/app-deploy.md +2 -2
- package/docs/docs/cmd/spo/app/app-get.md +2 -2
- package/docs/docs/cmd/spo/app/app-install.md +2 -2
- package/docs/docs/cmd/spo/app/app-list.md +2 -2
- package/docs/docs/cmd/spo/app/app-remove.md +2 -2
- package/docs/docs/cmd/spo/app/app-retract.md +2 -2
- package/docs/docs/cmd/spo/app/app-uninstall.md +2 -2
- package/docs/docs/cmd/spo/app/app-upgrade.md +2 -2
- package/docs/docs/cmd/spo/apppage/apppage-set.md +2 -2
- package/docs/docs/cmd/spo/cdn/cdn-policy-list.md +3 -3
- package/docs/docs/cmd/spo/cdn/cdn-policy-set.md +3 -3
- package/docs/docs/cmd/spo/contenttype/contenttype-field-set.md +4 -4
- package/docs/docs/cmd/spo/customaction/customaction-add.md +10 -10
- package/docs/docs/cmd/spo/customaction/customaction-clear.md +4 -4
- package/docs/docs/cmd/spo/customaction/customaction-get.md +5 -5
- package/docs/docs/cmd/spo/customaction/customaction-list.md +4 -4
- package/docs/docs/cmd/spo/customaction/customaction-remove.md +9 -9
- package/docs/docs/cmd/spo/customaction/customaction-set.md +7 -7
- package/docs/docs/cmd/spo/feature/feature-disable.md +4 -4
- package/docs/docs/cmd/spo/feature/feature-enable.md +2 -2
- package/docs/docs/cmd/spo/feature/feature-list.md +3 -3
- package/docs/docs/cmd/spo/field/field-get.md +0 -3
- package/docs/docs/cmd/spo/field/field-remove.md +0 -3
- package/docs/docs/cmd/spo/file/file-checkin.md +6 -6
- package/docs/docs/cmd/spo/file/file-checkout.md +4 -4
- package/docs/docs/cmd/spo/file/file-sharinginfo-get.md +7 -7
- package/docs/docs/cmd/spo/folder/folder-get.md +2 -2
- package/docs/docs/cmd/spo/folder/folder-remove.md +3 -3
- package/docs/docs/cmd/spo/folder/folder-rename.md +2 -2
- package/docs/docs/cmd/spo/hubsite/hubsite-connect.md +4 -4
- package/docs/docs/cmd/spo/hubsite/hubsite-disconnect.md +4 -4
- package/docs/docs/cmd/spo/hubsite/hubsite-register.md +2 -2
- package/docs/docs/cmd/spo/hubsite/hubsite-rights-grant.md +4 -4
- package/docs/docs/cmd/spo/hubsite/hubsite-rights-revoke.md +3 -3
- package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.md +2 -2
- package/docs/docs/cmd/spo/list/list-contenttype-add.md +3 -3
- package/docs/docs/cmd/spo/list/list-contenttype-remove.md +3 -3
- package/docs/docs/cmd/spo/list/list-roleassignment-add.md +78 -0
- package/docs/docs/cmd/spo/list/list-roleassignment-remove.md +54 -0
- package/docs/docs/cmd/spo/list/list-view-field-add.md +8 -8
- package/docs/docs/cmd/spo/list/list-view-field-remove.md +6 -6
- package/docs/docs/cmd/spo/list/list-view-field-set.md +7 -7
- package/docs/docs/cmd/spo/list/list-view-get.md +7 -7
- package/docs/docs/cmd/spo/list/list-view-remove.md +8 -8
- package/docs/docs/cmd/spo/list/list-view-set.md +7 -7
- package/docs/docs/cmd/spo/listitem/listitem-record-declare.md +5 -5
- package/docs/docs/cmd/spo/listitem/listitem-record-undeclare.md +3 -3
- package/docs/docs/cmd/spo/page/page-column-get.md +3 -3
- package/docs/docs/cmd/spo/page/page-column-list.md +3 -3
- package/docs/docs/cmd/spo/page/page-control-get.md +3 -3
- package/docs/docs/cmd/spo/page/page-control-list.md +3 -3
- package/docs/docs/cmd/spo/page/page-control-set.md +4 -4
- package/docs/docs/cmd/spo/page/page-section-add.md +3 -3
- package/docs/docs/cmd/spo/page/page-section-get.md +3 -3
- package/docs/docs/cmd/spo/page/page-section-list.md +3 -3
- package/docs/docs/cmd/spo/serviceprincipal/serviceprincipal-grant-revoke.md +2 -2
- package/docs/docs/cmd/spo/serviceprincipal/serviceprincipal-permissionrequest-approve.md +2 -2
- package/docs/docs/cmd/spo/serviceprincipal/serviceprincipal-permissionrequest-deny.md +2 -2
- package/docs/docs/cmd/spo/site/site-appcatalog-add.md +2 -2
- package/docs/docs/cmd/spo/site/site-appcatalog-remove.md +2 -2
- package/docs/docs/cmd/spo/site/site-apppermission-get.md +2 -2
- package/docs/docs/cmd/spo/site/site-apppermission-remove.md +2 -2
- package/docs/docs/cmd/spo/site/site-apppermission-set.md +5 -5
- package/docs/docs/cmd/spo/site/site-chrome-set.md +4 -4
- package/docs/docs/cmd/spo/site/site-groupify.md +5 -5
- package/docs/docs/cmd/spo/site/site-rename.md +6 -6
- package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-grant.md +4 -4
- package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-list.md +3 -3
- package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-revoke.md +3 -3
- package/docs/docs/cmd/spo/sitedesign/sitedesign-task-get.md +2 -2
- package/docs/docs/cmd/spo/sitedesign/sitedesign-task-remove.md +5 -5
- package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.md +3 -3
- package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-restore.md +6 -3
- package/docs/docs/cmd/spo/web/web-add.md +4 -4
- package/docs/docs/cmd/spo/web/web-get.md +3 -3
- package/docs/docs/cmd/spo/web/web-list.md +2 -2
- package/docs/docs/cmd/spo/web/web-reindex.md +2 -2
- package/docs/docs/cmd/spo/web/web-remove.md +2 -2
- package/docs/docs/cmd/spo/web/web-roleinheritance-reset.md +24 -0
- package/docs/docs/cmd/spo/web/web-set.md +9 -9
- package/docs/docs/cmd/teams/app/app-install.md +5 -5
- package/docs/docs/cmd/teams/app/app-uninstall.md +3 -3
- package/docs/docs/cmd/teams/channel/channel-get.md +7 -7
- package/docs/docs/cmd/teams/channel/channel-remove.md +7 -7
- package/docs/docs/cmd/teams/channel/channel-set.md +4 -4
- package/docs/docs/cmd/teams/message/message-get.md +3 -3
- package/docs/docs/cmd/teams/tab/tab-get.md +6 -6
- package/docs/docs/cmd/teams/tab/tab-remove.md +4 -4
- package/docs/docs/cmd/teams/team/team-archive.md +0 -3
- package/docs/docs/cmd/teams/team/team-clone.md +0 -3
- package/docs/docs/cmd/teams/team/team-remove.md +0 -3
- package/docs/docs/cmd/teams/team/team-set.md +0 -3
- package/docs/docs/cmd/teams/team/team-unarchive.md +0 -3
- package/docs/docs/cmd/teams/user/user-app-add.md +3 -3
- package/docs/docs/cmd/teams/user/user-app-remove.md +3 -3
- package/docs/docs/cmd/viva/connections/connections-app-create.md +2 -2
- package/docs/docs/cmd/yammer/group/group-user-add.md +5 -5
- package/docs/docs/cmd/yammer/group/group-user-remove.md +5 -5
- package/docs/docs/cmd/yammer/message/message-like-set.md +4 -4
- package/docs/docs/cmd/yammer/user/user-get.md +2 -2
- package/package.json +11 -1
package/.devcontainer/Dockerfile
CHANGED
|
@@ -27,7 +27,9 @@ RUN apt-get update && apt-get install -y \
|
|
|
27
27
|
&& apt-get install nodejs -y \
|
|
28
28
|
&& rm -rf /var/lib/apt/lists/*
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
COPY ../docs/pip_requirements.txt .
|
|
31
|
+
|
|
32
|
+
RUN pip install -r pip_requirements.txt
|
|
31
33
|
|
|
32
34
|
RUN useradd \
|
|
33
35
|
--user-group \
|
|
@@ -27,6 +27,7 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
27
27
|
super();
|
|
28
28
|
_AadAppAddCommand_instances.add(this);
|
|
29
29
|
this.appName = '';
|
|
30
|
+
this.appPermissions = [];
|
|
30
31
|
__classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initTelemetry).call(this);
|
|
31
32
|
__classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initOptions).call(this);
|
|
32
33
|
__classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initValidators).call(this);
|
|
@@ -50,6 +51,7 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
50
51
|
return Promise.resolve(appInfo);
|
|
51
52
|
})
|
|
52
53
|
.then(appInfo => this.updateAppFromManifest(args, appInfo))
|
|
54
|
+
.then(appInfo => this.grantAdminConsent(appInfo, args.options.grantAdminConsent, logger))
|
|
53
55
|
.then(appInfo => this.configureUri(args, appInfo, logger))
|
|
54
56
|
.then(appInfo => this.configureSecret(args, appInfo, logger))
|
|
55
57
|
.then(appInfo => this.saveAppInfo(args, appInfo, logger))
|
|
@@ -120,6 +122,81 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
120
122
|
return request_1.default.post(createApplicationRequestOptions);
|
|
121
123
|
});
|
|
122
124
|
}
|
|
125
|
+
grantAdminConsent(appInfo, adminConsent, logger) {
|
|
126
|
+
if (!adminConsent || this.appPermissions.length === 0) {
|
|
127
|
+
return Promise.resolve(appInfo);
|
|
128
|
+
}
|
|
129
|
+
return this.createServicePrincipal(appInfo.appId)
|
|
130
|
+
.then((sp) => {
|
|
131
|
+
if (this.debug) {
|
|
132
|
+
logger.logToStderr("Service principal created, returned object id: " + sp.id);
|
|
133
|
+
}
|
|
134
|
+
const tasks = [];
|
|
135
|
+
this.appPermissions.forEach(permission => {
|
|
136
|
+
if (permission.scope.length > 0) {
|
|
137
|
+
tasks.push(this.grantOAuth2Permission(sp.id, permission.resourceId, permission.scope.join(' ')));
|
|
138
|
+
if (this.debug) {
|
|
139
|
+
logger.logToStderr(`Admin consent granted for following resource ${permission.resourceId}, with delegated permissions: ${permission.scope.join(',')}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
permission.resourceAccess.filter(access => access.type === "Role").forEach((access) => {
|
|
143
|
+
tasks.push(this.addRoleToServicePrincipal(sp.id, permission.resourceId, access.id));
|
|
144
|
+
if (this.debug) {
|
|
145
|
+
logger.logToStderr(`Admin consent granted for following resource ${permission.resourceId}, with application permission: ${access.id}`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
return Promise.all(tasks)
|
|
150
|
+
.then(_ => {
|
|
151
|
+
return appInfo;
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
addRoleToServicePrincipal(objectId, resourceId, appRoleId) {
|
|
156
|
+
const requestOptions = {
|
|
157
|
+
url: `${this.resource}/v1.0/myorganization/servicePrincipals/${objectId}/appRoleAssignments`,
|
|
158
|
+
headers: {
|
|
159
|
+
'Content-Type': 'application/json'
|
|
160
|
+
},
|
|
161
|
+
responseType: 'json',
|
|
162
|
+
data: {
|
|
163
|
+
appRoleId: appRoleId,
|
|
164
|
+
principalId: objectId,
|
|
165
|
+
resourceId: resourceId
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
return request_1.default.post(requestOptions);
|
|
169
|
+
}
|
|
170
|
+
grantOAuth2Permission(appId, resourceId, scopeName) {
|
|
171
|
+
const grantAdminConsentApplicationRequestOptions = {
|
|
172
|
+
url: `${this.resource}/v1.0/myorganization/oauth2PermissionGrants`,
|
|
173
|
+
headers: {
|
|
174
|
+
accept: 'application/json;odata.metadata=none'
|
|
175
|
+
},
|
|
176
|
+
responseType: 'json',
|
|
177
|
+
data: {
|
|
178
|
+
clientId: appId,
|
|
179
|
+
consentType: "AllPrincipals",
|
|
180
|
+
principalId: null,
|
|
181
|
+
resourceId: resourceId,
|
|
182
|
+
scope: scopeName
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
return request_1.default.post(grantAdminConsentApplicationRequestOptions);
|
|
186
|
+
}
|
|
187
|
+
createServicePrincipal(appId) {
|
|
188
|
+
const requestOptions = {
|
|
189
|
+
url: `${this.resource}/v1.0/myorganization/servicePrincipals`,
|
|
190
|
+
headers: {
|
|
191
|
+
'content-type': 'application/json'
|
|
192
|
+
},
|
|
193
|
+
data: {
|
|
194
|
+
appId: appId
|
|
195
|
+
},
|
|
196
|
+
responseType: 'json'
|
|
197
|
+
};
|
|
198
|
+
return request_1.default.post(requestOptions);
|
|
199
|
+
}
|
|
123
200
|
updateAppFromManifest(args, appInfo) {
|
|
124
201
|
if (!args.options.manifest) {
|
|
125
202
|
return Promise.resolve(appInfo);
|
|
@@ -135,6 +212,11 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
135
212
|
// separately
|
|
136
213
|
const secrets = this.getSecretsFromManifest(v2Manifest);
|
|
137
214
|
// Azure Portal returns v2 manifest whereas the Graph API expects a v1.6
|
|
215
|
+
if (args.options.apisApplication || args.options.apisDelegated) {
|
|
216
|
+
// take submitted delegated / application permissions as options
|
|
217
|
+
// otherwise, they will be skipped in the app update
|
|
218
|
+
v2Manifest.requiredResourceAccess = appInfo.requiredResourceAccess;
|
|
219
|
+
}
|
|
138
220
|
const graphManifest = this.transformManifest(v2Manifest);
|
|
139
221
|
const updateAppRequestOptions = {
|
|
140
222
|
url: `${this.resource}/v1.0/myorganization/applications/${appInfo.id}`,
|
|
@@ -334,36 +416,69 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
334
416
|
.then(_ => appInfo);
|
|
335
417
|
}
|
|
336
418
|
resolveApis(args, logger) {
|
|
337
|
-
|
|
419
|
+
var _a;
|
|
420
|
+
if (!args.options.apisDelegated && !args.options.apisApplication
|
|
421
|
+
&& (typeof ((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.requiredResourceAccess) === 'undefined' || this.manifest.requiredResourceAccess.length === 0)) {
|
|
338
422
|
return Promise.resolve([]);
|
|
339
423
|
}
|
|
340
424
|
if (this.verbose) {
|
|
341
425
|
logger.logToStderr('Resolving requested APIs...');
|
|
342
426
|
}
|
|
343
427
|
return utils_1.odata
|
|
344
|
-
.getAllItems(`${this.resource}/v1.0/myorganization/servicePrincipals?$select=
|
|
428
|
+
.getAllItems(`${this.resource}/v1.0/myorganization/servicePrincipals?$select=appId,appRoles,id,oauth2PermissionScopes,servicePrincipalNames`)
|
|
345
429
|
.then(servicePrincipals => {
|
|
430
|
+
var _a;
|
|
431
|
+
let resolvedApis = [];
|
|
346
432
|
try {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
const resolvedApplicationApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisApplication, 'Role', logger);
|
|
352
|
-
if (this.debug) {
|
|
353
|
-
logger.logToStderr(`Resolved application permissions: ${JSON.stringify(resolvedApplicationApis, null, 2)}`);
|
|
354
|
-
}
|
|
355
|
-
// merge resolved application APIs onto resolved delegated APIs
|
|
356
|
-
resolvedApplicationApis.forEach(resolvedRequiredResource => {
|
|
357
|
-
const requiredResource = resolvedApis.find(api => api.resourceAppId === resolvedRequiredResource.resourceAppId);
|
|
358
|
-
if (requiredResource) {
|
|
359
|
-
requiredResource.resourceAccess.push(...resolvedRequiredResource.resourceAccess);
|
|
433
|
+
if (args.options.apisDelegated || args.options.apisApplication) {
|
|
434
|
+
resolvedApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisDelegated, 'Scope', logger);
|
|
435
|
+
if (this.verbose) {
|
|
436
|
+
logger.logToStderr(`Resolved delegated permissions: ${JSON.stringify(resolvedApis, null, 2)}`);
|
|
360
437
|
}
|
|
361
|
-
|
|
362
|
-
|
|
438
|
+
const resolvedApplicationApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisApplication, 'Role', logger);
|
|
439
|
+
if (this.verbose) {
|
|
440
|
+
logger.logToStderr(`Resolved application permissions: ${JSON.stringify(resolvedApplicationApis, null, 2)}`);
|
|
363
441
|
}
|
|
364
|
-
|
|
365
|
-
|
|
442
|
+
// merge resolved application APIs onto resolved delegated APIs
|
|
443
|
+
resolvedApplicationApis.forEach(resolvedRequiredResource => {
|
|
444
|
+
const requiredResource = resolvedApis.find(api => api.resourceAppId === resolvedRequiredResource.resourceAppId);
|
|
445
|
+
if (requiredResource) {
|
|
446
|
+
requiredResource.resourceAccess.push(...resolvedRequiredResource.resourceAccess);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
resolvedApis.push(resolvedRequiredResource);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
if (typeof ((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.requiredResourceAccess) !== 'undefined' && this.manifest.requiredResourceAccess.length > 0) {
|
|
454
|
+
const manifestApis = this.manifest.requiredResourceAccess;
|
|
455
|
+
manifestApis.forEach(manifestApi => {
|
|
456
|
+
const requiredResource = resolvedApis.find(api => api.resourceAppId === manifestApi.resourceAppId);
|
|
457
|
+
if (requiredResource) {
|
|
458
|
+
// exclude if any duplicate required resources in both manifest and submitted options
|
|
459
|
+
requiredResource.resourceAccess.push(...manifestApi.resourceAccess.filter(manRes => !requiredResource.resourceAccess.some(res => res.id === manRes.id)));
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
resolvedApis.push(manifestApi);
|
|
463
|
+
}
|
|
464
|
+
const app = servicePrincipals.find(servicePrincipals => servicePrincipals.appId === manifestApi.resourceAppId);
|
|
465
|
+
if (app) {
|
|
466
|
+
manifestApi.resourceAccess.forEach((res => {
|
|
467
|
+
var _a;
|
|
468
|
+
const resourceAccessPermission = {
|
|
469
|
+
id: res.id,
|
|
470
|
+
type: res.type
|
|
471
|
+
};
|
|
472
|
+
const oAuthValue = (_a = app.oauth2PermissionScopes.find(scp => scp.id === res.id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
473
|
+
this.updateAppPermissions(app.id, resourceAccessPermission, oAuthValue);
|
|
474
|
+
}));
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
if (this.verbose) {
|
|
366
479
|
logger.logToStderr(`Merged delegated and application permissions: ${JSON.stringify(resolvedApis, null, 2)}`);
|
|
480
|
+
logger.logToStderr(`App role assignments: ${JSON.stringify(this.appPermissions.flatMap(permission => permission.resourceAccess.filter(access => access.type === "Role")), null, 2)}`);
|
|
481
|
+
logger.logToStderr(`OAuth2 permissions: ${JSON.stringify(this.appPermissions.flatMap(permission => permission.scope), null, 2)}`);
|
|
367
482
|
}
|
|
368
483
|
return Promise.resolve(resolvedApis);
|
|
369
484
|
}
|
|
@@ -405,13 +520,34 @@ class AadAppAddCommand extends GraphCommand_1.default {
|
|
|
405
520
|
};
|
|
406
521
|
resolvedApis.push(resolvedApi);
|
|
407
522
|
}
|
|
408
|
-
|
|
523
|
+
const resourceAccessPermission = {
|
|
409
524
|
id: permission.id,
|
|
410
525
|
type: scopeType
|
|
411
|
-
}
|
|
526
|
+
};
|
|
527
|
+
resolvedApi.resourceAccess.push(resourceAccessPermission);
|
|
528
|
+
this.updateAppPermissions(servicePrincipal.id, resourceAccessPermission, permission.value);
|
|
412
529
|
});
|
|
413
530
|
return resolvedApis;
|
|
414
531
|
}
|
|
532
|
+
updateAppPermissions(spId, resourceAccessPermission, oAuth2PermissionValue) {
|
|
533
|
+
// During API resolution, we store globally both app role assignments and oauth2permissions
|
|
534
|
+
// So that we'll be able to parse them during the admin consent process
|
|
535
|
+
let existingPermission = this.appPermissions.find(oauth => oauth.resourceId === spId);
|
|
536
|
+
if (!existingPermission) {
|
|
537
|
+
existingPermission = {
|
|
538
|
+
resourceId: spId,
|
|
539
|
+
resourceAccess: [],
|
|
540
|
+
scope: []
|
|
541
|
+
};
|
|
542
|
+
this.appPermissions.push(existingPermission);
|
|
543
|
+
}
|
|
544
|
+
if (resourceAccessPermission.type === 'Scope' && oAuth2PermissionValue && !existingPermission.scope.find(scp => scp === oAuth2PermissionValue)) {
|
|
545
|
+
existingPermission.scope.push(oAuth2PermissionValue);
|
|
546
|
+
}
|
|
547
|
+
if (!existingPermission.resourceAccess.find(res => res.id === resourceAccessPermission.id)) {
|
|
548
|
+
existingPermission.resourceAccess.push(resourceAccessPermission);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
415
551
|
configureSecret(args, appInfo, logger) {
|
|
416
552
|
if (!args.options.withSecret) {
|
|
417
553
|
return Promise.resolve(appInfo);
|
|
@@ -523,7 +659,8 @@ _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = f
|
|
|
523
659
|
withSecret: args.options.withSecret,
|
|
524
660
|
certificateFile: typeof args.options.certificateFile !== 'undefined',
|
|
525
661
|
certificateBase64Encoded: typeof args.options.certificateBase64Encoded !== 'undefined',
|
|
526
|
-
certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined'
|
|
662
|
+
certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined',
|
|
663
|
+
grantAdminConsent: typeof args.options.grantAdminConsent !== 'undefined'
|
|
527
664
|
});
|
|
528
665
|
});
|
|
529
666
|
}, _AadAppAddCommand_initOptions = function _AadAppAddCommand_initOptions() {
|
|
@@ -565,6 +702,8 @@ _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = f
|
|
|
565
702
|
option: '--manifest [manifest]'
|
|
566
703
|
}, {
|
|
567
704
|
option: '--save'
|
|
705
|
+
}, {
|
|
706
|
+
option: '--grantAdminConsent'
|
|
568
707
|
});
|
|
569
708
|
}, _AadAppAddCommand_initValidators = function _AadAppAddCommand_initValidators() {
|
|
570
709
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -40,11 +40,11 @@ class AadAppRoleAssignmentAddCommand extends GraphCommand_1.default {
|
|
|
40
40
|
if (args.options.appId) {
|
|
41
41
|
queryFilter = `$filter=appId eq '${encodeURIComponent(args.options.appId)}'`;
|
|
42
42
|
}
|
|
43
|
-
else if (args.options.
|
|
44
|
-
queryFilter = `$filter=id eq '${encodeURIComponent(args.options.
|
|
43
|
+
else if (args.options.appObjectId) {
|
|
44
|
+
queryFilter = `$filter=id eq '${encodeURIComponent(args.options.appObjectId)}'`;
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
queryFilter = `$filter=displayName eq '${encodeURIComponent(args.options.
|
|
47
|
+
queryFilter = `$filter=displayName eq '${encodeURIComponent(args.options.appDisplayName)}'`;
|
|
48
48
|
}
|
|
49
49
|
const getServicePrinciplesRequestOptions = {
|
|
50
50
|
url: `${this.resource}/v1.0/servicePrincipals?${queryFilter}`,
|
|
@@ -57,7 +57,7 @@ class AadAppRoleAssignmentAddCommand extends GraphCommand_1.default {
|
|
|
57
57
|
.get(getServicePrinciplesRequestOptions)
|
|
58
58
|
.then((servicePrincipalResult) => {
|
|
59
59
|
if (servicePrincipalResult.value.length > 1) {
|
|
60
|
-
return Promise.reject('More than one service principal found. Please use the appId or
|
|
60
|
+
return Promise.reject('More than one service principal found. Please use the appId or appObjectId option to make sure the right service principal is specified.');
|
|
61
61
|
}
|
|
62
62
|
objectId = servicePrincipalResult.value[0].id;
|
|
63
63
|
let resource = encodeURIComponent(args.options.resource);
|
|
@@ -160,17 +160,17 @@ _AadAppRoleAssignmentAddCommand_instances = new WeakSet(), _AadAppRoleAssignment
|
|
|
160
160
|
this.telemetry.push((args) => {
|
|
161
161
|
Object.assign(this.telemetryProperties, {
|
|
162
162
|
appId: typeof args.options.appId !== 'undefined',
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
appObjectId: typeof args.options.appObjectId !== 'undefined',
|
|
164
|
+
appDisplayName: typeof args.options.appDisplayName !== 'undefined'
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
167
|
}, _AadAppRoleAssignmentAddCommand_initOptions = function _AadAppRoleAssignmentAddCommand_initOptions() {
|
|
168
168
|
this.options.unshift({
|
|
169
169
|
option: '--appId [appId]'
|
|
170
170
|
}, {
|
|
171
|
-
option: '--
|
|
171
|
+
option: '--appObjectId [appObjectId]'
|
|
172
172
|
}, {
|
|
173
|
-
option: '--
|
|
173
|
+
option: '--appDisplayName [appDisplayName]'
|
|
174
174
|
}, {
|
|
175
175
|
option: '-r, --resource <resource>',
|
|
176
176
|
autocomplete: ['Microsoft Graph', 'SharePoint', 'OneNote', 'Exchange', 'Microsoft Forms', 'Azure Active Directory Graph', 'Skype for Business']
|
|
@@ -181,16 +181,16 @@ _AadAppRoleAssignmentAddCommand_instances = new WeakSet(), _AadAppRoleAssignment
|
|
|
181
181
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
182
182
|
let optionsSpecified = 0;
|
|
183
183
|
optionsSpecified += args.options.appId ? 1 : 0;
|
|
184
|
-
optionsSpecified += args.options.
|
|
185
|
-
optionsSpecified += args.options.
|
|
184
|
+
optionsSpecified += args.options.appDisplayName ? 1 : 0;
|
|
185
|
+
optionsSpecified += args.options.appObjectId ? 1 : 0;
|
|
186
186
|
if (optionsSpecified !== 1) {
|
|
187
|
-
return 'Specify either appId,
|
|
187
|
+
return 'Specify either appId, appObjectId or appDisplayName';
|
|
188
188
|
}
|
|
189
189
|
if (args.options.appId && !utils_1.validation.isValidGuid(args.options.appId)) {
|
|
190
190
|
return `${args.options.appId} is not a valid GUID`;
|
|
191
191
|
}
|
|
192
|
-
if (args.options.
|
|
193
|
-
return `${args.options.
|
|
192
|
+
if (args.options.appObjectId && !utils_1.validation.isValidGuid(args.options.appObjectId)) {
|
|
193
|
+
return `${args.options.appObjectId} is not a valid GUID`;
|
|
194
194
|
}
|
|
195
195
|
return true;
|
|
196
196
|
}));
|
|
@@ -78,8 +78,8 @@ class AadAppRoleAssignmentListCommand extends GraphCommand_1.default {
|
|
|
78
78
|
}
|
|
79
79
|
getAppRoleAssignments(argOptions) {
|
|
80
80
|
return new Promise((resolve, reject) => {
|
|
81
|
-
if (argOptions.
|
|
82
|
-
this.getSPAppRoleAssignments(argOptions.
|
|
81
|
+
if (argOptions.appObjectId) {
|
|
82
|
+
this.getSPAppRoleAssignments(argOptions.appObjectId)
|
|
83
83
|
.then((spAppRoleAssignments) => {
|
|
84
84
|
if (!spAppRoleAssignments.value.length) {
|
|
85
85
|
reject('no app role assignments found');
|
|
@@ -97,7 +97,7 @@ class AadAppRoleAssignmentListCommand extends GraphCommand_1.default {
|
|
|
97
97
|
spMatchQuery = `appId eq '${encodeURIComponent(argOptions.appId)}'`;
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
|
-
spMatchQuery = `displayName eq '${encodeURIComponent(argOptions.
|
|
100
|
+
spMatchQuery = `displayName eq '${encodeURIComponent(argOptions.appDisplayName)}'`;
|
|
101
101
|
}
|
|
102
102
|
this.getServicePrincipalForApp(spMatchQuery)
|
|
103
103
|
.then((resp) => {
|
|
@@ -147,35 +147,35 @@ _AadAppRoleAssignmentListCommand_instances = new WeakSet(), _AadAppRoleAssignmen
|
|
|
147
147
|
this.telemetry.push((args) => {
|
|
148
148
|
Object.assign(this.telemetryProperties, {
|
|
149
149
|
appId: typeof args.options.appId !== 'undefined',
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
appDisplayName: typeof args.options.appDisplayName !== 'undefined',
|
|
151
|
+
appObjectId: typeof args.options.appObjectId !== 'undefined'
|
|
152
152
|
});
|
|
153
153
|
});
|
|
154
154
|
}, _AadAppRoleAssignmentListCommand_initOptions = function _AadAppRoleAssignmentListCommand_initOptions() {
|
|
155
155
|
this.options.unshift({
|
|
156
156
|
option: '-i, --appId [appId]'
|
|
157
157
|
}, {
|
|
158
|
-
option: '-n, --
|
|
158
|
+
option: '-n, --appDisplayName [appDisplayName]'
|
|
159
159
|
}, {
|
|
160
|
-
option: '--
|
|
160
|
+
option: '--appObjectId [appObjectId]'
|
|
161
161
|
});
|
|
162
162
|
}, _AadAppRoleAssignmentListCommand_initValidators = function _AadAppRoleAssignmentListCommand_initValidators() {
|
|
163
163
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
164
|
-
if (!args.options.appId && !args.options.
|
|
165
|
-
return 'Specify either appId,
|
|
164
|
+
if (!args.options.appId && !args.options.appDisplayName && !args.options.appObjectId) {
|
|
165
|
+
return 'Specify either appId, appObjectId or appDisplayName';
|
|
166
166
|
}
|
|
167
167
|
if (args.options.appId && !utils_1.validation.isValidGuid(args.options.appId)) {
|
|
168
168
|
return `${args.options.appId} is not a valid GUID`;
|
|
169
169
|
}
|
|
170
|
-
if (args.options.
|
|
171
|
-
return `${args.options.
|
|
170
|
+
if (args.options.appObjectId && !utils_1.validation.isValidGuid(args.options.appObjectId)) {
|
|
171
|
+
return `${args.options.appObjectId} is not a valid GUID`;
|
|
172
172
|
}
|
|
173
173
|
let optionsSpecified = 0;
|
|
174
174
|
optionsSpecified += args.options.appId ? 1 : 0;
|
|
175
|
-
optionsSpecified += args.options.
|
|
176
|
-
optionsSpecified += args.options.
|
|
175
|
+
optionsSpecified += args.options.appDisplayName ? 1 : 0;
|
|
176
|
+
optionsSpecified += args.options.appObjectId ? 1 : 0;
|
|
177
177
|
if (optionsSpecified > 1) {
|
|
178
|
-
return 'Specify either appId,
|
|
178
|
+
return 'Specify either appId, appObjectId or appDisplayName';
|
|
179
179
|
}
|
|
180
180
|
return true;
|
|
181
181
|
}));
|
|
@@ -43,11 +43,11 @@ class AadAppRoleAssignmentRemoveCommand extends GraphCommand_1.default {
|
|
|
43
43
|
if (args.options.appId) {
|
|
44
44
|
spMatchQuery = `appId eq '${encodeURIComponent(args.options.appId)}'`;
|
|
45
45
|
}
|
|
46
|
-
else if (args.options.
|
|
47
|
-
spMatchQuery = `id eq '${encodeURIComponent(args.options.
|
|
46
|
+
else if (args.options.appObjectId) {
|
|
47
|
+
spMatchQuery = `id eq '${encodeURIComponent(args.options.appObjectId)}'`;
|
|
48
48
|
}
|
|
49
49
|
else {
|
|
50
|
-
spMatchQuery = `displayName eq '${encodeURIComponent(args.options.
|
|
50
|
+
spMatchQuery = `displayName eq '${encodeURIComponent(args.options.appDisplayName)}'`;
|
|
51
51
|
}
|
|
52
52
|
this
|
|
53
53
|
.getServicePrincipalForApp(spMatchQuery)
|
|
@@ -160,8 +160,8 @@ _AadAppRoleAssignmentRemoveCommand_instances = new WeakSet(), _AadAppRoleAssignm
|
|
|
160
160
|
this.telemetry.push((args) => {
|
|
161
161
|
Object.assign(this.telemetryProperties, {
|
|
162
162
|
appId: typeof args.options.appId !== 'undefined',
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
appDisplayName: typeof args.options.appDisplayName !== 'undefined',
|
|
164
|
+
appObjectId: typeof args.options.appObjectId !== 'undefined',
|
|
165
165
|
confirm: (!!args.options.confirm).toString()
|
|
166
166
|
});
|
|
167
167
|
});
|
|
@@ -169,9 +169,9 @@ _AadAppRoleAssignmentRemoveCommand_instances = new WeakSet(), _AadAppRoleAssignm
|
|
|
169
169
|
this.options.unshift({
|
|
170
170
|
option: '--appId [appId]'
|
|
171
171
|
}, {
|
|
172
|
-
option: '--
|
|
172
|
+
option: '--appObjectId [appObjectId]'
|
|
173
173
|
}, {
|
|
174
|
-
option: '--
|
|
174
|
+
option: '--appDisplayName [appDisplayName]'
|
|
175
175
|
}, {
|
|
176
176
|
option: '-r, --resource <resource>',
|
|
177
177
|
autocomplete: ['Microsoft Graph', 'SharePoint', 'OneNote', 'Exchange', 'Microsoft Forms', 'Azure Active Directory Graph', 'Skype for Business']
|
|
@@ -184,16 +184,16 @@ _AadAppRoleAssignmentRemoveCommand_instances = new WeakSet(), _AadAppRoleAssignm
|
|
|
184
184
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
185
185
|
let optionsSpecified = 0;
|
|
186
186
|
optionsSpecified += args.options.appId ? 1 : 0;
|
|
187
|
-
optionsSpecified += args.options.
|
|
188
|
-
optionsSpecified += args.options.
|
|
187
|
+
optionsSpecified += args.options.appDisplayName ? 1 : 0;
|
|
188
|
+
optionsSpecified += args.options.appObjectId ? 1 : 0;
|
|
189
189
|
if (optionsSpecified !== 1) {
|
|
190
|
-
return 'Specify either appId,
|
|
190
|
+
return 'Specify either appId, appObjectId or appDisplayName';
|
|
191
191
|
}
|
|
192
192
|
if (args.options.appId && !utils_1.validation.isValidGuid(args.options.appId)) {
|
|
193
193
|
return `${args.options.appId} is not a valid GUID`;
|
|
194
194
|
}
|
|
195
|
-
if (args.options.
|
|
196
|
-
return `${args.options.
|
|
195
|
+
if (args.options.appObjectId && !utils_1.validation.isValidGuid(args.options.appObjectId)) {
|
|
196
|
+
return `${args.options.appObjectId} is not a valid GUID`;
|
|
197
197
|
}
|
|
198
198
|
return true;
|
|
199
199
|
}));
|
|
@@ -71,7 +71,7 @@ class AadO365GroupAddCommand extends GraphCommand_1.default {
|
|
|
71
71
|
mailNickname: args.options.mailNickname,
|
|
72
72
|
resourceBehaviorOptions: resourceBehaviorOptionsCollection,
|
|
73
73
|
securityEnabled: false,
|
|
74
|
-
visibility: args.options.isPrivate
|
|
74
|
+
visibility: args.options.isPrivate ? 'Private' : 'Public'
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
this
|
|
@@ -228,7 +228,7 @@ _AadO365GroupAddCommand_instances = new WeakSet(), _AadO365GroupAddCommand_initT
|
|
|
228
228
|
}, {
|
|
229
229
|
option: '--members [members]'
|
|
230
230
|
}, {
|
|
231
|
-
option: '--isPrivate
|
|
231
|
+
option: '--isPrivate'
|
|
232
232
|
}, {
|
|
233
233
|
option: '--allowMembersToPost [allowMembersToPost]'
|
|
234
234
|
}, {
|
|
@@ -258,11 +258,6 @@ _AadO365GroupAddCommand_instances = new WeakSet(), _AadO365GroupAddCommand_initT
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
|
-
if (typeof args.options.isPrivate !== 'undefined' &&
|
|
262
|
-
args.options.isPrivate !== 'true' &&
|
|
263
|
-
args.options.isPrivate !== 'false') {
|
|
264
|
-
return `${args.options.isPrivate} is not a valid boolean value`;
|
|
265
|
-
}
|
|
266
261
|
if (args.options.logoPath) {
|
|
267
262
|
const fullPath = path.resolve(args.options.logoPath);
|
|
268
263
|
if (!fs.existsSync(fullPath)) {
|
|
@@ -27,8 +27,8 @@ class AadO365GroupRecycleBinItemListCommand extends GraphCommand_1.default {
|
|
|
27
27
|
}
|
|
28
28
|
commandAction(logger, args, cb) {
|
|
29
29
|
const filter = `?$filter=groupTypes/any(c:c+eq+'Unified')`;
|
|
30
|
-
const displayNameFilter = args.options.
|
|
31
|
-
const mailNicknameFilter = args.options.
|
|
30
|
+
const displayNameFilter = args.options.groupDisplayName ? ` and startswith(DisplayName,'${encodeURIComponent(args.options.groupDisplayName).replace(/'/g, `''`)}')` : '';
|
|
31
|
+
const mailNicknameFilter = args.options.groupMailNickname ? ` and startswith(MailNickname,'${encodeURIComponent(args.options.groupMailNickname).replace(/'/g, `''`)}')` : '';
|
|
32
32
|
const topCount = '&$top=100';
|
|
33
33
|
const endpoint = `${this.resource}/v1.0/directory/deletedItems/Microsoft.Graph.Group${filter}${displayNameFilter}${mailNicknameFilter}${topCount}`;
|
|
34
34
|
utils_1.odata
|
|
@@ -42,15 +42,15 @@ class AadO365GroupRecycleBinItemListCommand extends GraphCommand_1.default {
|
|
|
42
42
|
_AadO365GroupRecycleBinItemListCommand_instances = new WeakSet(), _AadO365GroupRecycleBinItemListCommand_initTelemetry = function _AadO365GroupRecycleBinItemListCommand_initTelemetry() {
|
|
43
43
|
this.telemetry.push((args) => {
|
|
44
44
|
Object.assign(this.telemetryProperties, {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
groupDisplayName: typeof args.options.groupDisplayName !== 'undefined',
|
|
46
|
+
groupMailNickname: typeof args.options.groupMailNickname !== 'undefined'
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
49
|
}, _AadO365GroupRecycleBinItemListCommand_initOptions = function _AadO365GroupRecycleBinItemListCommand_initOptions() {
|
|
50
50
|
this.options.unshift({
|
|
51
|
-
option: '-d, --
|
|
51
|
+
option: '-d, --groupDisplayName [groupDisplayName]'
|
|
52
52
|
}, {
|
|
53
|
-
option: '-m, --
|
|
53
|
+
option: '-m, --groupMailNickname [groupMailNickname]'
|
|
54
54
|
});
|
|
55
55
|
};
|
|
56
56
|
module.exports = new AadO365GroupRecycleBinItemListCommand();
|
|
@@ -34,8 +34,8 @@ class AadO365GroupTeamifyCommand extends GraphCommand_1.default {
|
|
|
34
34
|
return 'Creates a new Microsoft Teams team under existing Microsoft 365 group';
|
|
35
35
|
}
|
|
36
36
|
getGroupId(args) {
|
|
37
|
-
if (args.options.
|
|
38
|
-
return Promise.resolve(args.options.
|
|
37
|
+
if (args.options.id) {
|
|
38
|
+
return Promise.resolve(args.options.id);
|
|
39
39
|
}
|
|
40
40
|
const requestOptions = {
|
|
41
41
|
url: `${this.resource}/v1.0/groups?$filter=mailNickname eq '${encodeURIComponent(args.options.mailNickname)}'`,
|
|
@@ -74,9 +74,9 @@ class AadO365GroupTeamifyCommand extends GraphCommand_1.default {
|
|
|
74
74
|
};
|
|
75
75
|
this
|
|
76
76
|
.getGroupId(args)
|
|
77
|
-
.then((
|
|
77
|
+
.then((id) => {
|
|
78
78
|
const requestOptions = {
|
|
79
|
-
url: `${this.resource}/v1.0/groups/${encodeURIComponent(
|
|
79
|
+
url: `${this.resource}/v1.0/groups/${encodeURIComponent(id)}/team`,
|
|
80
80
|
headers: {
|
|
81
81
|
accept: 'application/json;odata.metadata=none'
|
|
82
82
|
},
|
|
@@ -91,26 +91,26 @@ class AadO365GroupTeamifyCommand extends GraphCommand_1.default {
|
|
|
91
91
|
_AadO365GroupTeamifyCommand_instances = new WeakSet(), _AadO365GroupTeamifyCommand_initTelemetry = function _AadO365GroupTeamifyCommand_initTelemetry() {
|
|
92
92
|
this.telemetry.push((args) => {
|
|
93
93
|
Object.assign(this.telemetryProperties, {
|
|
94
|
-
|
|
94
|
+
id: typeof args.options.id !== 'undefined',
|
|
95
95
|
mailNickname: typeof args.options.mailNickname !== 'undefined'
|
|
96
96
|
});
|
|
97
97
|
});
|
|
98
98
|
}, _AadO365GroupTeamifyCommand_initOptions = function _AadO365GroupTeamifyCommand_initOptions() {
|
|
99
99
|
this.options.unshift({
|
|
100
|
-
option: '-i, --
|
|
100
|
+
option: '-i, --id [id]'
|
|
101
101
|
}, {
|
|
102
102
|
option: '--mailNickname [mailNickname]'
|
|
103
103
|
});
|
|
104
104
|
}, _AadO365GroupTeamifyCommand_initValidators = function _AadO365GroupTeamifyCommand_initValidators() {
|
|
105
105
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
if (args.options.
|
|
107
|
-
return 'Specify either
|
|
106
|
+
if (args.options.id && args.options.mailNickname) {
|
|
107
|
+
return 'Specify either id or mailNickname, but not both.';
|
|
108
108
|
}
|
|
109
|
-
if (!args.options.
|
|
110
|
-
return 'Specify
|
|
109
|
+
if (!args.options.id && !args.options.mailNickname) {
|
|
110
|
+
return 'Specify id or mailNickname, one is required';
|
|
111
111
|
}
|
|
112
|
-
if (args.options.
|
|
113
|
-
return `${args.options.
|
|
112
|
+
if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
|
|
113
|
+
return `${args.options.id} is not a valid GUID`;
|
|
114
114
|
}
|
|
115
115
|
return true;
|
|
116
116
|
}));
|
|
@@ -45,7 +45,7 @@ class AadPolicyListCommand extends GraphCommand_1.default {
|
|
|
45
45
|
return ['id', 'displayName', 'isOrganizationDefault'];
|
|
46
46
|
}
|
|
47
47
|
commandAction(logger, args, cb) {
|
|
48
|
-
const policyType = args.options.
|
|
48
|
+
const policyType = args.options.type ? args.options.type.toLowerCase() : 'all';
|
|
49
49
|
if (policyType && policyType !== "all") {
|
|
50
50
|
this
|
|
51
51
|
.getPolicies(policyType)
|
|
@@ -93,20 +93,20 @@ class AadPolicyListCommand extends GraphCommand_1.default {
|
|
|
93
93
|
_AadPolicyListCommand_instances = new WeakSet(), _AadPolicyListCommand_initTelemetry = function _AadPolicyListCommand_initTelemetry() {
|
|
94
94
|
this.telemetry.push((args) => {
|
|
95
95
|
Object.assign(this.telemetryProperties, {
|
|
96
|
-
policyType: args.options.
|
|
96
|
+
policyType: args.options.type || 'all'
|
|
97
97
|
});
|
|
98
98
|
});
|
|
99
99
|
}, _AadPolicyListCommand_initOptions = function _AadPolicyListCommand_initOptions() {
|
|
100
100
|
this.options.unshift({
|
|
101
|
-
option: '-
|
|
101
|
+
option: '-t, --type [type]',
|
|
102
102
|
autocomplete: AadPolicyListCommand.supportedPolicyTypes
|
|
103
103
|
});
|
|
104
104
|
}, _AadPolicyListCommand_initValidators = function _AadPolicyListCommand_initValidators() {
|
|
105
105
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
if (args.options.
|
|
107
|
-
const policyType = args.options.
|
|
106
|
+
if (args.options.type) {
|
|
107
|
+
const policyType = args.options.type.toLowerCase();
|
|
108
108
|
if (!AadPolicyListCommand.supportedPolicyTypes.find(p => p.toLowerCase() === policyType)) {
|
|
109
|
-
return `${args.options.
|
|
109
|
+
return `${args.options.type} is not a valid type. Allowed values are ${AadPolicyListCommand.supportedPolicyTypes.join(', ')}`;
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
return true;
|