From 0c31d734f3c62954e4776f96a75f6fb473f22ed3 Mon Sep 17 00:00:00 2001 From: ChrisHutto <89927510+asur1on@users.noreply.github.com> Date: Tue, 26 Dec 2023 09:21:05 -0600 Subject: [PATCH 1/2] MSGraphForSharePoint: Feature - copy item, create folder, list drive children actions (#13) * Add files via upload * update readme and copy item * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Readd the changes of features * Update line indentation * Update indentation of all files * All changes * Add drive id in columns * Update vault fix * Update parameter name * Update vault issue * Add extra line * Update column name * JSON changes * Update app version * Review changes * Updated verbose and description --------- Co-authored-by: achandya --- LICENSE | 2 +- README.md | 61 +- msgraphforsharepoint.json | 885 +++++++++++++++++++- msgraphforsharepoint_connector.py | 109 ++- msgraphforsharepoint_consts.py | 5 + release_notes/unreleased.md | 4 + wheels/py3/soupsieve-2.4.1-py3-none-any.whl | Bin 36379 -> 0 bytes wheels/py3/soupsieve-2.5-py3-none-any.whl | Bin 0 -> 36131 bytes 8 files changed, 1050 insertions(+), 16 deletions(-) delete mode 100644 wheels/py3/soupsieve-2.4.1-py3-none-any.whl create mode 100644 wheels/py3/soupsieve-2.5-py3-none-any.whl diff --git a/LICENSE b/LICENSE index 573247f..75631d4 100644 --- a/LICENSE +++ b/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/README.md b/README.md index 38d6504..10f46de 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,9 @@ VARIABLE | REQUIRED | TYPE | DESCRIPTION ### Supported Actions [test connectivity](#action-test-connectivity) - Validate the asset configuration for connectivity using supplied configuration +[copy item](#action-copy-item) - Asynchronously creates a copy of an driveItem (including any children), under a new parent item or with a new name +[create folder](#action-create-folder) - Create a new folder or DriveItem in a Drive with a specified parent item or path +[list drive children](#action-list-drive-children) - Return a collection of DriveItems in the children relationship of a DriveItem [list sites](#action-list-sites) - Fetch the details of the SharePoint sites [list lists](#action-list-lists) - Fetch the available lists under a SharePoint site [get list](#action-get-list) - Retrieves a list from a SharePoint Site @@ -176,6 +179,62 @@ No parameters are required for this action #### Action Output No Output +## action: 'copy item' +Asynchronously creates a copy of an driveItem (including any children), under a new parent item or with a new name + +Type: **generic** +Read only: **False** + +### Action Parameters +PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS +--------- | -------- | ----------- | ---- | -------- +**source_item_id** | required | ID for item that needs to be copied | string | `sharepoint item id` +**dest_drive_id** | required | Drive ID of folder that holds item to be copied | string | `sharepoint drive id` +**dest_folder_id** | required | Drive ID of folder to copy item into. If left blank will copy into source folder | string | `sharepoint drive id` +**file_name** | optional | Optional new file name for the copied item. If not provided will use orginal file name | string | + +#### Action Output +DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES +--------- | ---- | -------- | -------------- +action_result.status | string | | success failed + +### action: 'create folder' +Create new Drive item Folder using SharePoint site in asset config and provided Parent Item ID + +Type: **generic** +Read only: **False** + +### Action Parameters +PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS +--------- | -------- | ----------- | ---- | -------- +**item_id** | required | Parent item ID to create folder in | string | `item id` +**folder_name** | required | Name of newly created folder | string | + +#### Action Output +DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES +--------- | ---- | -------- | -------------- +action_result.parameter.folder_name | string | | +action_result.data.\*.id | string | item id | +action_result.data.\*.webUrl | string | url | + +### action: 'list drive children' +Return a collection of DriveItems in the children relationship of a DriveItem + +Type: **investigate** +Read only: **True** + +### Action Parameters +PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS +--------- | -------- | ----------- | ---- | -------- +**drive_id** | required | ID of the Drive to list children of | string | `sharepoint drive id` + +#### Action Output +DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES +--------- | ---- | -------- | -------------- +action_result.data.\*.id | string | item id | `sharepoint item id` +action_result.data.\*.name | string | | +action_result.data.\*.webUrl | string | url | + ## action: 'list sites' Fetch the details of the SharePoint sites @@ -608,4 +667,4 @@ action_result.data | string | | action_result.summary | string | | action_result.message | string | | Successfully deleted file summary.total_objects | numeric | | 1 -summary.total_objects_successful | numeric | | 1 \ No newline at end of file +summary.total_objects_successful | numeric | | 1 diff --git a/msgraphforsharepoint.json b/msgraphforsharepoint.json index 84316fd..20d2570 100644 --- a/msgraphforsharepoint.json +++ b/msgraphforsharepoint.json @@ -11,20 +11,23 @@ "product_version_regex": ".*", "publisher": "Splunk", "license": "Copyright (c) 2022-2023 Splunk Inc.", - "app_version": "1.3.0", + "app_version": "1.4.0", "utctime_updated": "2022-02-11T08:37:12.891220Z", "package_name": "phantom_msgraphforsharepoint", "main_module": "msgraphforsharepoint_connector.py", "rest_handler": "msgraphforsharepoint_connector.handle_request", "fips_compliant": true, - "min_phantom_version": "6.1.0", + "min_phantom_version": "6.1.1", "contributors": [ { "name": "import-au" + }, + { + "name": "Chris Hutto" } ], "latest_tested_versions": [ - "SharePoint Cloud: 20 September, 2023" + "SharePoint Cloud: 18 December, 2023" ], "app_wizard_version": "1.0.0", "configuration": { @@ -40,7 +43,7 @@ "order": 1 }, "endpoint_test_connectivity": { - "description": "Endpoint for test connectivity", + "description": "Endpoint for test connectivity (Valid format: /sites/{hostname}:/{site-server-relative-url})", "data_type": "string", "order": 2, "default": "/sites/root" @@ -74,6 +77,793 @@ "read_only": true, "versions": "EQ(*)" }, + { + "action": "copy drive item", + "identifier": "copy_drive_item", + "description": "Using SharePoint Site ID app config value, and given source_drive_id, copy source_item_id into a folder identified with dest values", + "verbose": "While copying the file if file_name is provided without file extension, the copied file will not have any extension.", + "type": "generic", + "read_only": false, + "parameters": { + "source_item_id": { + "description": "ID for drive item that needs to be copied", + "data_type": "string", + "required": true, + "order": 0, + "contains": [ + "sharepoint drive item id" + ], + "primary": true + }, + "dest_drive_id": { + "description": "Drive ID that contains target folder to copy item to", + "data_type": "string", + "required": true, + "order": 1, + "primary": true, + "contains": [ + "sharepoint drive id" + ] + }, + "dest_folder_id": { + "description": "ID of target folder to copy drive item to", + "data_type": "string", + "required": true, + "order": 2, + "contains": [ + "sharepoint drive item id" + ], + "primary": true + }, + "file_name": { + "description": "Optional new folder/file name for the copy. If not provided will use the original name", + "data_type": "string", + "order": 3 + } + }, + "output": [ + { + "data_path": "action_result.status", + "data_type": "string", + "column_name": "Status", + "column_order": 0, + "example_values": [ + "success", + "failed" + ] + }, + { + "data_path": "action_result.parameter.dest_drive_id", + "data_type": "string", + "example_values": [ + "b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi" + ], + "contains": [ + "sharepoint drive id" + ] + }, + { + "data_path": "action_result.parameter.dest_folder_id", + "data_type": "string", + "example_values": [ + "01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.parameter.file_name", + "data_type": "string", + "example_values": [ + "test_file_name" + ] + }, + { + "data_path": "action_result.parameter.source_item_id", + "data_type": "string", + "example_values": [ + "01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data", + "data_type": "string" + }, + { + "data_path": "action_result.summary", + "data_type": "string" + }, + { + "data_path": "action_result.message", + "data_type": "string", + "example_values": [ + "Successfully copied an item" + ] + }, + { + "data_path": "summary.total_objects", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "summary.total_objects", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "summary.total_objects_successful", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "summary.total_objects_successful", + "data_type": "numeric", + "example_values": [ + 1 + ] + } + ], + "render": { + "type": "table" + }, + "versions": "EQ(*)" + }, + { + "action": "create folder", + "identifier": "create_folder", + "description": "Create new Drive item Folder using SharePoint site in asset config and provided Parent Item ID", + "type": "generic", + "read_only": false, + "parameters": { + "parent_item_id": { + "description": "Parent Drive Item ID", + "data_type": "string", + "required": true, + "order": 0, + "contains": [ + "sharepoint drive item id" + ], + "primary": true + }, + "folder_name": { + "description": "Name of newly created folder", + "data_type": "string", + "required": true, + "order": 1 + } + }, + "output": [ + { + "data_path": "action_result.status", + "data_type": "string", + "example_values": [ + "success", + "failed" + ] + }, + { + "data_path": "action_result.parameter.folder_name", + "data_type": "string", + "column_name": "Created Folder Name", + "column_order": 0, + "example_values": [ + "Test_folder" + ] + }, + { + "data_path": "action_result.parameter.parent_item_id", + "data_type": "string", + "example_values": [ + "01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.@odata.context", + "data_type": "string", + "example_values": [ + "https://test.microsoft.com/v1.0/$metadata#sites('test.sharepoint.com%2Cdc6f43e9-54fa-4a39-8783-314e3bbbed41%2Cc42b48c4-59b9-48f1-b96e-e8145b5539fa')/drive/items('01SNFLYIVBMJQZCZK6ZFAZ5PVEXODNRV3N')/children/$entity" + ] + }, + { + "data_path": "action_result.data.*.@odata.etag", + "data_type": "string", + "example_values": [ + "\"{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},1\"" + ] + }, + { + "data_path": "action_result.data.*.cTag", + "data_type": "string", + "example_values": [ + "\"c:{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},0\"" + ] + }, + { + "data_path": "action_result.data.*.commentSettings.commentingDisabled.isDisabled", + "data_type": "boolean", + "example_values": [ + true, + false + ] + }, + { + "data_path": "action_result.data.*.createdBy.application.displayName", + "data_type": "string", + "example_values": [ + "sharepoint_test" + ] + }, + { + "data_path": "action_result.data.*.createdBy.application.id", + "data_type": "string", + "example_values": [ + "71b307af-1dcb-4e39-9640-5129afc83162" + ] + }, + { + "data_path": "action_result.data.*.createdBy.user.displayName", + "data_type": "string", + "example_values": [ + "SharePoint App" + ] + }, + { + "data_path": "action_result.data.*.createdDateTime", + "data_type": "string", + "example_values": [ + "2023-10-25T08:55:48Z" + ] + }, + { + "data_path": "action_result.data.*.eTag", + "data_type": "string", + "example_values": [ + "\"{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},1\"" + ] + }, + { + "data_path": "action_result.data.*.fileSystemInfo.createdDateTime", + "data_type": "string", + "example_values": [ + "2023-10-25T08:55:48Z" + ] + }, + { + "data_path": "action_result.data.*.fileSystemInfo.lastModifiedDateTime", + "data_type": "string", + "example_values": [ + "2023-10-25T08:55:48Z" + ] + }, + { + "data_path": "action_result.data.*.folder.childCount", + "data_type": "numeric", + "example_values": [ + 0 + ] + }, + { + "data_path": "action_result.data.*.id", + "data_type": "string", + "column_name": "Created Drive Item ID", + "column_order": 1, + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.application.displayName", + "data_type": "string", + "example_values": [ + "sharepoint_test" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.application.id", + "data_type": "string", + "example_values": [ + "71b307af-1dcb-4e39-9640-5129afc83162" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.user.displayName", + "data_type": "string", + "example_values": [ + "SharePoint App" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedDateTime", + "data_type": "string", + "example_values": [ + "2023-10-25T08:55:48Z" + ] + }, + { + "data_path": "action_result.data.*.name", + "data_type": "string", + "example_values": [ + "test2" + ] + }, + { + "data_path": "action_result.data.*.parentReference.driveId", + "data_type": "string", + "example_values": [ + "b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi" + ], + "contains": [ + "sharepoint drive id" + ], + "column_name": "Drive ID", + "column_order": 3 + }, + { + "data_path": "action_result.data.*.parentReference.driveType", + "data_type": "string", + "example_values": [ + "documentLibrary" + ] + }, + { + "data_path": "action_result.data.*.parentReference.id", + "data_type": "string", + "example_values": [ + "01SNFLYIVBMJQZCZK6ZFAZ5PVEXODNRV3N" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.parentReference.path", + "data_type": "string", + "example_values": [ + "/drives/b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi/root:/SizeTest-Playbook-Don't Delete" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.listId", + "data_type": "string", + "example_values": [ + "498fd15d-ef79-4c0b-8ac4-c4ea27ed8be2" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.listItemUniqueId", + "data_type": "string", + "example_values": [ + "916162a1-5e65-41c9-9ebe-a4bb86d8d76d" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.siteId", + "data_type": "string", + "example_values": [ + "dc6f43e9-54fa-4a39-8783-314e3bbbed41" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.siteUrl", + "data_type": "string", + "example_values": [ + "https://test.sharepoint.com/sites/TestSite" + ], + "contains": [ + "url" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.tenantId", + "data_type": "string", + "example_values": [ + "140fe46d-819d-4b6d-b7ef-1c0a8270f4f0" + ] + }, + { + "data_path": "action_result.data.*.parentReference.sharepointIds.webId", + "data_type": "string", + "example_values": [ + "c42b48c4-59b9-48f1-b96e-e8145b5539fa" + ] + }, + { + "data_path": "action_result.data.*.shared.scope", + "data_type": "string", + "example_values": [ + "unknown" + ] + }, + { + "data_path": "action_result.data.*.size", + "data_type": "numeric", + "example_values": [ + 0 + ] + }, + { + "data_path": "action_result.data.*.webUrl", + "data_type": "string", + "column_name": "Web URL", + "column_order": 2, + "contains": [ + "url" + ] + }, + { + "data_path": "action_result.summary", + "data_type": "string" + }, + { + "data_path": "action_result.message", + "data_type": "string", + "example_values": [ + "Successfully created a folder" + ] + }, + { + "data_path": "summary.total_objects", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "summary.total_objects_successful", + "data_type": "numeric", + "example_values": [ + 1 + ] + } + ], + "render": { + "type": "table" + }, + "versions": "EQ(*)" + }, + { + "action": "list drive children", + "identifier": "list_drive_children", + "description": "List the items in a drive folder by drive ID or search for a specific file name if provided", + "type": "investigate", + "read_only": true, + "parameters": { + "drive_id": { + "description": "ID of drive to list", + "data_type": "string", + "required": true, + "order": 0, + "primary": true, + "contains": [ + "sharepoint drive id" + ] + } + }, + "output": [ + { + "data_path": "action_result.status", + "data_type": "string", + "example_values": [ + "success", + "failed" + ] + }, + { + "data_path": "action_result.parameter.drive_id", + "data_type": "string", + "example_values": [ + "b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi" + ], + "contains": [ + "sharepoint drive id" + ] + }, + { + "data_path": "action_result.data.*.@microsoft.graph.downloadUrl", + "data_type": "string", + "example_values": [ + "https://test.sharepoint.com/sites/Test/_layouts/15/download.aspx?UniqueId=d5bfdd47-e0e8-4a7e-99a3-c96f30191b12&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvcGhhbnRvbWVuZ2luZWVyaW5nMi5zaGFyZXBvaW50LmNvbUAxNDBmZTQ2ZC04MTlkLTRiNmQtYjdlZi0xYzBhODI3MGY0ZjAiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNjk5MjU1NDY4IiwiZXhwIjoiMTY5OTI1OTA2OCIsImVuZHBvaW50dXJsIjoiM1hObzdUK3U4YnFXUU1DTko0OXdiQXVDZ01ad0FNRDh3ckZvVC9yWkxKbz0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE0OCIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiUS9ZVVdDcFQvMEsrQThFOWtxeEIvQT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6IlpHTTJaalF6WlRrdE5UUm1ZUzAwWVRNNUxUZzNPRE10TXpFMFpUTmlZbUpsWkRReCIsImFwcF9kaXNwbGF5bmFtZSI6ImlnaGVsYW5pX3NoYXJlcG9pbnRfdGVzdCIsIm5hbWVpZCI6IjcxYjMwN2FmLTFkY2ItNGUzOS05NjQwLTUxMjlhZmM4MzE2MkAxNDBmZTQ2ZC04MTlkLTRiNmQtYjdlZi0xYzBhODI3MGY0ZjAiLCJyb2xlcyI6ImFsbGZpbGVzLndyaXRlIHNlbGVjdGVkc2l0ZXMgZ3JvdXAucmVhZCBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGdyb3VwLndyaXRlIGFsbGZpbGVzLnJlYWQgYWxsc2l0ZXMuZnVsbGNvbnRyb2wgYWxscHJvZmlsZXMucmVhZCIsInR0IjoiMSIsImlwYWRkciI6IjQwLjEyNi40LjQwIn0.y13AkyxdRPgziPhIV8_FFBGjtZGHgNpgkW0GU7MMUfA&ApiVersion=2.0" + ], + "contains": [ + "url" + ] + }, + { + "data_path": "action_result.data.*.image.width", + "data_type": "numeric", + "example_values": [ + 1752 + ] + }, + { + "data_path": "action_result.data.*.image.height", + "data_type": "numeric", + "example_values": [ + 1244 + ] + }, + { + "data_path": "action_result.data.*.cTag", + "data_type": "string", + "example_values": [ + "\"c:{E1E93D43-F034-489F-8304-BAF7F064A30D},0\"" + ] + }, + { + "data_path": "action_result.data.*.createdBy.application.displayName", + "data_type": "string", + "example_values": [ + "Yammer" + ] + }, + { + "data_path": "action_result.data.*.createdBy.application.id", + "data_type": "string", + "example_values": [ + "00000005-0000-0ff1-ce00-000000000000" + ] + }, + { + "data_path": "action_result.data.*.createdBy.user.displayName", + "data_type": "string", + "example_values": [ + "SharePoint App" + ] + }, + { + "data_path": "action_result.data.*.createdBy.user.email", + "data_type": "string", + "example_values": [ + "test@gmail.com" + ] + }, + { + "data_path": "action_result.data.*.createdBy.user.id", + "data_type": "string", + "example_values": [ + "eeb3645f-df19-47a1-8e8c-fcd234cb5f6f" + ] + }, + { + "data_path": "action_result.data.*.createdDateTime", + "data_type": "string", + "example_values": [ + "2020-07-28T20:15:33Z" + ] + }, + { + "data_path": "action_result.data.*.decorator.iconColor", + "data_type": "string", + "example_values": [ + "darkGreen" + ] + }, + { + "data_path": "action_result.data.*.eTag", + "data_type": "string", + "example_values": [ + "\"{E1E93D43-F034-489F-8304-BAF7F064A30D},1\"" + ] + }, + { + "data_path": "action_result.data.*.file.hashes.quickXorHash", + "data_type": "string", + "example_values": [ + "8JpxaQB3wX1/FkQ5Gt3prUbUUFU=" + ] + }, + { + "data_path": "action_result.data.*.file.mimeType", + "data_type": "string", + "example_values": [ + "application/vnd.ms-excel" + ] + }, + { + "data_path": "action_result.data.*.fileSystemInfo.createdDateTime", + "data_type": "string", + "example_values": [ + "2020-07-28T20:15:33Z" + ] + }, + { + "data_path": "action_result.data.*.fileSystemInfo.lastModifiedDateTime", + "data_type": "string", + "example_values": [ + "2020-07-28T20:15:33Z" + ] + }, + { + "data_path": "action_result.data.*.folder.childCount", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "action_result.data.*.id", + "data_type": "string", + "column_name": "Drive Item ID", + "column_order": 0, + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.application.displayName", + "data_type": "string", + "example_values": [ + "Yammer" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.application.id", + "data_type": "string", + "example_values": [ + "00000005-0000-0ff1-ce00-000000000000" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.user.displayName", + "data_type": "string", + "example_values": [ + "SharePoint App" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.user.email", + "data_type": "string", + "example_values": [ + "test@gmail.com" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedBy.user.id", + "data_type": "string", + "example_values": [ + "eeb3645f-df19-47a1-8e8c-fcd234cb5f6f" + ] + }, + { + "data_path": "action_result.data.*.lastModifiedDateTime", + "data_type": "string", + "example_values": [ + "2020-07-28T20:15:33Z" + ] + }, + { + "data_path": "action_result.data.*.name", + "data_type": "string", + "column_name": "Item Name", + "column_order": 1 + }, + { + "data_path": "action_result.data.*.parentReference.driveId", + "data_type": "string", + "example_values": [ + "b!P_PLxcYmjkiP68Fx-chtHkdhtZd0TeZPokKrsyopCWbKblNpI0pzRa5Mk398L4cc" + ], + "contains": [ + "sharepoint drive id" + ], + "column_name": "Drive ID", + "column_order": 3 + }, + { + "data_path": "action_result.data.*.parentReference.driveType", + "data_type": "string", + "example_values": [ + "documentLibrary" + ] + }, + { + "data_path": "action_result.data.*.parentReference.id", + "data_type": "string", + "example_values": [ + "01WJINUWV6Y2GOVW7725BZO354PWSELRRZ" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.parentReference.name", + "data_type": "string", + "example_values": [ + "Shared Documents" + ] + }, + { + "data_path": "action_result.data.*.parentReference.path", + "data_type": "string", + "example_values": [ + "/drives/b!P_PLxcYmjkiP68Fx-chtHkdhtZd0TeZPokKrsyopCWbKblNpI0pzRa5Mk398L4cc/root:" + ] + }, + { + "data_path": "action_result.data.*.parentReference.siteId", + "data_type": "string", + "example_values": [ + "c5cbf33f-26c6-488e-8feb-c171f9c86d1e" + ] + }, + { + "data_path": "action_result.data.*.shared.scope", + "data_type": "string", + "example_values": [ + "users" + ] + }, + { + "data_path": "action_result.data.*.size", + "data_type": "numeric", + "example_values": [ + 775 + ] + }, + { + "data_path": "action_result.data.*.specialFolder.name", + "data_type": "string", + "example_values": [ + "apps" + ] + }, + { + "data_path": "action_result.data.*.webUrl", + "data_type": "string", + "column_name": "Web URL", + "column_order": 2, + "contains": [ + "url" + ] + }, + { + "data_path": "action_result.summary.drive_children_count", + "data_type": "numeric", + "example_values": [ + 2 + ] + }, + { + "data_path": "action_result.message", + "data_type": "string", + "example_values": [ + "Drive children count: 2" + ] + }, + { + "data_path": "summary.total_objects", + "data_type": "numeric", + "example_values": [ + 1 + ] + }, + { + "data_path": "summary.total_objects_successful", + "data_type": "numeric", + "example_values": [ + 1 + ] + } + ], + "render": { + "type": "table" + }, + "versions": "EQ(*)" + }, { "action": "list sites", "identifier": "list_sites", @@ -129,6 +919,14 @@ "column_name": "Sharepoint Site ID", "column_order": 1 }, + { + "data_path": "action_result.data.*.isPersonalSite", + "data_type": "boolean", + "example_values": [ + true, + false + ] + }, { "data_path": "action_result.data.*.lastModifiedDateTime", "data_type": "string", @@ -1416,6 +2214,14 @@ "data_path": "action_result.data.*.fields.AppEditorLookupId", "data_type": "string" }, + { + "data_path": "action_result.data.*.fields.Approved", + "data_type": "boolean", + "example_values": [ + true, + false + ] + }, { "data_path": "action_result.data.*.fields.AssetType", "data_type": "string", @@ -1425,7 +2231,11 @@ }, { "data_path": "action_result.data.*.fields.Attachments", - "data_type": "numeric" + "data_type": "boolean", + "example_values": [ + true, + false + ] }, { "data_path": "action_result.data.*.fields.AuthorLookupId", @@ -1569,6 +2379,13 @@ "Test Title" ] }, + { + "data_path": "action_result.data.*.fields.TravelDuration", + "data_type": "string", + "example_values": [ + "0" + ] + }, { "data_path": "action_result.data.*.fields._ComplianceFlags", "data_type": "string" @@ -1800,7 +2617,11 @@ }, { "data_path": "action_result.data.*.fields.Attachments", - "data_type": "numeric" + "data_type": "boolean", + "example_values": [ + true, + false + ] }, { "data_path": "action_result.data.*.fields.AuthorLookupId", @@ -2102,6 +2923,20 @@ "url" ] }, + { + "data_path": "action_result.data.*.image.width", + "data_type": "numeric", + "example_values": [ + 256 + ] + }, + { + "data_path": "action_result.data.*.image.height", + "data_type": "numeric", + "example_values": [ + 266 + ] + }, { "data_path": "action_result.data.*.cTag", "data_type": "string", @@ -2183,7 +3018,10 @@ "example_values": [ "01SNFLYIXAWJB4P2ZWTJGJZYAZBQX5JXMX" ], - "column_name": "Item ID", + "contains": [ + "sharepoint drive item id" + ], + "column_name": "Drive Item ID", "column_order": 0 }, { @@ -2231,7 +3069,12 @@ "data_type": "string", "example_values": [ "b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi" - ] + ], + "contains": [ + "sharepoint drive id" + ], + "column_name": "Drive ID", + "column_order": 3 }, { "data_path": "action_result.data.*.parentReference.driveType", @@ -2245,6 +3088,16 @@ "data_type": "string", "example_values": [ "01SNFLYIRDSQLQVWP7EVDKSL3YYUNW6I4G" + ], + "contains": [ + "sharepoint drive item id" + ] + }, + { + "data_path": "action_result.data.*.parentReference.name", + "data_type": "string", + "example_values": [ + "Playbook-Folder" ] }, { @@ -2254,6 +3107,20 @@ "/drive/root:/test_folder_name" ] }, + { + "data_path": "action_result.data.*.parentReference.siteId", + "data_type": "string", + "example_values": [ + "dc6f43e9-54fa-4a39-8783-314e3bbbed41" + ] + }, + { + "data_path": "action_result.data.*.shared.scope", + "data_type": "string", + "example_values": [ + "users" + ] + }, { "data_path": "action_result.data.*.size", "data_type": "numeric", @@ -2413,7 +3280,7 @@ }, { "module": "soupsieve", - "input_file": "wheels/py3/soupsieve-2.4.1-py3-none-any.whl" + "input_file": "wheels/py3/soupsieve-2.5-py3-none-any.whl" } ] } diff --git a/msgraphforsharepoint_connector.py b/msgraphforsharepoint_connector.py index 1477d27..7570ad5 100644 --- a/msgraphforsharepoint_connector.py +++ b/msgraphforsharepoint_connector.py @@ -29,6 +29,7 @@ from phantom.action_result import ActionResult from phantom.base_connector import BaseConnector from phantom.vault import Vault +from phantom_common import paths from msgraphforsharepoint_consts import * @@ -271,7 +272,7 @@ def _validate_integer(self, action_result, parameter, key, allow_zero=True): return phantom.APP_SUCCESS, parameter def _process_empty_response(self, response, action_result): - if response.status_code in [200, 204]: + if response.status_code in [200, 202, 204]: return RetVal(phantom.APP_SUCCESS, {}) return RetVal( @@ -418,7 +419,8 @@ def _make_rest_call( if hasattr(Vault, 'get_vault_tmp_dir'): fd, tmp_file_path = tempfile.mkstemp(dir=Vault.get_vault_tmp_dir()) else: - fd, tmp_file_path = tempfile.mkstemp(dir='/opt/phantom/vault/tmp') + vault_tmp = os.path.join(paths.PHANTOM_VAULT, "tmp") + fd, tmp_file_path = tempfile.mkstemp(dir=vault_tmp) os.close(fd) r = request_func(endpoint, json=json, data=data, headers=headers, params=params, stream=True) @@ -756,15 +758,106 @@ def _handle_update_item(self, param): return action_result.set_status(phantom.APP_SUCCESS) - def _handle_list_sites(self, param): + def _handle_list_drive_children(self, param): + action_result = self.add_action_result(ActionResult(dict(param))) + + endpoint = MS_DRIVES_ROOT_ENDPOINT.format( + self._site_id + ) + "/{0}/items/root/children".format(param["drive_id"]) + + ret_val, children = self._paginator(action_result, endpoint) + + if phantom.is_fail(ret_val): + return action_result.get_status() + + for child in children: + action_result.add_data(child) + + summary = action_result.update_summary({}) + summary[MS_SHAREPOINT_JSON_DRIVE_CHILDREN_COUNT] = action_result.get_data_size() + + return action_result.set_status(phantom.APP_SUCCESS) + def _handle_copy_drive_item(self, param): action_result = self.add_action_result(ActionResult(dict(param))) - ret_val, limit = self._validate_integer(action_result, param.get(MS_SHAREPOINT_JSON_LIMIT), MS_SHAREPOINT_LIMIT_KEY, False) + endpoint = MS_DRIVE_ROOT_ENDPOINT.format( + self._site_id + ) + MS_DRIVE_COPY_ITEM_ENDPOINT.format(param["source_item_id"]) + + dest_drive_id = param.get("dest_drive_id", "") + dest_folder_id = param.get("dest_folder_id", "") + file_name = param.get("file_name", "") + + if file_name: + data = { + "parentReference": {"driveId": dest_drive_id, "id": dest_folder_id}, + "name": file_name, + } + else: + data = { + "parentReference": {"driveId": dest_drive_id, "id": dest_folder_id} + } + + payload = json.dumps(data) + + ret_val, response = self._make_rest_call_helper( + method="post", + endpoint=endpoint, + data=payload, + action_result=action_result, + ) + if phantom.is_fail(ret_val): return action_result.get_status() - ret_val, sites = self._paginator(action_result, MS_LIST_SITES_ENDPOINT, limit=limit) + action_result.add_data(response) + + return action_result.set_status(phantom.APP_SUCCESS, "Successfully copied an item") + + def _handle_create_folder(self, param): + action_result = self.add_action_result(ActionResult(dict(param))) + + endpoint = MS_DRIVE_ROOT_ENDPOINT.format( + self._site_id + ) + MS_DRIVE_CREATE_FOLDER_ENDPOINT.format(param["parent_item_id"]) + + data = { + "name": param["folder_name"], + "folder": {}, + "@microsoft.graph.conflictBehavior": "rename", + } + + payload = json.dumps(data) + + ret_val, response = self._make_rest_call_helper( + method="post", + endpoint=endpoint, + data=payload, + action_result=action_result, + ) + if phantom.is_fail(ret_val): + return action_result.get_status() + + action_result.add_data(response) + + return action_result.set_status(phantom.APP_SUCCESS, "Successfully created a folder") + + def _handle_list_sites(self, param): + action_result = self.add_action_result(ActionResult(dict(param))) + + ret_val, limit = self._validate_integer( + action_result, + param.get(MS_SHAREPOINT_JSON_LIMIT), + MS_SHAREPOINT_LIMIT_KEY, + False, + ) + if phantom.is_fail(ret_val): + return action_result.get_status() + + ret_val, sites = self._paginator( + action_result, MS_LIST_SITES_ENDPOINT, limit=limit + ) if phantom.is_fail(ret_val): return action_result.get_status() @@ -911,6 +1004,12 @@ def handle_action(self, param): ret_val = self._handle_add_item(param) elif action_id == "update_item": ret_val = self._handle_update_item(param) + elif action_id == "list_drive_children": + ret_val = self._handle_list_drive_children(param) + elif action_id == "create_folder": + ret_val = self._handle_create_folder(param) + elif action_id == "copy_drive_item": + ret_val = self._handle_copy_drive_item(param) return ret_val diff --git a/msgraphforsharepoint_consts.py b/msgraphforsharepoint_consts.py index c1e5239..1519ab4 100644 --- a/msgraphforsharepoint_consts.py +++ b/msgraphforsharepoint_consts.py @@ -27,6 +27,7 @@ MS_SHAREPOINT_JSON_SITES_COUNT = 'sites_count' MS_SHAREPOINT_JSON_LISTS_COUNT = 'lists_count' MS_SHAREPOINT_JSON_ITEM_COUNT = 'item_count' +MS_SHAREPOINT_JSON_DRIVE_CHILDREN_COUNT = 'drive_children_count' # URLs and Endpoints MS_GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0' @@ -37,6 +38,10 @@ MS_GET_LIST_ENDPOINT = '/sites/{0}/lists/{1}' MS_GET_FILE_METADATA_ENDPOINT = '/sites/{0}/drive/root:/{1}/{2}' MS_GET_FILE_CONTENT_ENDPOINT = '{0}:/content' +MS_DRIVE_ROOT_ENDPOINT = "/sites/{0}/drive" +MS_DRIVES_ROOT_ENDPOINT = "/sites/{0}/drives" +MS_DRIVE_CREATE_FOLDER_ENDPOINT = "/items/{0}/children" +MS_DRIVE_COPY_ITEM_ENDPOINT = "/items/{0}/copy" # Splunk SOAR Endpoints SOAR_SYS_INFO_URL = "{url}rest/system_info" diff --git a/release_notes/unreleased.md b/release_notes/unreleased.md index fbcb2fd..5258482 100644 --- a/release_notes/unreleased.md +++ b/release_notes/unreleased.md @@ -1 +1,5 @@ **Unreleased** +* Added support for the below new actions: + * copy item + * create folder + * list drive children diff --git a/wheels/py3/soupsieve-2.4.1-py3-none-any.whl b/wheels/py3/soupsieve-2.4.1-py3-none-any.whl deleted file mode 100644 index 26a486cb50e317481f18b38a742b78eb8155d090..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36379 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˟D^{nf) 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 E00(_>=l}o! diff --git a/wheels/py3/soupsieve-2.5-py3-none-any.whl b/wheels/py3/soupsieve-2.5-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..e1be1281914864efacd06642fbf27970213ee2b2 GIT binary patch literal 36131 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 Date: Tue, 26 Dec 2023 07:22:28 -0800 Subject: [PATCH 2/2] Release notes for version 1.4.0 --- LICENSE | 2 +- README.md | 160 ++++++++++++++++++++++++++++-------- release_notes/1.4.0.md | 4 + release_notes/unreleased.md | 4 - 4 files changed, 132 insertions(+), 38 deletions(-) create mode 100644 release_notes/1.4.0.md diff --git a/LICENSE b/LICENSE index 75631d4..573247f 100644 --- a/LICENSE +++ b/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md index 10f46de..e01520e 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ # MS Graph for SharePoint Publisher: Splunk -Connector Version: 1.3.0 +Connector Version: 1.4.0 Product Vendor: Microsoft Product Name: SharePoint Product Version Supported (regex): ".\*" -Minimum Product Version: 6.1.0 +Minimum Product Version: 6.1.1 This app connects to SharePoint using the MS Graph API to support investigate and generic actions @@ -149,16 +149,16 @@ VARIABLE | REQUIRED | TYPE | DESCRIPTION -------- | -------- | ---- | ----------- **tenant_id** | required | string | Tenant ID **site_id** | optional | string | SharePoint Site ID -**endpoint_test_connectivity** | optional | string | Endpoint for test connectivity +**endpoint_test_connectivity** | optional | string | Endpoint for test connectivity (Valid format: /sites/{hostname}:/{site-server-relative-url}) **admin_consent** | optional | boolean | Admin Consent Already Provided **client_id** | required | string | Client/Application ID **client_secret** | required | password | Client Secret ### Supported Actions [test connectivity](#action-test-connectivity) - Validate the asset configuration for connectivity using supplied configuration -[copy item](#action-copy-item) - Asynchronously creates a copy of an driveItem (including any children), under a new parent item or with a new name -[create folder](#action-create-folder) - Create a new folder or DriveItem in a Drive with a specified parent item or path -[list drive children](#action-list-drive-children) - Return a collection of DriveItems in the children relationship of a DriveItem +[copy drive item](#action-copy-drive-item) - Using SharePoint Site ID app config value, and given source_drive_id, copy source_item_id into a folder identified with dest values +[create folder](#action-create-folder) - Create new Drive item Folder using SharePoint site in asset config and provided Parent Item ID +[list drive children](#action-list-drive-children) - List the items in a drive folder by drive ID or search for a specific file name if provided [list sites](#action-list-sites) - Fetch the details of the SharePoint sites [list lists](#action-list-lists) - Fetch the available lists under a SharePoint site [get list](#action-get-list) - Retrieves a list from a SharePoint Site @@ -179,61 +179,147 @@ No parameters are required for this action #### Action Output No Output -## action: 'copy item' -Asynchronously creates a copy of an driveItem (including any children), under a new parent item or with a new name +## action: 'copy drive item' +Using SharePoint Site ID app config value, and given source_drive_id, copy source_item_id into a folder identified with dest values Type: **generic** Read only: **False** -### Action Parameters +While copying the file if file_name is provided without file extension, the copied file will not have any extension. + +#### Action Parameters PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS --------- | -------- | ----------- | ---- | -------- -**source_item_id** | required | ID for item that needs to be copied | string | `sharepoint item id` -**dest_drive_id** | required | Drive ID of folder that holds item to be copied | string | `sharepoint drive id` -**dest_folder_id** | required | Drive ID of folder to copy item into. If left blank will copy into source folder | string | `sharepoint drive id` -**file_name** | optional | Optional new file name for the copied item. If not provided will use orginal file name | string | +**source_item_id** | required | ID for drive item that needs to be copied | string | `sharepoint drive item id` +**dest_drive_id** | required | Drive ID that contains target folder to copy item to | string | `sharepoint drive id` +**dest_folder_id** | required | ID of target folder to copy drive item to | string | `sharepoint drive item id` +**file_name** | optional | Optional new folder/file name for the copy. If not provided will use the original name | string | #### Action Output DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES --------- | ---- | -------- | -------------- -action_result.status | string | | success failed +action_result.status | string | | success failed +action_result.parameter.dest_drive_id | string | `sharepoint drive id` | b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi +action_result.parameter.dest_folder_id | string | `sharepoint drive item id` | 01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62 +action_result.parameter.file_name | string | | test_file_name +action_result.parameter.source_item_id | string | `sharepoint drive item id` | 01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62 +action_result.data | string | | +action_result.summary | string | | +action_result.message | string | | Successfully copied an item +summary.total_objects | numeric | | 1 +summary.total_objects | numeric | | 1 +summary.total_objects_successful | numeric | | 1 +summary.total_objects_successful | numeric | | 1 -### action: 'create folder' +## action: 'create folder' Create new Drive item Folder using SharePoint site in asset config and provided Parent Item ID Type: **generic** Read only: **False** -### Action Parameters +#### Action Parameters PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS --------- | -------- | ----------- | ---- | -------- -**item_id** | required | Parent item ID to create folder in | string | `item id` -**folder_name** | required | Name of newly created folder | string | +**parent_item_id** | required | Parent Drive Item ID | string | `sharepoint drive item id` +**folder_name** | required | Name of newly created folder | string | #### Action Output DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES --------- | ---- | -------- | -------------- -action_result.parameter.folder_name | string | | -action_result.data.\*.id | string | item id | -action_result.data.\*.webUrl | string | url | +action_result.status | string | | success failed +action_result.parameter.folder_name | string | | Test_folder +action_result.parameter.parent_item_id | string | `sharepoint drive item id` | 01WJINUWTOBQ2QUVMHZ5E2XPKITGJIST62 +action_result.data.\*.@odata.context | string | | https://test.microsoft.com/v1.0/$metadata#sites('test.sharepoint.com%2Cdc6f43e9-54fa-4a39-8783-314e3bbbed41%2Cc42b48c4-59b9-48f1-b96e-e8145b5539fa')/drive/items('01SNFLYIVBMJQZCZK6ZFAZ5PVEXODNRV3N')/children/$entity +action_result.data.\*.@odata.etag | string | | "{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},1" +action_result.data.\*.cTag | string | | "c:{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},0" +action_result.data.\*.commentSettings.commentingDisabled.isDisabled | boolean | | True False +action_result.data.\*.createdBy.application.displayName | string | | sharepoint_test +action_result.data.\*.createdBy.application.id | string | | 71b307af-1dcb-4e39-9640-5129afc83162 +action_result.data.\*.createdBy.user.displayName | string | | SharePoint App +action_result.data.\*.createdDateTime | string | | 2023-10-25T08:55:48Z +action_result.data.\*.eTag | string | | "{24A7DBF0-E193-4E0A-A960-ECF5DB994FFF},1" +action_result.data.\*.fileSystemInfo.createdDateTime | string | | 2023-10-25T08:55:48Z +action_result.data.\*.fileSystemInfo.lastModifiedDateTime | string | | 2023-10-25T08:55:48Z +action_result.data.\*.folder.childCount | numeric | | 0 +action_result.data.\*.id | string | `sharepoint drive item id` | +action_result.data.\*.lastModifiedBy.application.displayName | string | | sharepoint_test +action_result.data.\*.lastModifiedBy.application.id | string | | 71b307af-1dcb-4e39-9640-5129afc83162 +action_result.data.\*.lastModifiedBy.user.displayName | string | | SharePoint App +action_result.data.\*.lastModifiedDateTime | string | | 2023-10-25T08:55:48Z +action_result.data.\*.name | string | | test2 +action_result.data.\*.parentReference.driveId | string | `sharepoint drive id` | b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi +action_result.data.\*.parentReference.driveType | string | | documentLibrary +action_result.data.\*.parentReference.id | string | `sharepoint drive item id` | 01SNFLYIVBMJQZCZK6ZFAZ5PVEXODNRV3N +action_result.data.\*.parentReference.path | string | | /drives/b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi/root:/SizeTest-Playbook-Don't Delete +action_result.data.\*.parentReference.sharepointIds.listId | string | | 498fd15d-ef79-4c0b-8ac4-c4ea27ed8be2 +action_result.data.\*.parentReference.sharepointIds.listItemUniqueId | string | | 916162a1-5e65-41c9-9ebe-a4bb86d8d76d +action_result.data.\*.parentReference.sharepointIds.siteId | string | | dc6f43e9-54fa-4a39-8783-314e3bbbed41 +action_result.data.\*.parentReference.sharepointIds.siteUrl | string | `url` | https://test.sharepoint.com/sites/TestSite +action_result.data.\*.parentReference.sharepointIds.tenantId | string | | 140fe46d-819d-4b6d-b7ef-1c0a8270f4f0 +action_result.data.\*.parentReference.sharepointIds.webId | string | | c42b48c4-59b9-48f1-b96e-e8145b5539fa +action_result.data.\*.shared.scope | string | | unknown +action_result.data.\*.size | numeric | | 0 +action_result.data.\*.webUrl | string | `url` | +action_result.summary | string | | +action_result.message | string | | Successfully created a folder +summary.total_objects | numeric | | 1 +summary.total_objects_successful | numeric | | 1 -### action: 'list drive children' -Return a collection of DriveItems in the children relationship of a DriveItem +## action: 'list drive children' +List the items in a drive folder by drive ID or search for a specific file name if provided Type: **investigate** Read only: **True** -### Action Parameters +#### Action Parameters PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS --------- | -------- | ----------- | ---- | -------- -**drive_id** | required | ID of the Drive to list children of | string | `sharepoint drive id` +**drive_id** | required | ID of drive to list | string | `sharepoint drive id` #### Action Output DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES --------- | ---- | -------- | -------------- -action_result.data.\*.id | string | item id | `sharepoint item id` +action_result.status | string | | success failed +action_result.parameter.drive_id | string | `sharepoint drive id` | b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi +action_result.data.\*.@microsoft.graph.downloadUrl | string | `url` | https://test.sharepoint.com/sites/Test/_layouts/15/download.aspx?UniqueId=d5bfdd47-e0e8-4a7e-99a3-c96f30191b12&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvcGhhbnRvbWVuZ2luZWVyaW5nMi5zaGFyZXBvaW50LmNvbUAxNDBmZTQ2ZC04MTlkLTRiNmQtYjdlZi0xYzBhODI3MGY0ZjAiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNjk5MjU1NDY4IiwiZXhwIjoiMTY5OTI1OTA2OCIsImVuZHBvaW50dXJsIjoiM1hObzdUK3U4YnFXUU1DTko0OXdiQXVDZ01ad0FNRDh3ckZvVC9yWkxKbz0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE0OCIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiUS9ZVVdDcFQvMEsrQThFOWtxeEIvQT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6IlpHTTJaalF6WlRrdE5UUm1ZUzAwWVRNNUxUZzNPRE10TXpFMFpUTmlZbUpsWkRReCIsImFwcF9kaXNwbGF5bmFtZSI6ImlnaGVsYW5pX3NoYXJlcG9pbnRfdGVzdCIsIm5hbWVpZCI6IjcxYjMwN2FmLTFkY2ItNGUzOS05NjQwLTUxMjlhZmM4MzE2MkAxNDBmZTQ2ZC04MTlkLTRiNmQtYjdlZi0xYzBhODI3MGY0ZjAiLCJyb2xlcyI6ImFsbGZpbGVzLndyaXRlIHNlbGVjdGVkc2l0ZXMgZ3JvdXAucmVhZCBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGdyb3VwLndyaXRlIGFsbGZpbGVzLnJlYWQgYWxsc2l0ZXMuZnVsbGNvbnRyb2wgYWxscHJvZmlsZXMucmVhZCIsInR0IjoiMSIsImlwYWRkciI6IjQwLjEyNi40LjQwIn0.y13AkyxdRPgziPhIV8_FFBGjtZGHgNpgkW0GU7MMUfA&ApiVersion=2.0 +action_result.data.\*.image.width | numeric | | 1752 +action_result.data.\*.image.height | numeric | | 1244 +action_result.data.\*.cTag | string | | "c:{E1E93D43-F034-489F-8304-BAF7F064A30D},0" +action_result.data.\*.createdBy.application.displayName | string | | Yammer +action_result.data.\*.createdBy.application.id | string | | 00000005-0000-0ff1-ce00-000000000000 +action_result.data.\*.createdBy.user.displayName | string | | SharePoint App +action_result.data.\*.createdBy.user.email | string | | test@gmail.com +action_result.data.\*.createdBy.user.id | string | | eeb3645f-df19-47a1-8e8c-fcd234cb5f6f +action_result.data.\*.createdDateTime | string | | 2020-07-28T20:15:33Z +action_result.data.\*.decorator.iconColor | string | | darkGreen +action_result.data.\*.eTag | string | | "{E1E93D43-F034-489F-8304-BAF7F064A30D},1" +action_result.data.\*.file.hashes.quickXorHash | string | | 8JpxaQB3wX1/FkQ5Gt3prUbUUFU= +action_result.data.\*.file.mimeType | string | | application/vnd.ms-excel +action_result.data.\*.fileSystemInfo.createdDateTime | string | | 2020-07-28T20:15:33Z +action_result.data.\*.fileSystemInfo.lastModifiedDateTime | string | | 2020-07-28T20:15:33Z +action_result.data.\*.folder.childCount | numeric | | 1 +action_result.data.\*.id | string | `sharepoint drive item id` | +action_result.data.\*.lastModifiedBy.application.displayName | string | | Yammer +action_result.data.\*.lastModifiedBy.application.id | string | | 00000005-0000-0ff1-ce00-000000000000 +action_result.data.\*.lastModifiedBy.user.displayName | string | | SharePoint App +action_result.data.\*.lastModifiedBy.user.email | string | | test@gmail.com +action_result.data.\*.lastModifiedBy.user.id | string | | eeb3645f-df19-47a1-8e8c-fcd234cb5f6f +action_result.data.\*.lastModifiedDateTime | string | | 2020-07-28T20:15:33Z action_result.data.\*.name | string | | -action_result.data.\*.webUrl | string | url | +action_result.data.\*.parentReference.driveId | string | `sharepoint drive id` | b!P_PLxcYmjkiP68Fx-chtHkdhtZd0TeZPokKrsyopCWbKblNpI0pzRa5Mk398L4cc +action_result.data.\*.parentReference.driveType | string | | documentLibrary +action_result.data.\*.parentReference.id | string | `sharepoint drive item id` | 01WJINUWV6Y2GOVW7725BZO354PWSELRRZ +action_result.data.\*.parentReference.name | string | | Shared Documents +action_result.data.\*.parentReference.path | string | | /drives/b!P_PLxcYmjkiP68Fx-chtHkdhtZd0TeZPokKrsyopCWbKblNpI0pzRa5Mk398L4cc/root: +action_result.data.\*.parentReference.siteId | string | | c5cbf33f-26c6-488e-8feb-c171f9c86d1e +action_result.data.\*.shared.scope | string | | users +action_result.data.\*.size | numeric | | 775 +action_result.data.\*.specialFolder.name | string | | apps +action_result.data.\*.webUrl | string | `url` | +action_result.summary.drive_children_count | numeric | | 2 +action_result.message | string | | Drive children count: 2 +summary.total_objects | numeric | | 1 +summary.total_objects_successful | numeric | | 1 ## action: 'list sites' Fetch the details of the SharePoint sites @@ -256,6 +342,7 @@ action_result.parameter.limit | numeric | | 500 action_result.data.\*.createdDateTime | string | | 2016-10-31T20:25:06Z action_result.data.\*.displayName | string | | Test Site Name action_result.data.\*.id | string | | tenant-name.sharepoint.com,595384ee-13aa-49d1-814b-00ed3e024cde,70abfe37-8aa1-4168-b83e-41b6e9721509 +action_result.data.\*.isPersonalSite | boolean | | True False action_result.data.\*.lastModifiedDateTime | string | | 2022-02-16T12:12:25.9162131Z action_result.data.\*.name | string | | Test Site Name action_result.data.\*.siteCollection.hostname | string | `host name` | tenant-name.sharepoint.com @@ -472,8 +559,9 @@ action_result.data.\*.eTag | string | | action_result.data.\*.fields.@odata.etag | string | | action_result.data.\*.fields.AppAuthorLookupId | string | | action_result.data.\*.fields.AppEditorLookupId | string | | +action_result.data.\*.fields.Approved | boolean | | True False action_result.data.\*.fields.AssetType | string | | Laptop -action_result.data.\*.fields.Attachments | numeric | | +action_result.data.\*.fields.Attachments | boolean | | True False action_result.data.\*.fields.AuthorLookupId | string | | action_result.data.\*.fields.Color | string | | Color of the Asset action_result.data.\*.fields.Complete | boolean | | False @@ -499,6 +587,7 @@ action_result.data.\*.fields.PurchasePrice | numeric | | 1 action_result.data.\*.fields.SerialNumber | string | | Test-SerialNumber-Asset action_result.data.\*.fields.Status | string | | Status of the Asset action_result.data.\*.fields.Title | string | | Test Title +action_result.data.\*.fields.TravelDuration | string | | 0 action_result.data.\*.fields._ComplianceFlags | string | | action_result.data.\*.fields._ComplianceTag | string | | action_result.data.\*.fields._ComplianceTagUserId | string | | @@ -550,7 +639,7 @@ action_result.data.\*.fields.@odata.etag | string | | action_result.data.\*.fields.AppAuthorLookupId | string | | action_result.data.\*.fields.AppEditorLookupId | string | | action_result.data.\*.fields.AssetType | string | | Mobile -action_result.data.\*.fields.Attachments | numeric | | +action_result.data.\*.fields.Attachments | boolean | | True False action_result.data.\*.fields.AuthorLookupId | string | | action_result.data.\*.fields.Color | string | | Red action_result.data.\*.fields.ConditionNotes | string | | Note for the Updated Asset @@ -616,6 +705,8 @@ action_result.parameter.file_name | string | | test_file_name.txt action_result.parameter.file_path | string | | /test_folder_name/ action_result.data.\*.@microsoft.graph.downloadUrl | string | `url` | https://test-tenant-name.sharepoint.com/sites/TestSiteName/_layouts/15/download.aspx?UniqueId=c743b2e0-36ec-4c8a-9ce0-190c2fd4dd97&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub0&ApiVersion=2.0 action_result.data.\*.@odata.context | string | `url` | https://graph.test.com/v1.0/$metadata#sites('tenant-name.sharepoint.com%2Cdc6f43e9-54fa-4a39-8783-314e3bbbed41%2Cc42b48c4-59b9-48f1-b96e-e8145b5539fb')/drive/root/$entity +action_result.data.\*.image.width | numeric | | 256 +action_result.data.\*.image.height | numeric | | 266 action_result.data.\*.cTag | string | | "c:{C743B2E0-36EB-4C9A-9CE0-190C2FD4DD97},1" action_result.data.\*.createdBy.user.displayName | string | | Test User action_result.data.\*.createdBy.user.email | string | `email` | test_user@tenant-name.ontest.com @@ -626,16 +717,19 @@ action_result.data.\*.file.hashes.quickXorHash | string | | EIDYEgye8dEx3XhA7 action_result.data.\*.file.mimeType | string | | text/plain action_result.data.\*.fileSystemInfo.createdDateTime | string | | 2022-02-10T15:25:21Z action_result.data.\*.fileSystemInfo.lastModifiedDateTime | string | | 2022-02-10T15:25:21Z -action_result.data.\*.id | string | | 01SNFLYIXAWJB4P2ZWTJGJZYAZBQX5JXMX +action_result.data.\*.id | string | `sharepoint drive item id` | 01SNFLYIXAWJB4P2ZWTJGJZYAZBQX5JXMX action_result.data.\*.lastModifiedBy.user.displayName | string | | Test User action_result.data.\*.lastModifiedBy.user.email | string | `email` | test_user@tenant-name.ontest.com action_result.data.\*.lastModifiedBy.user.id | string | | eeb3645f-df19-47a1-8e8c-fcd234cb5f6f action_result.data.\*.lastModifiedDateTime | string | | 2022-02-10T15:25:21Z action_result.data.\*.name | string | | test_file_name.txt -action_result.data.\*.parentReference.driveId | string | | b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi +action_result.data.\*.parentReference.driveId | string | `sharepoint drive id` | b!6UNv3PpUOUqHgzFOO7vtQcRIK8S5WfFIuW7oFFtVOfpd0Y9Jee8LTIrExOon7Yvi action_result.data.\*.parentReference.driveType | string | | documentLibrary -action_result.data.\*.parentReference.id | string | | 01SNFLYIRDSQLQVWP7EVDKSL3YYUNW6I4G +action_result.data.\*.parentReference.id | string | `sharepoint drive item id` | 01SNFLYIRDSQLQVWP7EVDKSL3YYUNW6I4G +action_result.data.\*.parentReference.name | string | | Playbook-Folder action_result.data.\*.parentReference.path | string | | /drive/root:/test_folder_name +action_result.data.\*.parentReference.siteId | string | | dc6f43e9-54fa-4a39-8783-314e3bbbed41 +action_result.data.\*.shared.scope | string | | users action_result.data.\*.size | numeric | | 1422 action_result.data.\*.webUrl | string | `url` | https://test-tenant-name.sharepoint.com/sites/TestSiteName/Shared%20Documents/test_folder_name/test_file_name.txt action_result.summary.vault_id | string | `sha1` `vault id` | 8b11ac28c0e276a4f9fa8a2fd2a17b499a415786 @@ -667,4 +761,4 @@ action_result.data | string | | action_result.summary | string | | action_result.message | string | | Successfully deleted file summary.total_objects | numeric | | 1 -summary.total_objects_successful | numeric | | 1 +summary.total_objects_successful | numeric | | 1 \ No newline at end of file diff --git a/release_notes/1.4.0.md b/release_notes/1.4.0.md new file mode 100644 index 0000000..3e53d33 --- /dev/null +++ b/release_notes/1.4.0.md @@ -0,0 +1,4 @@ +* Added support for the below new actions: + * copy item + * create folder + * list drive children \ No newline at end of file diff --git a/release_notes/unreleased.md b/release_notes/unreleased.md index 5258482..fbcb2fd 100644 --- a/release_notes/unreleased.md +++ b/release_notes/unreleased.md @@ -1,5 +1 @@ **Unreleased** -* Added support for the below new actions: - * copy item - * create folder - * list drive children