@pnp/cli-microsoft365 5.0.0-beta.fe151d6 → 5.1.0-beta.c8f5fd7
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/devcontainer.json +13 -2
- package/.eslintrc.js +3 -0
- package/.mocharc.json +9 -0
- package/README.md +3 -3
- package/dist/Auth.js +22 -9
- package/dist/Command.js +1 -1
- package/dist/api.d.ts +13 -0
- package/dist/api.js +17 -0
- package/dist/appInsights.js +3 -2
- package/dist/cli/Cli.js +59 -12
- package/dist/m365/aad/commands/app/app-add.js +54 -18
- package/dist/m365/aad/commands/app/app-delete.js +123 -0
- package/dist/m365/aad/commands/app/app-get.js +142 -0
- package/dist/m365/aad/commands/app/app-role-delete.js +2 -2
- package/dist/m365/aad/commands/app/app-role-list.js +6 -5
- package/dist/m365/aad/commands/app/app-set.js +98 -3
- package/dist/m365/aad/commands/approleassignment/approleassignment-add.js +4 -4
- package/dist/m365/aad/commands/approleassignment/approleassignment-list.js +3 -3
- package/dist/m365/aad/commands/approleassignment/approleassignment-remove.js +4 -4
- package/dist/m365/aad/commands/group/group-list.js +55 -0
- package/dist/m365/aad/commands/groupsetting/groupsetting-add.js +2 -2
- package/dist/m365/aad/commands/groupsetting/groupsetting-get.js +2 -2
- package/dist/m365/aad/commands/groupsetting/groupsetting-list.js +7 -6
- package/dist/m365/aad/commands/groupsetting/groupsetting-remove.js +2 -2
- package/dist/m365/aad/commands/groupsetting/groupsetting-set.js +2 -2
- package/dist/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.js +8 -8
- package/dist/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-list.js +7 -6
- package/dist/m365/{spo/commands/site/SpoOperation.js → aad/commands/o365group/GroupExtended.js} +1 -1
- package/dist/m365/aad/commands/o365group/o365group-add.js +41 -3
- package/dist/m365/aad/commands/o365group/o365group-conversation-list.js +41 -0
- package/dist/m365/aad/commands/o365group/o365group-conversation-post-list.js +87 -0
- package/dist/m365/aad/commands/o365group/o365group-get.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-list.js +15 -12
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-clear.js +8 -7
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-list.js +7 -6
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-restore.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-remove.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-renew.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-set.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-teamify.js +2 -2
- package/dist/m365/aad/commands/o365group/o365group-user-add.js +3 -3
- package/dist/m365/aad/commands/o365group/o365group-user-list.js +21 -15
- package/dist/m365/aad/commands/o365group/o365group-user-remove.js +3 -3
- package/dist/m365/aad/commands/o365group/o365group-user-set.js +23 -17
- package/dist/m365/aad/commands/oauth2grant/oauth2grant-add.js +3 -3
- package/dist/m365/aad/commands/oauth2grant/oauth2grant-list.js +2 -2
- package/dist/m365/aad/commands/sp/sp-add.js +3 -3
- package/dist/m365/aad/commands/sp/sp-get.js +3 -3
- package/dist/m365/aad/commands/user/user-get.js +35 -8
- package/dist/m365/aad/commands/user/user-hibp.js +67 -0
- package/dist/m365/aad/commands/user/user-list.js +14 -10
- package/dist/m365/aad/commands/user/user-password-validate.js +42 -0
- package/dist/m365/aad/commands/user/user-set.js +2 -2
- package/dist/m365/aad/commands.js +7 -0
- package/dist/m365/app/commands/permission/permission-list.js +266 -0
- package/dist/m365/app/commands.js +7 -0
- package/dist/m365/base/AppCommand.js +76 -0
- package/dist/m365/base/SpoCommand.js +0 -260
- package/dist/m365/cli/commands/cli-doctor.js +4 -2
- package/dist/m365/cli/commands/config/config-set.js +5 -1
- package/dist/m365/commands/status.js +3 -3
- package/dist/m365/file/commands/file-add.js +3 -3
- package/dist/m365/file/commands/file-list.js +14 -12
- package/dist/m365/flow/commands/flow-export.js +2 -2
- package/dist/m365/flow/commands/flow-get.js +2 -2
- package/dist/m365/flow/commands/flow-remove.js +2 -2
- package/dist/m365/flow/commands/run/run-cancel.js +2 -2
- package/dist/m365/flow/commands/run/run-resubmit.js +2 -2
- package/dist/m365/graph/commands/schemaextension/schemaextension-add.js +2 -2
- package/dist/m365/graph/commands/schemaextension/schemaextension-list.js +2 -2
- package/dist/m365/graph/commands/schemaextension/schemaextension-set.js +2 -2
- package/dist/m365/graph/commands/subscription/subscription-add.js +2 -2
- package/dist/m365/onedrive/commands/onedrive-list.js +3 -2
- package/dist/m365/outlook/commands/message/message-list.js +6 -5
- package/dist/m365/outlook/commands/room/room-list.js +44 -0
- package/dist/m365/outlook/commands/roomlist/roomlist-list.js +26 -0
- package/dist/m365/outlook/commands.js +2 -0
- package/dist/m365/pa/cds-project-mutator.js +1 -1
- package/dist/m365/pa/commands/app/app-get.js +2 -2
- package/dist/m365/pa/commands/app/app-list.js +28 -1
- package/dist/m365/pa/commands/app/app-remove.js +2 -2
- package/dist/m365/pa/commands/pcf/pcf-init.js +4 -4
- package/dist/m365/pa/commands/solution/solution-init.js +2 -2
- package/dist/m365/{base/AzmgmtResponse.js → planner/AppliedCategories.js} +1 -1
- package/dist/m365/planner/commands/bucket/bucket-add.js +2 -2
- package/dist/m365/planner/commands/bucket/bucket-list.js +7 -7
- package/dist/m365/planner/commands/plan/plan-add.js +2 -2
- package/dist/m365/planner/commands/plan/plan-details-get.js +134 -0
- package/dist/m365/planner/commands/plan/plan-get.js +7 -7
- package/dist/m365/planner/commands/plan/plan-list.js +2 -2
- package/dist/m365/planner/commands/task/task-add.js +288 -0
- package/dist/m365/planner/commands/task/task-details-get.js +39 -0
- package/dist/m365/planner/commands/task/task-get.js +37 -0
- package/dist/m365/planner/commands/task/task-list.js +46 -16
- package/dist/m365/planner/commands/task/task-set.js +357 -0
- package/dist/m365/planner/commands.js +6 -1
- package/dist/m365/search/commands/externalconnection/externalconnection-add.js +99 -0
- package/dist/m365/search/commands.js +7 -0
- package/dist/m365/spfx/commands/package/package-generate.js +4 -4
- package/dist/m365/spfx/commands/project/base-project-command.js +18 -19
- package/dist/m365/spfx/commands/project/project-upgrade/index.js +0 -1
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001005_DEP_types_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001006_DEP_types_react_dom.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001008_DEP_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001009_DEP_react_dom.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001015_DEP_types_react_addons_shallow_compare.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001016_DEP_types_react_addons_update.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001017_DEP_types_react_addons_update.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001019_DEP_knockout.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001020_DEP_types_knockout.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001022_DEP_office_ui_fabric_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002015_DEVDEP_types_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002016_DEVDEP_types_react_dom.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN006005_CFG_PS_metadata.js +63 -0
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN006006_CFG_PS_features.js +60 -0
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN014008_CODE_launch_hostedWorkbench_type.js +62 -0
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN020001_RES_types_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN022001_SCSS_remove_fabric_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN022002_SCSS_add_fabric_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.14.0.js +59 -0
- package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
- package/dist/m365/spfx/commands/spfx-doctor.js +25 -6
- package/dist/m365/spo/commands/app/app-add.js +3 -2
- package/dist/m365/spo/commands/app/app-deploy.js +4 -4
- package/dist/m365/spo/commands/app/app-get.js +4 -4
- package/dist/m365/spo/commands/app/app-install.js +3 -3
- package/dist/m365/spo/commands/app/app-instance-list.js +2 -1
- package/dist/m365/spo/commands/app/app-list.js +3 -2
- package/dist/m365/spo/commands/app/app-remove.js +4 -5
- package/dist/m365/spo/commands/app/app-retract.js +4 -5
- package/dist/m365/spo/commands/app/app-uninstall.js +3 -3
- package/dist/m365/spo/commands/app/app-upgrade.js +3 -3
- package/dist/m365/spo/commands/apppage/apppage-add.js +2 -2
- package/dist/m365/spo/commands/apppage/apppage-set.js +2 -2
- package/dist/m365/spo/commands/cdn/cdn-get.js +4 -3
- package/dist/m365/spo/commands/cdn/cdn-origin-add.js +5 -5
- package/dist/m365/spo/commands/cdn/cdn-origin-list.js +4 -3
- package/dist/m365/spo/commands/cdn/cdn-origin-remove.js +5 -5
- package/dist/m365/spo/commands/cdn/cdn-policy-list.js +4 -3
- package/dist/m365/spo/commands/cdn/cdn-policy-set.js +5 -5
- package/dist/m365/spo/commands/cdn/cdn-set.js +3 -2
- package/dist/m365/spo/commands/contenttype/contenttype-add.js +6 -6
- package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +6 -6
- package/dist/m365/spo/commands/contenttype/contenttype-field-set.js +6 -6
- package/dist/m365/spo/commands/contenttype/contenttype-get.js +2 -1
- package/dist/m365/spo/commands/contenttype/contenttype-list.js +2 -1
- package/dist/m365/spo/commands/contenttype/contenttype-remove.js +2 -1
- package/dist/m365/spo/commands/contenttypehub/contenttypehub-get.js +3 -2
- package/dist/m365/spo/commands/customaction/customaction-add.js +3 -3
- package/dist/m365/spo/commands/customaction/customaction-clear.js +2 -1
- package/dist/m365/spo/commands/customaction/customaction-get.js +3 -3
- package/dist/m365/spo/commands/customaction/customaction-list.js +2 -1
- package/dist/m365/spo/commands/customaction/customaction-remove.js +3 -3
- package/dist/m365/spo/commands/customaction/customaction-set.js +4 -4
- package/dist/m365/spo/commands/externaluser/externaluser-list.js +6 -6
- package/dist/m365/spo/commands/feature/feature-enable.js +2 -1
- package/dist/m365/spo/commands/feature/feature-list.js +2 -1
- package/dist/m365/spo/commands/field/field-add.js +3 -2
- package/dist/m365/spo/commands/field/field-get.js +5 -5
- package/dist/m365/spo/commands/field/field-remove.js +5 -5
- package/dist/m365/spo/commands/field/field-set.js +10 -10
- package/dist/m365/spo/commands/file/file-add.js +5 -7
- package/dist/m365/spo/commands/file/file-checkin.js +3 -3
- package/dist/m365/spo/commands/file/file-checkout.js +3 -3
- package/dist/m365/spo/commands/file/file-copy.js +18 -7
- package/dist/m365/spo/commands/file/file-get.js +3 -3
- package/dist/m365/spo/commands/file/file-list.js +3 -3
- package/dist/m365/spo/commands/file/file-move.js +18 -7
- package/dist/m365/spo/commands/file/file-remove.js +3 -3
- package/dist/m365/spo/commands/file/file-sharinginfo-get.js +3 -3
- package/dist/m365/spo/commands/folder/folder-add.js +3 -3
- package/dist/m365/spo/commands/folder/folder-copy.js +16 -5
- package/dist/m365/spo/commands/folder/folder-get.js +3 -3
- package/dist/m365/spo/commands/folder/folder-list.js +3 -3
- package/dist/m365/spo/commands/folder/folder-move.js +16 -5
- package/dist/m365/spo/commands/folder/folder-remove.js +3 -3
- package/dist/m365/spo/commands/folder/folder-rename.js +6 -8
- package/dist/m365/spo/commands/group/group-get.js +2 -1
- package/dist/m365/spo/commands/group/group-list.js +2 -1
- package/dist/m365/spo/commands/group/group-remove.js +2 -1
- package/dist/m365/spo/commands/group/group-user-add.js +76 -17
- package/dist/m365/spo/commands/group/group-user-list.js +2 -1
- package/dist/m365/spo/commands/group/group-user-remove.js +101 -0
- package/dist/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-get.js +2 -1
- package/dist/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.js +2 -1
- package/dist/m365/spo/commands/homesite/homesite-get.js +2 -1
- package/dist/m365/spo/commands/homesite/homesite-remove.js +3 -2
- package/dist/m365/spo/commands/homesite/homesite-set.js +5 -5
- package/dist/m365/spo/commands/hubsite/hubsite-connect.js +4 -4
- package/dist/m365/spo/commands/hubsite/hubsite-data-get.js +2 -1
- package/dist/m365/spo/commands/hubsite/hubsite-disconnect.js +3 -2
- package/dist/m365/spo/commands/hubsite/hubsite-get.js +3 -3
- package/dist/m365/spo/commands/hubsite/hubsite-list.js +2 -1
- package/dist/m365/spo/commands/hubsite/hubsite-register.js +3 -2
- package/dist/m365/spo/commands/hubsite/hubsite-rights-grant.js +6 -6
- package/dist/m365/spo/commands/hubsite/hubsite-rights-revoke.js +6 -6
- package/dist/m365/spo/commands/hubsite/hubsite-set.js +8 -8
- package/dist/m365/spo/commands/hubsite/hubsite-theme-sync.js +2 -1
- package/dist/m365/spo/commands/hubsite/hubsite-unregister.js +3 -2
- package/dist/m365/spo/commands/knowledgehub/knowledgehub-get.js +3 -2
- package/dist/m365/spo/commands/knowledgehub/knowledgehub-remove.js +3 -2
- package/dist/m365/spo/commands/knowledgehub/knowledgehub-set.js +5 -5
- package/dist/m365/spo/commands/list/list-add.js +5 -5
- package/dist/m365/spo/commands/list/list-contenttype-add.js +3 -3
- package/dist/m365/spo/commands/list/list-contenttype-default-set.js +3 -3
- package/dist/m365/spo/commands/list/list-contenttype-list.js +3 -3
- package/dist/m365/spo/commands/list/list-contenttype-remove.js +3 -3
- package/dist/m365/spo/commands/list/list-get.js +3 -3
- package/dist/m365/spo/commands/list/list-label-get.js +4 -4
- package/dist/m365/spo/commands/list/list-label-set.js +5 -5
- package/dist/m365/spo/commands/list/list-list.js +2 -1
- package/dist/m365/spo/commands/list/list-remove.js +3 -3
- package/dist/m365/spo/commands/list/list-set.js +6 -6
- package/dist/m365/spo/commands/list/list-sitescript-get.js +4 -4
- package/dist/m365/spo/commands/list/list-view-field-add.js +5 -5
- package/dist/m365/spo/commands/list/list-view-field-remove.js +5 -5
- package/dist/m365/spo/commands/list/list-view-field-set.js +5 -5
- package/dist/m365/spo/commands/list/list-view-get.js +5 -5
- package/dist/m365/spo/commands/list/list-view-list.js +3 -3
- package/dist/m365/spo/commands/list/list-view-remove.js +4 -4
- package/dist/m365/spo/commands/list/list-view-set.js +5 -5
- package/dist/m365/spo/commands/list/list-webhook-add.js +3 -3
- package/dist/m365/spo/commands/list/list-webhook-get.js +4 -4
- package/dist/m365/spo/commands/list/list-webhook-list.js +4 -4
- package/dist/m365/spo/commands/list/list-webhook-remove.js +4 -4
- package/dist/m365/spo/commands/list/list-webhook-set.js +4 -4
- package/dist/m365/spo/commands/listitem/listitem-add.js +5 -7
- package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +3 -3
- package/dist/m365/spo/commands/listitem/listitem-get.js +3 -3
- package/dist/m365/spo/commands/listitem/listitem-isrecord.js +5 -7
- package/dist/m365/spo/commands/listitem/listitem-list.js +4 -4
- package/dist/m365/spo/commands/listitem/listitem-record-declare.js +6 -8
- package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +5 -7
- package/dist/m365/spo/commands/listitem/listitem-remove.js +3 -3
- package/dist/m365/spo/commands/listitem/listitem-set.js +4 -4
- package/dist/m365/spo/commands/mail/mail-send.js +2 -1
- package/dist/m365/spo/commands/navigation/navigation-node-add.js +2 -1
- package/dist/m365/spo/commands/navigation/navigation-node-list.js +2 -1
- package/dist/m365/spo/commands/navigation/navigation-node-remove.js +3 -2
- package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.js +5 -4
- package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-list.js +3 -2
- package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.js +3 -2
- package/dist/m365/spo/commands/orgnewssite/orgnewssite-list.js +3 -2
- package/dist/m365/spo/commands/orgnewssite/orgnewssite-remove.js +5 -5
- package/dist/m365/spo/commands/orgnewssite/orgnewssite-set.js +5 -5
- package/dist/m365/spo/commands/page/Page.js +2 -2
- package/dist/m365/spo/commands/page/page-add.js +4 -4
- package/dist/m365/spo/commands/page/page-clientsidewebpart-add.js +3 -3
- package/dist/m365/spo/commands/page/page-column-get.js +2 -1
- package/dist/m365/spo/commands/page/page-column-list.js +2 -1
- package/dist/m365/spo/commands/page/page-control-get.js +3 -3
- package/dist/m365/spo/commands/page/page-control-list.js +2 -1
- package/dist/m365/spo/commands/page/page-control-set.js +3 -3
- package/dist/m365/spo/commands/page/page-copy.js +2 -1
- package/dist/m365/spo/commands/page/page-get.js +3 -3
- package/dist/m365/spo/commands/page/page-header-set.js +2 -1
- package/dist/m365/spo/commands/page/page-list.js +2 -1
- package/dist/m365/spo/commands/page/page-remove.js +4 -4
- package/dist/m365/spo/commands/page/page-section-add.js +2 -1
- package/dist/m365/spo/commands/page/page-section-get.js +2 -1
- package/dist/m365/spo/commands/page/page-section-list.js +2 -1
- package/dist/m365/spo/commands/page/page-set.js +4 -4
- package/dist/m365/spo/commands/page/page-template-list.js +2 -1
- package/dist/m365/spo/commands/page/page-text-add.js +4 -4
- package/dist/m365/spo/commands/propertybag/propertybag-base.js +4 -4
- package/dist/m365/spo/commands/propertybag/propertybag-get.js +4 -6
- package/dist/m365/spo/commands/propertybag/propertybag-list.js +4 -6
- package/dist/m365/spo/commands/propertybag/propertybag-remove.js +6 -9
- package/dist/m365/spo/commands/propertybag/propertybag-set.js +8 -10
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.js +4 -4
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-list.js +3 -2
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.js +4 -4
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.js +5 -5
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.js +5 -5
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-list.js +3 -2
- package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-set.js +3 -2
- package/dist/m365/spo/commands/site/site-add.js +36 -16
- package/dist/m365/spo/commands/site/site-appcatalog-add.js +5 -5
- package/dist/m365/spo/commands/site/site-appcatalog-remove.js +5 -5
- package/dist/m365/spo/commands/site/site-apppermission-add.js +3 -4
- package/dist/m365/spo/commands/site/site-apppermission-get.js +2 -2
- package/dist/m365/spo/commands/site/site-apppermission-list.js +2 -2
- package/dist/m365/spo/commands/site/site-apppermission-remove.js +3 -4
- package/dist/m365/spo/commands/site/site-apppermission-set.js +3 -4
- package/dist/m365/spo/commands/site/site-chrome-set.js +2 -1
- package/dist/m365/spo/commands/site/site-classic-add.js +33 -13
- package/dist/m365/spo/commands/site/site-classic-list.js +4 -4
- package/dist/m365/spo/commands/site/site-classic-set.js +33 -13
- package/dist/m365/spo/commands/site/site-commsite-enable.js +6 -6
- package/dist/m365/spo/commands/site/site-ensure.js +3 -2
- package/dist/m365/spo/commands/site/site-get.js +2 -1
- package/dist/m365/spo/commands/site/site-groupify.js +2 -1
- package/dist/m365/spo/commands/site/site-inplacerecordsmanagement-set.js +3 -3
- package/dist/m365/spo/commands/site/site-list.js +4 -4
- package/dist/m365/spo/commands/site/site-recyclebinitem-list.js +77 -0
- package/dist/m365/spo/commands/site/site-remove.js +34 -14
- package/dist/m365/spo/commands/site/site-rename.js +3 -2
- package/dist/m365/spo/commands/site/site-set.js +12 -12
- package/dist/m365/spo/commands/sitedesign/sitedesign-add.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-apply.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-get.js +3 -3
- package/dist/m365/spo/commands/sitedesign/sitedesign-list.js +2 -1
- package/dist/m365/spo/commands/sitedesign/sitedesign-remove.js +4 -4
- 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 +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-run-list.js +3 -3
- package/dist/m365/spo/commands/sitedesign/sitedesign-run-status-get.js +3 -3
- package/dist/m365/spo/commands/sitedesign/sitedesign-set.js +4 -4
- package/dist/m365/spo/commands/sitedesign/sitedesign-task-get.js +3 -3
- package/dist/m365/spo/commands/sitedesign/sitedesign-task-list.js +2 -1
- package/dist/m365/spo/commands/sitedesign/sitedesign-task-remove.js +3 -3
- package/dist/m365/spo/commands/sitescript/sitescript-add.js +3 -2
- package/dist/m365/spo/commands/sitescript/sitescript-get.js +4 -4
- package/dist/m365/spo/commands/sitescript/sitescript-list.js +3 -2
- package/dist/m365/spo/commands/sitescript/sitescript-remove.js +4 -4
- package/dist/m365/spo/commands/sitescript/sitescript-set.js +4 -4
- package/dist/m365/spo/commands/spo-search.js +4 -4
- package/dist/m365/spo/commands/spo-set.js +2 -1
- package/dist/m365/spo/commands/storageentity/storageentity-get.js +2 -1
- package/dist/m365/spo/commands/storageentity/storageentity-list.js +2 -1
- package/dist/m365/spo/commands/storageentity/storageentity-remove.js +5 -5
- package/dist/m365/spo/commands/storageentity/storageentity-set.js +5 -5
- package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +2 -1
- package/dist/m365/spo/commands/tenant/tenant-appcatalogurl-get.js +2 -1
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-list.js +3 -2
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-remove.js +16 -6
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-restore.js +16 -6
- package/dist/m365/spo/commands/tenant/tenant-settings-list.js +3 -2
- package/dist/m365/spo/commands/tenant/tenant-settings-set.js +5 -5
- package/dist/m365/spo/commands/term/term-add.js +13 -13
- package/dist/m365/spo/commands/term/term-get.js +9 -9
- package/dist/m365/spo/commands/term/term-group-add.js +6 -6
- package/dist/m365/spo/commands/term/term-group-get.js +5 -5
- package/dist/m365/spo/commands/term/term-group-list.js +3 -2
- package/dist/m365/spo/commands/term/term-list.js +7 -7
- package/dist/m365/spo/commands/term/term-set-add.js +9 -9
- package/dist/m365/spo/commands/term/term-set-get.js +7 -7
- package/dist/m365/spo/commands/term/term-set-list.js +5 -5
- package/dist/m365/spo/commands/theme/theme-apply.js +5 -5
- package/dist/m365/spo/commands/theme/theme-get.js +4 -4
- package/dist/m365/spo/commands/theme/theme-list.js +2 -1
- package/dist/m365/spo/commands/theme/theme-remove.js +2 -1
- package/dist/m365/spo/commands/theme/theme-set.js +5 -5
- package/dist/m365/spo/commands/user/user-get.js +2 -1
- package/dist/m365/spo/commands/user/user-list.js +2 -1
- package/dist/m365/spo/commands/user/user-remove.js +2 -1
- package/dist/m365/spo/commands/userprofile/userprofile-get.js +3 -3
- package/dist/m365/spo/commands/userprofile/userprofile-set.js +3 -2
- package/dist/m365/spo/commands/web/web-add.js +4 -3
- package/dist/m365/spo/commands/web/web-clientsidewebpart-list.js +2 -1
- package/dist/m365/spo/commands/web/web-get.js +2 -1
- package/dist/m365/spo/commands/web/web-installedlanguage-list.js +49 -0
- package/dist/m365/spo/commands/web/web-list.js +2 -1
- package/dist/m365/spo/commands/web/web-reindex.js +10 -11
- package/dist/m365/spo/commands/web/web-remove.js +2 -1
- package/dist/m365/spo/commands/web/web-set.js +2 -1
- package/dist/m365/spo/commands.js +3 -0
- package/dist/m365/teams/commands/app/app-install.js +77 -23
- package/dist/m365/teams/commands/app/app-list.js +17 -14
- package/dist/m365/teams/commands/app/app-remove.js +2 -2
- package/dist/m365/teams/commands/app/app-uninstall.js +2 -2
- package/dist/m365/teams/commands/app/app-update.js +55 -13
- package/dist/m365/teams/commands/channel/channel-add.js +2 -2
- package/dist/m365/teams/commands/channel/channel-get.js +32 -10
- package/dist/m365/teams/commands/channel/channel-list.js +7 -8
- package/dist/m365/teams/commands/channel/channel-remove.js +3 -3
- package/dist/m365/teams/commands/channel/channel-set.js +2 -2
- package/dist/m365/teams/commands/chat/chat-list.js +44 -0
- package/dist/m365/teams/commands/chat/chat-member-list.js +42 -0
- package/dist/m365/teams/commands/chat/chat-message-list.js +60 -0
- package/dist/m365/teams/commands/chat/chat-message-send.js +225 -0
- package/dist/m365/teams/commands/conversationmember/conversationmember-add.js +3 -3
- package/dist/m365/teams/commands/conversationmember/conversationmember-list.js +9 -9
- package/dist/m365/teams/commands/funsettings/funsettings-list.js +2 -2
- package/dist/m365/teams/commands/funsettings/funsettings-set.js +2 -2
- package/dist/m365/teams/commands/guestsettings/guestsettings-list.js +2 -2
- package/dist/m365/teams/commands/guestsettings/guestsettings-set.js +2 -2
- package/dist/m365/teams/commands/membersettings/membersettings-list.js +2 -2
- package/dist/m365/teams/commands/membersettings/membersettings-set.js +2 -2
- package/dist/m365/teams/commands/message/message-get.js +4 -4
- package/dist/m365/teams/commands/message/message-list.js +12 -12
- package/dist/m365/teams/commands/message/message-reply-list.js +10 -10
- package/dist/m365/teams/commands/messagingsettings/messagingsettings-list.js +2 -2
- package/dist/m365/teams/commands/messagingsettings/messagingsettings-set.js +3 -3
- package/dist/m365/teams/commands/report/report-directroutingcalls.js +3 -3
- package/dist/m365/teams/commands/report/report-pstncalls.js +3 -3
- package/dist/m365/teams/commands/tab/tab-add.js +5 -5
- package/dist/m365/teams/commands/tab/tab-get.js +13 -10
- package/dist/m365/teams/commands/tab/tab-list.js +10 -10
- package/dist/m365/teams/commands/tab/tab-remove.js +4 -4
- package/dist/m365/teams/commands/team/team-archive.js +2 -2
- package/dist/m365/teams/commands/team/team-clone.js +2 -2
- package/dist/m365/teams/commands/team/team-get.js +2 -2
- package/dist/m365/teams/commands/team/team-list.js +10 -12
- package/dist/m365/teams/commands/team/team-remove.js +2 -2
- package/dist/m365/teams/commands/team/team-set.js +2 -2
- package/dist/m365/teams/commands/team/team-unarchive.js +2 -2
- package/dist/m365/teams/commands/user/user-app-add.js +3 -3
- package/dist/m365/teams/commands/user/user-app-list.js +10 -10
- package/dist/m365/teams/commands/user/user-app-remove.js +2 -2
- package/dist/m365/teams/commands/user/user-list.js +14 -8
- package/dist/m365/teams/commands.js +4 -0
- package/dist/m365/tenant/commands/auditlog/auditlog-report.js +2 -2
- package/dist/m365/tenant/commands/id/id-get.js +2 -2
- package/dist/m365/tenant/commands/report/report-office365activationcounts.js +2 -2
- package/dist/m365/tenant/commands/report/report-office365activationsusercounts.js +2 -2
- package/dist/m365/tenant/commands/report/report-office365activationsuserdetail.js +2 -2
- package/dist/m365/tenant/commands/service/service-list.js +2 -2
- package/dist/m365/tenant/commands/service/service-message-list.js +2 -2
- package/dist/m365/tenant/commands/service/service-report-historicalservicestatus.js +2 -2
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +57 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.js +56 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-get.js +39 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-list.js +39 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.js +51 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-list.js +39 -0
- package/dist/m365/tenant/commands/status/status-list.js +2 -2
- package/dist/m365/tenant/commands.js +6 -0
- package/dist/m365/todo/commands/list/list-list.js +7 -6
- package/dist/m365/todo/commands/task/task-list.js +7 -6
- package/dist/request.js +11 -6
- package/dist/settingsNames.js +7 -0
- package/dist/utils/accessToken.js +44 -0
- package/dist/utils/formatting.js +66 -0
- package/dist/utils/fsUtil.js +36 -0
- package/dist/utils/index.js +22 -0
- package/dist/utils/odata.js +37 -0
- package/dist/utils/sinonUtil.js +19 -0
- package/dist/{m365/spfx/commands/project/project-upgrade/Utils.js → utils/spfx.js} +7 -19
- package/dist/utils/spo.js +432 -0
- package/dist/utils/urlUtil.js +174 -0
- package/dist/utils/validation.js +310 -0
- package/docs/docs/cmd/_global.md +2 -2
- package/docs/docs/cmd/aad/app/app-delete.md +51 -0
- package/docs/docs/cmd/aad/app/app-get.md +59 -0
- package/docs/docs/cmd/aad/app/app-set.md +21 -0
- package/docs/docs/cmd/aad/group/group-list.md +30 -0
- package/docs/docs/cmd/aad/o365group/o365group-add.md +42 -6
- package/docs/docs/cmd/aad/o365group/o365group-conversation-list.md +24 -0
- package/docs/docs/cmd/aad/o365group/o365group-conversation-post-list.md +36 -0
- package/docs/docs/cmd/aad/user/user-get.md +13 -4
- package/docs/docs/cmd/aad/user/user-hibp.md +46 -0
- package/docs/docs/cmd/aad/user/user-list.md +9 -0
- package/docs/docs/cmd/aad/user/user-password-validate.md +29 -0
- package/docs/docs/cmd/app/permission/permission-list.md +36 -0
- package/docs/docs/cmd/outlook/room/room-list.md +30 -0
- package/docs/docs/cmd/outlook/roomlist/roomlist-list.md +21 -0
- package/docs/docs/cmd/pa/app/app-list.md +17 -1
- package/docs/docs/cmd/planner/plan/plan-details-get.md +45 -0
- package/docs/docs/cmd/planner/task/task-add.md +78 -0
- package/docs/docs/cmd/planner/task/task-details-get.md +24 -0
- package/docs/docs/cmd/planner/task/task-get.md +29 -0
- package/docs/docs/cmd/planner/task/task-list.md +5 -0
- package/docs/docs/cmd/planner/task/task-set.md +99 -0
- package/docs/docs/cmd/search/externalconnection/externalconnection-add.md +43 -0
- package/docs/docs/cmd/spfx/project/project-externalize.md +1 -1
- package/docs/docs/cmd/spfx/project/project-rename.md +1 -1
- package/docs/docs/cmd/spfx/project/project-upgrade.md +8 -8
- package/docs/docs/cmd/spfx/spfx-doctor.md +1 -1
- package/docs/docs/cmd/spo/group/group-user-add.md +28 -6
- package/docs/docs/cmd/spo/group/group-user-remove.md +39 -0
- package/docs/docs/cmd/spo/site/site-recyclebinitem-list.md +40 -0
- package/docs/docs/cmd/spo/web/web-installedlanguage-list.md +24 -0
- package/docs/docs/cmd/teams/app/app-install.md +22 -4
- package/docs/docs/cmd/teams/app/app-update.md +12 -3
- package/docs/docs/cmd/teams/channel/channel-get.md +11 -2
- package/docs/docs/cmd/teams/chat/chat-list.md +30 -0
- package/docs/docs/cmd/teams/chat/chat-member-list.md +24 -0
- package/docs/docs/cmd/teams/chat/chat-message-list.md +24 -0
- package/docs/docs/cmd/teams/chat/chat-message-send.md +55 -0
- package/docs/docs/cmd/teams/message/message-get.md +0 -3
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-get.md +33 -0
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-list.md +30 -0
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-get.md +24 -0
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-list.md +34 -0
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-get.md +28 -0
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-list.md +34 -0
- package/npm-shrinkwrap.json +1329 -1499
- package/package.json +39 -27
- package/dist/Utils.js +0 -568
- package/dist/m365/aad/commands/o365group/Group.js +0 -3
- package/dist/m365/aad/commands/o365group/GroupUser.js +0 -3
- package/dist/m365/base/AadCommand.js +0 -10
- package/dist/m365/base/GraphItemsListCommand.js +0 -46
- package/dist/m365/base/GraphResponse.js +0 -3
- package/dist/m365/base/GraphResponseError.js +0 -3
- package/dist/m365/spo/ClientSvc.js +0 -128
- package/dist/m365/spo/FolderExtensions.js +0 -101
- package/dist/m365/spo/spo.js +0 -3
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const cli_1 = require("../../../../cli");
|
|
13
|
+
const request_1 = require("../../../../request");
|
|
14
|
+
const appGetCommand = require("../../../aad/commands/app/app-get");
|
|
15
|
+
const AppCommand_1 = require("../../../base/AppCommand");
|
|
16
|
+
const commands_1 = require("../../commands");
|
|
17
|
+
var GetServicePrincipal;
|
|
18
|
+
(function (GetServicePrincipal) {
|
|
19
|
+
GetServicePrincipal[GetServicePrincipal["withPermissions"] = 0] = "withPermissions";
|
|
20
|
+
GetServicePrincipal[GetServicePrincipal["withPermissionDefinitions"] = 1] = "withPermissionDefinitions";
|
|
21
|
+
})(GetServicePrincipal || (GetServicePrincipal = {}));
|
|
22
|
+
class AppPermissionListCommand extends AppCommand_1.default {
|
|
23
|
+
get name() {
|
|
24
|
+
return commands_1.default.PERMISSION_LIST;
|
|
25
|
+
}
|
|
26
|
+
get description() {
|
|
27
|
+
return 'Lists API permissions for the current AAD app';
|
|
28
|
+
}
|
|
29
|
+
commandAction(logger, args, cb) {
|
|
30
|
+
this
|
|
31
|
+
.getServicePrincipal({ appId: this.appId }, logger, GetServicePrincipal.withPermissions)
|
|
32
|
+
.then(servicePrincipal => {
|
|
33
|
+
if (servicePrincipal) {
|
|
34
|
+
// service principal found, get permissions from the service principal
|
|
35
|
+
return this.getServicePrincipalPermissions(servicePrincipal, logger);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// service principal not found, get permissions from app registration
|
|
39
|
+
return this.getAppRegPermissions(this.appId, logger);
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.then(permissions => {
|
|
43
|
+
logger.log(permissions);
|
|
44
|
+
cb();
|
|
45
|
+
}, err => this.handleRejectedODataJsonPromise(err, logger, cb));
|
|
46
|
+
}
|
|
47
|
+
getServicePrincipal(servicePrincipalInfo, logger, mode) {
|
|
48
|
+
var _a;
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
if (this.verbose) {
|
|
51
|
+
logger.logToStderr(`Retrieving service principal ${(_a = servicePrincipalInfo.appId) !== null && _a !== void 0 ? _a : servicePrincipalInfo.id}`);
|
|
52
|
+
}
|
|
53
|
+
const lookupUrl = servicePrincipalInfo.appId ? `?$filter=appId eq '${servicePrincipalInfo.appId}'&` : `/${servicePrincipalInfo.id}?`;
|
|
54
|
+
const requestOptions = {
|
|
55
|
+
url: `${this.resource}/v1.0/servicePrincipals${lookupUrl}$select=appId,id,displayName`,
|
|
56
|
+
headers: {
|
|
57
|
+
accept: 'application/json;odata.metadata=none'
|
|
58
|
+
},
|
|
59
|
+
responseType: 'json'
|
|
60
|
+
};
|
|
61
|
+
const response = yield request_1.default.get(requestOptions);
|
|
62
|
+
if ((servicePrincipalInfo.id && !response) ||
|
|
63
|
+
(servicePrincipalInfo.appId && response.value.length === 0)) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const servicePrincipal = servicePrincipalInfo.appId ?
|
|
67
|
+
response.value[0] :
|
|
68
|
+
response;
|
|
69
|
+
if (this.verbose) {
|
|
70
|
+
logger.logToStderr(`Retrieving permissions for service principal ${servicePrincipal.id}...`);
|
|
71
|
+
}
|
|
72
|
+
const permissionsPromises = [];
|
|
73
|
+
switch (mode) {
|
|
74
|
+
case GetServicePrincipal.withPermissions:
|
|
75
|
+
const appRoleAssignmentsRequestOptions = {
|
|
76
|
+
url: `${this.resource}/v1.0/servicePrincipals/${servicePrincipal.id}/appRoleAssignments`,
|
|
77
|
+
headers: {
|
|
78
|
+
accept: 'application/json;odata.metadata=none'
|
|
79
|
+
},
|
|
80
|
+
responseType: 'json'
|
|
81
|
+
};
|
|
82
|
+
const oauth2PermissionGrantsRequestOptions = {
|
|
83
|
+
url: `${this.resource}/v1.0/servicePrincipals/${servicePrincipal.id}/oauth2PermissionGrants`,
|
|
84
|
+
headers: {
|
|
85
|
+
accept: 'application/json;odata.metadata=none'
|
|
86
|
+
},
|
|
87
|
+
responseType: 'json'
|
|
88
|
+
};
|
|
89
|
+
permissionsPromises.push(...[
|
|
90
|
+
request_1.default.get(appRoleAssignmentsRequestOptions),
|
|
91
|
+
request_1.default.get(oauth2PermissionGrantsRequestOptions)
|
|
92
|
+
]);
|
|
93
|
+
break;
|
|
94
|
+
case GetServicePrincipal.withPermissionDefinitions:
|
|
95
|
+
const oauth2PermissionScopesRequestOptions = {
|
|
96
|
+
url: `${this.resource}/v1.0/servicePrincipals/${servicePrincipal.id}/oauth2PermissionScopes`,
|
|
97
|
+
headers: {
|
|
98
|
+
accept: 'application/json;odata.metadata=none'
|
|
99
|
+
},
|
|
100
|
+
responseType: 'json'
|
|
101
|
+
};
|
|
102
|
+
const appRolesRequestOptions = {
|
|
103
|
+
url: `${this.resource}/v1.0/servicePrincipals/${servicePrincipal.id}/appRoles`,
|
|
104
|
+
headers: {
|
|
105
|
+
accept: 'application/json;odata.metadata=none'
|
|
106
|
+
},
|
|
107
|
+
responseType: 'json'
|
|
108
|
+
};
|
|
109
|
+
permissionsPromises.push(...[
|
|
110
|
+
request_1.default.get(oauth2PermissionScopesRequestOptions),
|
|
111
|
+
request_1.default.get(appRolesRequestOptions)
|
|
112
|
+
]);
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
const permissions = yield Promise.all(permissionsPromises);
|
|
116
|
+
switch (mode) {
|
|
117
|
+
case GetServicePrincipal.withPermissions:
|
|
118
|
+
servicePrincipal.appRoleAssignments = permissions[0].value;
|
|
119
|
+
servicePrincipal.oauth2PermissionGrants = permissions[1].value;
|
|
120
|
+
break;
|
|
121
|
+
case GetServicePrincipal.withPermissionDefinitions:
|
|
122
|
+
servicePrincipal.oauth2PermissionScopes = permissions[0].value;
|
|
123
|
+
servicePrincipal.appRoles = permissions[1].value;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
return servicePrincipal;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
getServicePrincipalPermissions(servicePrincipal, logger) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
if (this.verbose) {
|
|
132
|
+
logger.logToStderr(`Resolving permissions for the service principal...`);
|
|
133
|
+
}
|
|
134
|
+
const apiPermissions = [];
|
|
135
|
+
// hash table for resolving resource IDs to names
|
|
136
|
+
const resourceLookup = {};
|
|
137
|
+
// list of service principals for which to load permissions
|
|
138
|
+
const servicePrincipalsToResolve = [];
|
|
139
|
+
const appRoleAssignments = servicePrincipal.appRoleAssignments;
|
|
140
|
+
apiPermissions.push(...appRoleAssignments.map(appRoleAssignment => {
|
|
141
|
+
// store resource name for resolving OAuth2 grants
|
|
142
|
+
resourceLookup[appRoleAssignment.resourceId] = appRoleAssignment.resourceDisplayName;
|
|
143
|
+
// add to the list of service principals to load to get the app role
|
|
144
|
+
// display name
|
|
145
|
+
if (!servicePrincipalsToResolve.find(r => r.id === appRoleAssignment.resourceId)) {
|
|
146
|
+
servicePrincipalsToResolve.push({ id: appRoleAssignment.resourceId });
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
resource: appRoleAssignment.resourceDisplayName,
|
|
150
|
+
// we store the app role ID temporarily and will later resolve to display name
|
|
151
|
+
permission: appRoleAssignment.appRoleId,
|
|
152
|
+
type: 'Application'
|
|
153
|
+
};
|
|
154
|
+
}));
|
|
155
|
+
const oauth2Grants = servicePrincipal.oauth2PermissionGrants;
|
|
156
|
+
oauth2Grants.forEach(oauth2Grant => {
|
|
157
|
+
var _a;
|
|
158
|
+
// see if we can resolve the resource name from the resources
|
|
159
|
+
// retrieved from app role assignments
|
|
160
|
+
const resource = (_a = resourceLookup[oauth2Grant.resourceId]) !== null && _a !== void 0 ? _a : oauth2Grant.resourceId;
|
|
161
|
+
if (resource === oauth2Grant.resourceId &&
|
|
162
|
+
!servicePrincipalsToResolve.find(r => r.id === oauth2Grant.resourceId)) {
|
|
163
|
+
// resource name not found in the resources
|
|
164
|
+
// add it to the list of resources to resolve
|
|
165
|
+
servicePrincipalsToResolve.push({ id: oauth2Grant.resourceId });
|
|
166
|
+
}
|
|
167
|
+
const scopes = oauth2Grant.scope.split(' ');
|
|
168
|
+
scopes.forEach(scope => {
|
|
169
|
+
apiPermissions.push({
|
|
170
|
+
resource,
|
|
171
|
+
permission: scope,
|
|
172
|
+
type: 'Delegated'
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
if (servicePrincipalsToResolve.length > 0) {
|
|
177
|
+
const servicePrincipals = yield Promise
|
|
178
|
+
.all(servicePrincipalsToResolve
|
|
179
|
+
.map(servicePrincipalInfo => this.getServicePrincipal(servicePrincipalInfo, logger, GetServicePrincipal.withPermissionDefinitions)));
|
|
180
|
+
servicePrincipals.forEach(servicePrincipal => {
|
|
181
|
+
apiPermissions.forEach(apiPermission => {
|
|
182
|
+
var _a, _b;
|
|
183
|
+
if (apiPermission.resource === servicePrincipal.id) {
|
|
184
|
+
apiPermission.resource = servicePrincipal.displayName;
|
|
185
|
+
}
|
|
186
|
+
if (apiPermission.resource === servicePrincipal.displayName &&
|
|
187
|
+
apiPermission.type === 'Application') {
|
|
188
|
+
apiPermission.permission = (_b = (_a = servicePrincipal.appRoles
|
|
189
|
+
.find(appRole => appRole.id === apiPermission.permission)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : apiPermission.permission;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return apiPermissions;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
getAppRegistration(appId, logger) {
|
|
198
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
199
|
+
if (this.verbose) {
|
|
200
|
+
logger.logToStderr(`Retrieving Azure AD application registration ${appId}`);
|
|
201
|
+
}
|
|
202
|
+
const options = {
|
|
203
|
+
appId: appId,
|
|
204
|
+
output: 'json',
|
|
205
|
+
debug: this.debug,
|
|
206
|
+
verbose: this.verbose
|
|
207
|
+
};
|
|
208
|
+
const output = yield cli_1.Cli.executeCommandWithOutput(appGetCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
|
|
209
|
+
if (this.debug) {
|
|
210
|
+
logger.logToStderr(output.stderr);
|
|
211
|
+
}
|
|
212
|
+
return JSON.parse(output.stdout);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
getAppRegPermissions(appId, logger) {
|
|
216
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
217
|
+
const application = yield this.getAppRegistration(appId, logger);
|
|
218
|
+
if (application.requiredResourceAccess.length === 0) {
|
|
219
|
+
return [];
|
|
220
|
+
}
|
|
221
|
+
const servicePrincipalsToResolve = application.requiredResourceAccess
|
|
222
|
+
.map(resourceAccess => {
|
|
223
|
+
return {
|
|
224
|
+
appId: resourceAccess.resourceAppId
|
|
225
|
+
};
|
|
226
|
+
});
|
|
227
|
+
const servicePrincipals = yield Promise
|
|
228
|
+
.all(servicePrincipalsToResolve.map(servicePrincipalInfo => this.getServicePrincipal(servicePrincipalInfo, logger, GetServicePrincipal.withPermissionDefinitions)));
|
|
229
|
+
const apiPermissions = [];
|
|
230
|
+
application.requiredResourceAccess.forEach(requiredResourceAccess => {
|
|
231
|
+
var _a;
|
|
232
|
+
const servicePrincipal = servicePrincipals
|
|
233
|
+
.find(servicePrincipal => (servicePrincipal === null || servicePrincipal === void 0 ? void 0 : servicePrincipal.appId) === requiredResourceAccess.resourceAppId);
|
|
234
|
+
const resourceName = (_a = servicePrincipal === null || servicePrincipal === void 0 ? void 0 : servicePrincipal.displayName) !== null && _a !== void 0 ? _a : requiredResourceAccess.resourceAppId;
|
|
235
|
+
requiredResourceAccess.resourceAccess.forEach(permission => {
|
|
236
|
+
apiPermissions.push({
|
|
237
|
+
resource: resourceName,
|
|
238
|
+
permission: this.getPermissionName(permission.id, permission.type, servicePrincipal),
|
|
239
|
+
type: permission.type === 'Role' ? 'Application' : 'Delegated'
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
return apiPermissions;
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
getPermissionName(permissionId, permissionType, servicePrincipal) {
|
|
247
|
+
var _a, _b, _c, _d;
|
|
248
|
+
if (!servicePrincipal) {
|
|
249
|
+
return permissionId;
|
|
250
|
+
}
|
|
251
|
+
switch (permissionType) {
|
|
252
|
+
case 'Role':
|
|
253
|
+
return (_b = (_a = servicePrincipal.appRoles
|
|
254
|
+
.find(appRole => appRole.id === permissionId)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : permissionId;
|
|
255
|
+
case 'Scope':
|
|
256
|
+
return (_d = (_c = servicePrincipal.oauth2PermissionScopes
|
|
257
|
+
.find(permissionScope => permissionScope.id === permissionId)) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : permissionId;
|
|
258
|
+
}
|
|
259
|
+
/* c8 ignore next 4 */
|
|
260
|
+
// permissionType is either 'Scope' or 'Role' but we need a safe default
|
|
261
|
+
// to avoid building errors. This code will never be reached.
|
|
262
|
+
return permissionId;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
module.exports = new AppPermissionListCommand();
|
|
266
|
+
//# sourceMappingURL=permission-list.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const cli_1 = require("../../cli");
|
|
5
|
+
const Command_1 = require("../../Command");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
class AppCommand extends Command_1.default {
|
|
8
|
+
get resource() {
|
|
9
|
+
return 'https://graph.microsoft.com';
|
|
10
|
+
}
|
|
11
|
+
action(logger, args, cb) {
|
|
12
|
+
const m365rcJsonPath = '.m365rc.json';
|
|
13
|
+
if (!fs.existsSync(m365rcJsonPath)) {
|
|
14
|
+
return cb(new Command_1.CommandError(`Could not find file: ${m365rcJsonPath}`));
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const m365rcJsonContents = fs.readFileSync(m365rcJsonPath, 'utf8');
|
|
18
|
+
if (!m365rcJsonContents) {
|
|
19
|
+
return cb(new Command_1.CommandError(`File ${m365rcJsonPath} is empty`));
|
|
20
|
+
}
|
|
21
|
+
this.m365rcJson = JSON.parse(m365rcJsonContents);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
return cb(new Command_1.CommandError(`Could not parse file: ${m365rcJsonPath}`));
|
|
25
|
+
}
|
|
26
|
+
if (!this.m365rcJson.apps ||
|
|
27
|
+
this.m365rcJson.apps.length === 0) {
|
|
28
|
+
return cb(new Command_1.CommandError(`No Azure AD apps found in ${m365rcJsonPath}`));
|
|
29
|
+
}
|
|
30
|
+
if (args.options.appId) {
|
|
31
|
+
if (!this.m365rcJson.apps.some(app => app.appId === args.options.appId)) {
|
|
32
|
+
return cb(new Command_1.CommandError(`App ${args.options.appId} not found in ${m365rcJsonPath}`));
|
|
33
|
+
}
|
|
34
|
+
this.appId = args.options.appId;
|
|
35
|
+
return super.action(logger, args, cb);
|
|
36
|
+
}
|
|
37
|
+
if (this.m365rcJson.apps.length === 1) {
|
|
38
|
+
this.appId = this.m365rcJson.apps[0].appId;
|
|
39
|
+
return super.action(logger, args, cb);
|
|
40
|
+
}
|
|
41
|
+
if (this.m365rcJson.apps.length > 1) {
|
|
42
|
+
cli_1.Cli.prompt({
|
|
43
|
+
message: `Multiple Azure AD apps found in ${m365rcJsonPath}. Which app would you like to use?`,
|
|
44
|
+
type: 'list',
|
|
45
|
+
choices: this.m365rcJson.apps.map((app, i) => {
|
|
46
|
+
return {
|
|
47
|
+
name: `${app.name} (${app.appId})`,
|
|
48
|
+
value: i
|
|
49
|
+
};
|
|
50
|
+
}),
|
|
51
|
+
default: 0,
|
|
52
|
+
name: 'appIdIndex'
|
|
53
|
+
}, (result) => {
|
|
54
|
+
this.appId = this.m365rcJson.apps[result.appIdIndex].appId;
|
|
55
|
+
super.action(logger, args, cb);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
options() {
|
|
60
|
+
const options = [
|
|
61
|
+
{
|
|
62
|
+
option: '--appId [appId]'
|
|
63
|
+
}
|
|
64
|
+
];
|
|
65
|
+
const parentOptions = super.options();
|
|
66
|
+
return options.concat(parentOptions);
|
|
67
|
+
}
|
|
68
|
+
validate(args) {
|
|
69
|
+
if (args.options.appId && !utils_1.validation.isValidGuid(args.options.appId)) {
|
|
70
|
+
return `${args.options.appId} is not a valid GUID`;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.default = AppCommand;
|
|
76
|
+
//# sourceMappingURL=AppCommand.js.map
|
|
@@ -11,8 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const Auth_1 = require("../../Auth");
|
|
13
13
|
const Command_1 = require("../../Command");
|
|
14
|
-
const config_1 = require("../../config");
|
|
15
|
-
const request_1 = require("../../request");
|
|
16
14
|
const csomDefs = require('../../../csom.json');
|
|
17
15
|
class SpoCommand extends Command_1.default {
|
|
18
16
|
/**
|
|
@@ -60,16 +58,6 @@ class SpoCommand extends Command_1.default {
|
|
|
60
58
|
getExcludedOptionsWithUrls() {
|
|
61
59
|
return undefined;
|
|
62
60
|
}
|
|
63
|
-
getRequestDigest(siteUrl) {
|
|
64
|
-
const requestOptions = {
|
|
65
|
-
url: `${siteUrl}/_api/contextinfo`,
|
|
66
|
-
headers: {
|
|
67
|
-
accept: 'application/json;odata=nometadata'
|
|
68
|
-
},
|
|
69
|
-
responseType: 'json'
|
|
70
|
-
};
|
|
71
|
-
return request_1.default.post(requestOptions);
|
|
72
|
-
}
|
|
73
61
|
processOptions(options) {
|
|
74
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
75
63
|
const namesOfOptionsWithUrls = this.getNamesOfOptionsWithUrls();
|
|
@@ -91,234 +79,6 @@ class SpoCommand extends Command_1.default {
|
|
|
91
79
|
}
|
|
92
80
|
});
|
|
93
81
|
}
|
|
94
|
-
static isValidSharePointUrl(url) {
|
|
95
|
-
if (!url) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
if (url.indexOf('https://') !== 0) {
|
|
99
|
-
return `${url} is not a valid SharePoint Online site URL`;
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
ensureFormDigest(siteUrl, logger, context, debug) {
|
|
106
|
-
return new Promise((resolve, reject) => {
|
|
107
|
-
if (this.isValidFormDigest(context)) {
|
|
108
|
-
if (debug) {
|
|
109
|
-
logger.logToStderr('Existing form digest still valid');
|
|
110
|
-
}
|
|
111
|
-
resolve(context);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
this
|
|
115
|
-
.getRequestDigest(siteUrl)
|
|
116
|
-
.then((res) => {
|
|
117
|
-
const now = new Date();
|
|
118
|
-
now.setSeconds(now.getSeconds() + res.FormDigestTimeoutSeconds - 5);
|
|
119
|
-
context = {
|
|
120
|
-
FormDigestValue: res.FormDigestValue,
|
|
121
|
-
FormDigestTimeoutSeconds: res.FormDigestTimeoutSeconds,
|
|
122
|
-
FormDigestExpiresAt: now,
|
|
123
|
-
WebFullUrl: res.WebFullUrl
|
|
124
|
-
};
|
|
125
|
-
resolve(context);
|
|
126
|
-
}, (error) => {
|
|
127
|
-
reject(error);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
isValidFormDigest(contextInfo) {
|
|
132
|
-
if (!contextInfo) {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
const now = new Date();
|
|
136
|
-
if (contextInfo.FormDigestValue && now < contextInfo.FormDigestExpiresAt) {
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
waitUntilFinished(operationId, siteUrl, resolve, reject, logger, currentContext, dots) {
|
|
142
|
-
this
|
|
143
|
-
.ensureFormDigest(siteUrl, logger, currentContext, this.debug)
|
|
144
|
-
.then((res) => {
|
|
145
|
-
currentContext = res;
|
|
146
|
-
if (this.debug) {
|
|
147
|
-
logger.logToStderr(`Checking if operation ${operationId} completed...`);
|
|
148
|
-
}
|
|
149
|
-
if (!this.debug && this.verbose) {
|
|
150
|
-
dots += '.';
|
|
151
|
-
process.stdout.write(`\r${dots}`);
|
|
152
|
-
}
|
|
153
|
-
const requestOptions = {
|
|
154
|
-
url: `${siteUrl}/_vti_bin/client.svc/ProcessQuery`,
|
|
155
|
-
headers: {
|
|
156
|
-
'X-RequestDigest': currentContext.FormDigestValue
|
|
157
|
-
},
|
|
158
|
-
data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><Query Id="188" ObjectPathId="184"><Query SelectAllProperties="false"><Properties><Property Name="IsComplete" ScalarProperty="true" /><Property Name="PollingInterval" ScalarProperty="true" /></Properties></Query></Query></Actions><ObjectPaths><Identity Id="184" Name="${operationId.replace(/\\n/g, '
').replace(/"/g, '')}" /></ObjectPaths></Request>`
|
|
159
|
-
};
|
|
160
|
-
return request_1.default.post(requestOptions);
|
|
161
|
-
})
|
|
162
|
-
.then((res) => {
|
|
163
|
-
const json = JSON.parse(res);
|
|
164
|
-
const response = json[0];
|
|
165
|
-
if (response.ErrorInfo) {
|
|
166
|
-
reject(response.ErrorInfo.ErrorMessage);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
const operation = json[json.length - 1];
|
|
170
|
-
const isComplete = operation.IsComplete;
|
|
171
|
-
if (isComplete) {
|
|
172
|
-
if (!this.debug && this.verbose) {
|
|
173
|
-
process.stdout.write('\n');
|
|
174
|
-
}
|
|
175
|
-
resolve();
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
setTimeout(() => {
|
|
179
|
-
this.waitUntilFinished(JSON.stringify(operation._ObjectIdentity_), siteUrl, resolve, reject, logger, currentContext, dots);
|
|
180
|
-
}, operation.PollingInterval);
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
waitUntilCopyJobFinished(copyJobInfo, siteUrl, pollingInterval, resolve, reject, logger, dots) {
|
|
185
|
-
const requestUrl = `${siteUrl}/_api/site/GetCopyJobProgress`;
|
|
186
|
-
const requestOptions = {
|
|
187
|
-
url: requestUrl,
|
|
188
|
-
headers: {
|
|
189
|
-
'accept': 'application/json;odata=nometadata'
|
|
190
|
-
},
|
|
191
|
-
data: { "copyJobInfo": copyJobInfo },
|
|
192
|
-
responseType: 'json'
|
|
193
|
-
};
|
|
194
|
-
if (!this.debug && this.verbose) {
|
|
195
|
-
dots += '.';
|
|
196
|
-
process.stdout.write(`\r${dots}`);
|
|
197
|
-
}
|
|
198
|
-
request_1.default
|
|
199
|
-
.post(requestOptions)
|
|
200
|
-
.then((resp) => {
|
|
201
|
-
if (this.debug) {
|
|
202
|
-
logger.logToStderr('getCopyJobProgress response...');
|
|
203
|
-
logger.logToStderr(resp);
|
|
204
|
-
}
|
|
205
|
-
for (const item of resp.Logs) {
|
|
206
|
-
const log = JSON.parse(item);
|
|
207
|
-
// reject if progress error
|
|
208
|
-
if (log.Event === "JobError" || log.Event === "JobFatalError") {
|
|
209
|
-
return reject(log.Message);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// two possible scenarios
|
|
213
|
-
// job done = success promise returned
|
|
214
|
-
// job in progress = recursive call using setTimeout returned
|
|
215
|
-
if (resp.JobState === 0) {
|
|
216
|
-
// job done
|
|
217
|
-
if (this.verbose) {
|
|
218
|
-
process.stdout.write('\n');
|
|
219
|
-
}
|
|
220
|
-
resolve();
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
setTimeout(() => {
|
|
224
|
-
this.waitUntilCopyJobFinished(copyJobInfo, siteUrl, pollingInterval, resolve, reject, logger, dots);
|
|
225
|
-
}, pollingInterval);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
getSpoUrl(logger, debug) {
|
|
230
|
-
if (Auth_1.default.service.spoUrl) {
|
|
231
|
-
if (debug) {
|
|
232
|
-
logger.logToStderr(`SPO URL previously retrieved ${Auth_1.default.service.spoUrl}. Returning...`);
|
|
233
|
-
}
|
|
234
|
-
return Promise.resolve(Auth_1.default.service.spoUrl);
|
|
235
|
-
}
|
|
236
|
-
return new Promise((resolve, reject) => {
|
|
237
|
-
if (debug) {
|
|
238
|
-
logger.logToStderr(`No SPO URL available. Retrieving from MS Graph...`);
|
|
239
|
-
}
|
|
240
|
-
const requestOptions = {
|
|
241
|
-
url: `https://graph.microsoft.com/v1.0/sites/root?$select=webUrl`,
|
|
242
|
-
headers: {
|
|
243
|
-
'accept': 'application/json;odata.metadata=none'
|
|
244
|
-
},
|
|
245
|
-
responseType: 'json'
|
|
246
|
-
};
|
|
247
|
-
request_1.default
|
|
248
|
-
.get(requestOptions)
|
|
249
|
-
.then((res) => {
|
|
250
|
-
Auth_1.default.service.spoUrl = res.webUrl;
|
|
251
|
-
return Auth_1.default.storeConnectionInfo();
|
|
252
|
-
})
|
|
253
|
-
.then(() => {
|
|
254
|
-
resolve(Auth_1.default.service.spoUrl);
|
|
255
|
-
}, (err) => {
|
|
256
|
-
if (Auth_1.default.service.spoUrl) {
|
|
257
|
-
resolve(Auth_1.default.service.spoUrl);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
reject(err);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
getSpoAdminUrl(logger, debug) {
|
|
266
|
-
return new Promise((resolve, reject) => {
|
|
267
|
-
this
|
|
268
|
-
.getSpoUrl(logger, debug)
|
|
269
|
-
.then((spoUrl) => {
|
|
270
|
-
resolve(spoUrl.replace(/(https:\/\/)([^\.]+)(.*)/, '$1$2-admin$3'));
|
|
271
|
-
}, (error) => {
|
|
272
|
-
reject(error);
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
getTenantId(logger, debug) {
|
|
277
|
-
if (Auth_1.default.service.tenantId) {
|
|
278
|
-
if (debug) {
|
|
279
|
-
logger.logToStderr(`SPO Tenant ID previously retrieved ${Auth_1.default.service.tenantId}. Returning...`);
|
|
280
|
-
}
|
|
281
|
-
return Promise.resolve(Auth_1.default.service.tenantId);
|
|
282
|
-
}
|
|
283
|
-
return new Promise((resolve, reject) => {
|
|
284
|
-
if (debug) {
|
|
285
|
-
logger.logToStderr(`No SPO Tenant ID available. Retrieving...`);
|
|
286
|
-
}
|
|
287
|
-
let spoAdminUrl = '';
|
|
288
|
-
this
|
|
289
|
-
.getSpoAdminUrl(logger, debug)
|
|
290
|
-
.then((_spoAdminUrl) => {
|
|
291
|
-
spoAdminUrl = _spoAdminUrl;
|
|
292
|
-
return this.getRequestDigest(spoAdminUrl);
|
|
293
|
-
})
|
|
294
|
-
.then((contextInfo) => {
|
|
295
|
-
const tenantInfoRequestOptions = {
|
|
296
|
-
url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
|
|
297
|
-
headers: {
|
|
298
|
-
'X-RequestDigest': contextInfo.FormDigestValue,
|
|
299
|
-
accept: 'application/json;odata=nometadata'
|
|
300
|
-
},
|
|
301
|
-
data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="4" ObjectPathId="3" /><Query Id="5" ObjectPathId="3"><Query SelectAllProperties="true"><Properties /></Query></Query></Actions><ObjectPaths><Constructor Id="3" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
|
|
302
|
-
};
|
|
303
|
-
return request_1.default.post(tenantInfoRequestOptions);
|
|
304
|
-
})
|
|
305
|
-
.then((res) => {
|
|
306
|
-
const json = JSON.parse(res);
|
|
307
|
-
Auth_1.default.service.tenantId = json[json.length - 1]._ObjectIdentity_.replace('\n', '
');
|
|
308
|
-
return Auth_1.default.storeConnectionInfo();
|
|
309
|
-
})
|
|
310
|
-
.then(() => {
|
|
311
|
-
resolve(Auth_1.default.service.tenantId);
|
|
312
|
-
}, (err) => {
|
|
313
|
-
if (Auth_1.default.service.tenantId) {
|
|
314
|
-
resolve(Auth_1.default.service.tenantId);
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
reject(err);
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
82
|
validateUnknownOptions(options, csomObject, csomPropertyType) {
|
|
323
83
|
const unknownOptions = this.getUnknownOptions(options);
|
|
324
84
|
const optionNames = Object.getOwnPropertyNames(unknownOptions);
|
|
@@ -337,26 +97,6 @@ class SpoCommand extends Command_1.default {
|
|
|
337
97
|
}
|
|
338
98
|
return true;
|
|
339
99
|
}
|
|
340
|
-
/**
|
|
341
|
-
* Combines base and relative url considering any missing slashes
|
|
342
|
-
* @param baseUrl https://contoso.com
|
|
343
|
-
* @param relativeUrl sites/abc
|
|
344
|
-
*/
|
|
345
|
-
urlCombine(baseUrl, relativeUrl) {
|
|
346
|
-
// remove last '/' of base if exists
|
|
347
|
-
if (baseUrl.lastIndexOf('/') === baseUrl.length - 1) {
|
|
348
|
-
baseUrl = baseUrl.substring(0, baseUrl.length - 1);
|
|
349
|
-
}
|
|
350
|
-
// remove '/' at 0
|
|
351
|
-
if (relativeUrl.charAt(0) === '/') {
|
|
352
|
-
relativeUrl = relativeUrl.substring(1, relativeUrl.length);
|
|
353
|
-
}
|
|
354
|
-
// remove last '/' of next if exists
|
|
355
|
-
if (relativeUrl.lastIndexOf('/') === relativeUrl.length - 1) {
|
|
356
|
-
relativeUrl = relativeUrl.substring(0, relativeUrl.length - 1);
|
|
357
|
-
}
|
|
358
|
-
return `${baseUrl}/${relativeUrl}`;
|
|
359
|
-
}
|
|
360
100
|
action(logger, args, cb) {
|
|
361
101
|
Auth_1.default
|
|
362
102
|
.restoreAuth()
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const os = require("os");
|
|
4
4
|
const Auth_1 = require("../../../Auth");
|
|
5
|
+
const cli_1 = require("../../../cli");
|
|
5
6
|
const Command_1 = require("../../../Command");
|
|
6
|
-
const
|
|
7
|
+
const utils_1 = require("../../../utils");
|
|
7
8
|
const commands_1 = require("../commands");
|
|
8
9
|
const packageJSON = require('../../../../package.json');
|
|
9
10
|
class CliDoctorCommand extends Command_1.default {
|
|
@@ -30,9 +31,10 @@ class CliDoctorCommand extends Command_1.default {
|
|
|
30
31
|
cliVersion: packageJSON.version,
|
|
31
32
|
nodeVersion: process.version,
|
|
32
33
|
cliAadAppId: Auth_1.default.service.appId,
|
|
33
|
-
cliAadAppTenant:
|
|
34
|
+
cliAadAppTenant: utils_1.validation.isValidGuid(Auth_1.default.service.tenant) ? 'single' : Auth_1.default.service.tenant,
|
|
34
35
|
authMode: Auth_1.AuthType[Auth_1.default.service.authType],
|
|
35
36
|
cliEnvironment: process.env.CLIMICROSOFT365_ENV ? process.env.CLIMICROSOFT365_ENV : '',
|
|
37
|
+
cliConfig: cli_1.Cli.getInstance().config.all,
|
|
36
38
|
roles: roles,
|
|
37
39
|
scopes: scopes
|
|
38
40
|
};
|