@pnp/cli-microsoft365 4.3.0-beta.fd397f5 → 5.0.0-beta.117f66f
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/README.md +1 -1
- package/dist/appInsights.js +2 -1
- package/dist/cli/Cli.js +22 -3
- package/dist/m365/aad/commands/oauth2grant/oauth2grant-list.js +7 -7
- package/dist/m365/aad/commands/oauth2grant/oauth2grant-remove.js +36 -12
- package/dist/m365/aad/commands/sp/sp-get.js +44 -21
- package/dist/m365/aad/commands/user/user-password-validate.js +42 -0
- package/dist/m365/aad/commands.js +1 -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/pa/commands/app/app-list.js +28 -1
- package/dist/request.js +9 -4
- package/docs/docs/cmd/_global.md +2 -2
- package/docs/docs/cmd/aad/oauth2grant/oauth2grant-list.md +4 -3
- package/docs/docs/cmd/aad/oauth2grant/oauth2grant-remove.md +9 -0
- package/docs/docs/cmd/aad/sp/sp-get.md +2 -1
- 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/pa/app/app-list.md +17 -1
- 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/spfx-doctor.md +1 -1
- package/npm-shrinkwrap.json +603 -743
- package/package.json +18 -15
|
@@ -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.default.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
|
|
@@ -12,8 +12,14 @@ class PaAppListCommand extends AzmgmtItemsListCommand_1.AzmgmtItemsListCommand {
|
|
|
12
12
|
defaultProperties() {
|
|
13
13
|
return ['name', 'displayName'];
|
|
14
14
|
}
|
|
15
|
+
getTelemetryProperties(args) {
|
|
16
|
+
const telemetryProps = super.getTelemetryProperties(args);
|
|
17
|
+
telemetryProps.asAdmin = args.options.asAdmin === true;
|
|
18
|
+
telemetryProps.environment = typeof args.options.environment !== 'undefined';
|
|
19
|
+
return telemetryProps;
|
|
20
|
+
}
|
|
15
21
|
commandAction(logger, args, cb) {
|
|
16
|
-
const url = `${this.resource}providers/Microsoft.PowerApps/apps?api-version=2017-08-01`;
|
|
22
|
+
const url = `${this.resource}providers/Microsoft.PowerApps${args.options.asAdmin ? '/scopes/admin' : ''}${args.options.environment ? '/environments/' + encodeURIComponent(args.options.environment) : ''}/apps?api-version=2017-08-01`;
|
|
17
23
|
this
|
|
18
24
|
.getAllItems(url, logger, true)
|
|
19
25
|
.then(() => {
|
|
@@ -31,6 +37,27 @@ class PaAppListCommand extends AzmgmtItemsListCommand_1.AzmgmtItemsListCommand {
|
|
|
31
37
|
cb();
|
|
32
38
|
}, (rawRes) => this.handleRejectedODataJsonPromise(rawRes, logger, cb));
|
|
33
39
|
}
|
|
40
|
+
options() {
|
|
41
|
+
const options = [
|
|
42
|
+
{
|
|
43
|
+
option: '-e, --environment [environment]'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
option: '--asAdmin'
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
const parentOptions = super.options();
|
|
50
|
+
return options.concat(parentOptions);
|
|
51
|
+
}
|
|
52
|
+
validate(args) {
|
|
53
|
+
if (args.options.asAdmin && !args.options.environment) {
|
|
54
|
+
return 'When specifying the asAdmin option the environment option is required as well';
|
|
55
|
+
}
|
|
56
|
+
if (args.options.environment && !args.options.asAdmin) {
|
|
57
|
+
return 'When specifying the environment option the asAdmin option is required as well';
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
34
61
|
}
|
|
35
62
|
module.exports = new PaAppListCommand();
|
|
36
63
|
//# sourceMappingURL=app-list.js.map
|
package/dist/request.js
CHANGED
|
@@ -16,7 +16,9 @@ class Request {
|
|
|
16
16
|
decompress: true,
|
|
17
17
|
responseType: 'text',
|
|
18
18
|
/* c8 ignore next */
|
|
19
|
-
transformResponse: [data => data]
|
|
19
|
+
transformResponse: [data => data],
|
|
20
|
+
maxBodyLength: Infinity,
|
|
21
|
+
maxContentLength: Infinity
|
|
20
22
|
});
|
|
21
23
|
// since we're stubbing requests, request interceptor is never called in
|
|
22
24
|
// tests, so let's exclude it from coverage
|
|
@@ -64,7 +66,7 @@ class Request {
|
|
|
64
66
|
});
|
|
65
67
|
// since we're stubbing requests, response interceptor is never called in
|
|
66
68
|
// tests, so let's exclude it from coverage
|
|
67
|
-
/* c8 ignore next
|
|
69
|
+
/* c8 ignore next 26 */
|
|
68
70
|
this.req.interceptors.response.use((response) => {
|
|
69
71
|
if (this._logger) {
|
|
70
72
|
this._logger.logToStderr('Response:');
|
|
@@ -73,19 +75,22 @@ class Request {
|
|
|
73
75
|
response.headers['content-type'].indexOf('json') > -1) {
|
|
74
76
|
properties.push('data');
|
|
75
77
|
}
|
|
76
|
-
this._logger.logToStderr(JSON.stringify(Utils_1.default.filterObject(response, properties), null, 2));
|
|
78
|
+
this._logger.logToStderr(JSON.stringify(Object.assign({ url: response.config.url }, Utils_1.default.filterObject(response, properties)), null, 2));
|
|
77
79
|
}
|
|
78
80
|
return response;
|
|
79
81
|
}, (error) => {
|
|
80
82
|
if (this._logger) {
|
|
81
83
|
const properties = ['status', 'statusText', 'headers'];
|
|
82
84
|
this._logger.logToStderr('Request error:');
|
|
83
|
-
this._logger.logToStderr(JSON.stringify(Object.assign(Object.assign({}, Utils_1.default.filterObject(error.response, properties)), { error: error.error }), null, 2));
|
|
85
|
+
this._logger.logToStderr(JSON.stringify(Object.assign(Object.assign({ url: error.config.url }, Utils_1.default.filterObject(error.response, properties)), { error: error.error }), null, 2));
|
|
84
86
|
}
|
|
85
87
|
throw error;
|
|
86
88
|
});
|
|
87
89
|
}
|
|
88
90
|
}
|
|
91
|
+
get logger() {
|
|
92
|
+
return this._logger;
|
|
93
|
+
}
|
|
89
94
|
set logger(logger) {
|
|
90
95
|
this._logger = logger;
|
|
91
96
|
}
|
package/docs/docs/cmd/_global.md
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
: JMESPath query string. See [http://jmespath.org/](http://jmespath.org/) for more information and examples
|
|
6
6
|
|
|
7
7
|
`-o, --output [output]`
|
|
8
|
-
: Output type. `json,text`. Default `
|
|
8
|
+
: Output type. `json,text,csv`. Default `json`
|
|
9
9
|
|
|
10
10
|
`--verbose`
|
|
11
11
|
: Runs command with verbose logging
|
|
12
12
|
|
|
13
13
|
`--debug`
|
|
14
|
-
: Runs command with debug logging
|
|
14
|
+
: Runs command with debug logging
|
|
@@ -10,7 +10,7 @@ m365 aad oauth2grant list [options]
|
|
|
10
10
|
|
|
11
11
|
## Options
|
|
12
12
|
|
|
13
|
-
`-i, --
|
|
13
|
+
`-i, --spObjectId <spObjectId>`
|
|
14
14
|
: objectId of the service principal for which the configured OAuth2 permission grants should be retrieved
|
|
15
15
|
|
|
16
16
|
--8<-- "docs/cmd/_global.md"
|
|
@@ -26,9 +26,10 @@ When using the text output type (default), the command lists only the values of
|
|
|
26
26
|
List OAuth2 permissions granted to service principal with `objectId` _b2307a39-e878-458b-bc90-03bc578531d6_.
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
|
-
m365 aad oauth2grant list --
|
|
29
|
+
m365 aad oauth2grant list --spObjectId b2307a39-e878-458b-bc90-03bc578531d6
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## More information
|
|
33
33
|
|
|
34
|
-
- Application and service principal objects in Azure Active Directory (Azure AD): [https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects)
|
|
34
|
+
- Application and service principal objects in Azure Active Directory (Azure AD): [https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects)
|
|
35
|
+
- List oauth2PermissionGrants: [https://docs.microsoft.com/en-us/graph/api/oauth2permissiongrant-list?view=graph-rest-1.0](https://docs.microsoft.com/en-us/graph/api/oauth2permissiongrant-list?view=graph-rest-1.0)
|
|
@@ -13,6 +13,9 @@ m365 aad oauth2grant remove [options]
|
|
|
13
13
|
`-i, --grantId <grantId>`
|
|
14
14
|
: `objectId` of OAuth2 permission grant to remove
|
|
15
15
|
|
|
16
|
+
`--confirm`
|
|
17
|
+
: Do not prompt for confirmation before removing OAuth2 permission grant
|
|
18
|
+
|
|
16
19
|
--8<-- "docs/cmd/_global.md"
|
|
17
20
|
|
|
18
21
|
## Remarks
|
|
@@ -33,6 +36,12 @@ Remove the OAuth2 permission grant with ID _YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXk
|
|
|
33
36
|
m365 aad oauth2grant remove --grantId YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek
|
|
34
37
|
```
|
|
35
38
|
|
|
39
|
+
Remove the OAuth2 permission grant with ID _YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek_ without being asked for confirmation
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
m365 aad oauth2grant remove --grantId YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek --confirm
|
|
43
|
+
```
|
|
44
|
+
|
|
36
45
|
## More information
|
|
37
46
|
|
|
38
47
|
- Application and service principal objects in Azure Active Directory (Azure AD): [https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects)
|
|
@@ -47,4 +47,5 @@ m365 aad sp get --objectId b2307a39-e878-458b-bc90-03bc578531dd
|
|
|
47
47
|
|
|
48
48
|
## More information
|
|
49
49
|
|
|
50
|
-
- Application and service principal objects in Azure Active Directory (Azure AD): [https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects)
|
|
50
|
+
- Application and service principal objects in Azure Active Directory (Azure AD): [https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects)
|
|
51
|
+
- Get servicePrincipal: [https://docs.microsoft.com/en-us/graph/api/serviceprincipal-get?view=graph-rest-1.0](https://docs.microsoft.com/en-us/graph/api/serviceprincipal-get?view=graph-rest-1.0)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# aad user password validate
|
|
2
|
+
|
|
3
|
+
Check a user's password against the organization's password validation policy
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
m365 aad user password validate [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|
|
13
|
+
`-p, --password <password>`
|
|
14
|
+
: The password to be validated.
|
|
15
|
+
|
|
16
|
+
--8<-- "docs/cmd/_global.md"
|
|
17
|
+
|
|
18
|
+
## Remarks
|
|
19
|
+
|
|
20
|
+
!!! attention
|
|
21
|
+
This command is based on an API that is currently in preview and is subject to change once the API reached general availability.
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
Validate password _cli365P@ssW0rd_ against the organization's password validation policy
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
m365 aad user password validate --password "cli365P@ssW0rd"
|
|
29
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# app permission list
|
|
2
|
+
|
|
3
|
+
Lists API permissions for the current AAD app
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
m365 app permission list [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|
|
13
|
+
`--appId [appId]`
|
|
14
|
+
: Client ID of the Azure AD app registered in the .m365rc.json file to retrieve API permissions for
|
|
15
|
+
|
|
16
|
+
--8<-- "docs/cmd/_global.md"
|
|
17
|
+
|
|
18
|
+
## Remarks
|
|
19
|
+
|
|
20
|
+
Use this command to quickly look up API permissions for the Azure AD application registration registered in the .m365rc.json file in your current project (folder).
|
|
21
|
+
|
|
22
|
+
If you have multiple apps registered in your .m365rc.json file, you can specify the app for which you'd like to retrieve permissions using the `--appId` option. If you don't specify the app using the `--appId` option, you'll be prompted to select one of the applications from your .m365rc.json file.
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
Retrieve API permissions for your current Azure AD app
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
m365 app permission list
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Retrieve API permissions for the Azure AD app with client ID _e23d235c-fcdf-45d1-ac5f-24ab2ee0695d_ specified in the _.m365rc.json_ file
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
m365 app permission list --appId e23d235c-fcdf-45d1-ac5f-24ab2ee0695d
|
|
36
|
+
```
|
|
@@ -10,6 +10,12 @@ pa app list [options]
|
|
|
10
10
|
|
|
11
11
|
## Options
|
|
12
12
|
|
|
13
|
+
`-e, --environment [environment]`
|
|
14
|
+
: The name of the environment for which to retrieve available apps
|
|
15
|
+
|
|
16
|
+
`--asAdmin`
|
|
17
|
+
: Set, to list all Power Apps as admin. Otherwise will return only your own apps
|
|
18
|
+
|
|
13
19
|
--8<-- "docs/cmd/_global.md"
|
|
14
20
|
|
|
15
21
|
## Remarks
|
|
@@ -17,10 +23,20 @@ pa app list [options]
|
|
|
17
23
|
!!! attention
|
|
18
24
|
This command is based on an API that is currently in preview and is subject to change once the API reaches general availability.
|
|
19
25
|
|
|
26
|
+
If the environment with the name you specified doesn't exist, you will get the `Access to the environment 'xyz' is denied.` error.
|
|
27
|
+
|
|
28
|
+
By default, the `app list` command returns only your apps. To list all apps, use the `asAdmin` option and make sure to specify the `environment` option. You cannot specify only one of the options, when specifying the `environment` option the `asAdmin` option has to be present as well.
|
|
29
|
+
|
|
20
30
|
## Examples
|
|
21
31
|
|
|
22
|
-
List all apps
|
|
32
|
+
List all your apps
|
|
23
33
|
|
|
24
34
|
```sh
|
|
25
35
|
m365 pa app list
|
|
26
36
|
```
|
|
37
|
+
|
|
38
|
+
List all apps in a given environment
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
m365 pa app list --environment Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --asAdmin
|
|
42
|
+
```
|
|
@@ -20,7 +20,7 @@ m365 spfx project externalize [options]
|
|
|
20
20
|
: JMESPath query string. See [http://jmespath.org/](http://jmespath.org/) for more information and examples
|
|
21
21
|
|
|
22
22
|
`-o, --output [output]`
|
|
23
|
-
: Output type. `json,text,md`. Default `
|
|
23
|
+
: Output type. `json,text,csv,md`. Default `json`
|
|
24
24
|
|
|
25
25
|
`--verbose`
|
|
26
26
|
: Runs command with verbose logging
|
|
@@ -23,7 +23,7 @@ m365 spfx project rename [options]
|
|
|
23
23
|
: JMESPath query string. See [http://jmespath.org/](http://jmespath.org/) for more information and examples
|
|
24
24
|
|
|
25
25
|
`-o, --output [output]`
|
|
26
|
-
: Output type. `json,text,md`. Default `
|
|
26
|
+
: Output type. `json,text,csv,md`. Default `json`
|
|
27
27
|
|
|
28
28
|
`--verbose`
|
|
29
29
|
: Runs command with verbose logging
|
|
@@ -20,7 +20,7 @@ m365 spfx doctor [options]
|
|
|
20
20
|
: JMESPath query string. See [http://jmespath.org/](http://jmespath.org/) for more information and examples
|
|
21
21
|
|
|
22
22
|
`-o, --output [output]`
|
|
23
|
-
: Output type. `json,text,md`. Default `
|
|
23
|
+
: Output type. `json,text,csv,md`. Default `json`
|
|
24
24
|
|
|
25
25
|
`--verbose`
|
|
26
26
|
: Runs command with verbose logging
|