2024-11-21 (C) Questetra, Inc. (MIT License) 3 2 This item deletes the shared link accessible by anyone with the link or within the domain from the specified file or folder on Google Drive. Permissions for users or groups remain undeleted. この工程は、Google ドライブ の指定ファイルやフォルダから、リンクを知っている全員、もしくはドメイン内の全員がアクセスできる共有リンクを削除します。ユーザやグループへのアクセス許可は削除されずに残ります。 https://support.questetra.com/bpmn-icons/service-task-google-drive-permission-delete/ https://support.questetra.com/ja/bpmn-icons/service-task-google-drive-permission-delete/ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA71JREFUWEfF V11oFFcU/s7M7K6TRs1vK1VUSGmbCK2SB6VFgpLWlYC2omIDLaUlCBGfimwWgw9Fu9mW0ocSoUhE aKmlgUgUyShiEUWSh4AW7L9CS5PGZhuTJmTi7swcmUn3d+ZOdtGy87Ts3HvOd77zfefeIZT5oVLy h2MP3wTMViJqZqABQM1/+6cIuMvMo4B8RYuGzhUbd0kArT1TK2VWj5CEg2DUFRWYkGALX5ikf3Kl q2bGb48vgJ0x/T2WEC86cWEmQoIsRIai6mkRCCGAcHy+F0ydRVW81CLik1qk4pDXMk8A4bj+NRhv LRW3pPeEs1pEbXeTVPDPE63clc3NRB4DTs8JfX6V7d2soKVRgizlk5cyGBdvmbj8velLDDHez9VE JoqtdoXU3/wE19Io452tCtQgUP2Uu3u/TliInE1CT/pgICQM1p9LuyMTZUdMP06Eo37wYweC2LhO wsQ0o245QZHzVxsm8O2IgS+vG74sMOPEpajabS/KAAjH9Um/6vdvUdD+qoKQAiykgFmdUb/CzcLE DCN+PoWfxi0xCEJCi6j1GQDOhCNrQLRjdQ2h+40g1tdnE/4zy6gIkdOO3Mdi4OodE59eTPmbhKU9 9sR0IoZj870gsec7tivY1axAkbIxDQuY/JexaiWBCoiYnmd8fsnAzV98BMl8UotWHHK27uzRhxnY 7AX55XUSjrQFULvcTbdNs92G2kr3u1u/W4h+I1YjASNDXeqWRQZ69EnAe85Hdwew9QXZVeXsAqP3 soENayS0bZJR4EpHJ2eupTA4KmQhoXWpi00N9+j2qhyCF7l4/SUZHdsUVC7Lr9Du87UfTXx8IYW1 dYRje4JYXe1m4d7fjI8GkxibYi9yLa1LlYUAbHEd3xdE0xoXLhQqPdchuZlsnZwfNXDqqqct8wC4 WlBK0FLA5gDMtsBLhJ+9HcSLz7qrH3/AmFtgBJR8ym0uQwG4tGJawNBtE/3D+Szki9DDhrubZbzb EsCyQBaz3wASmX7sAePDgST+SBToINeGokF0Yn8Qm9ZLTlXMwF/TjKdXuEewKHnSAPpHDHx1w0MD uYPIcYLHKH7leRmHdyioqiCHdltU9u9inx/+tNDd73E4FY5iO6DoMPqgLYBtTTLuzzBWVZHL7yIw cw8Zfd8Z0G6754DnYSQ6jm2fd74WQMMzhMpQcdXb7br+s4nYoMd5IDqOnZFcxIWkWPpF64QXkvSG sl7JsiDKeCn9X5go9VqeBlHWD5M0iLJ+mhUquSwfp49ru6X2PwLQFL0wM02BagAAAABJRU5ErkJg gg== { const quser = engine.createQuser(3, 'サウスポール', 'SouthPole@questetra.com'); configs.putObject('conf_User', quser); // ファイル/フォルダの ID が保存された文字型データ項目(単一行)を準備 const fileIdDef = engine.createDataDefinition('共有リンクを削除するファイル/フォルダの ID', 1, 'q_fileId', 'STRING_TEXTFIELD'); engine.setData(fileIdDef, fileId); configs.putObject('conf_FileId', fileIdDef); }; /** * 異常系のテスト * @param errorMsg */ const assertError = (errorMsg) => { let failed = false; try { main(); } catch (e) { failed = true; expect(e.toString()).toEqual(errorMsg); } if (!failed) { fail('No error was thrown.'); } }; /** * UserID に対応する QuserView がない場合 */ test('User not found', () => { prepareConfigs('abc123'); configs.put('conf_User', ''); assertError('User not found.'); }); /** * ファイル/フォルダの ID が空でエラーになる場合 */ test('No File / Folder ID', () => { prepareConfigs(null); assertError("File / Folder ID isn't set."); }); /** * GET リクエストのテスト * @param {Object} request * @param request.url * @param request.method * @param fileId */ const assertGetRequest = ({url, method}, fileId) => { const fields = encodeURIComponent('permissions/id,permissions/type'); expect(url).toEqual(`https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}/permissions?fields=${fields}&supportsAllDrives=true`); expect(method).toEqual('GET'); }; /** * GET API リクエストでエラー */ test('GET Failed', () => { prepareConfigs('abc123'); httpClient.setRequestHandler((request) => { assertGetRequest(request, 'abc123'); return httpClient.createHttpResponse(400, 'application/json', '{}'); }); assertError('Failed to get permission list. File:abc123, Status:400'); }); const SAMPLE_GET_NO_SHARED_LINK = { "permissions": [ { "id": "p1", "type": "user" } ] }; /** * GET リクエストは成功するが、削除対象の共有設定がなくエラー */ test('No shared link to delete', () => { prepareConfigs('abc123'); httpClient.setRequestHandler((request) => { assertGetRequest(request, 'abc123'); return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET_NO_SHARED_LINK)); }); assertError('No shared link to delete. File:abc123'); }); const SAMPLE_GET_1 = { "permissions": [ { "id": "p1", "type": "user" }, { "id": "p2", "type": "group" }, { "id": "p3", "type": "anyone" } ] }; const SAMPLE_GET_2 = { "permissions": [ { "id": "p1", "type": "domain" }, { "id": "p2", "type": "user" } ] }; /** * DELETE リクエストのテスト * @param {Object} request * @param request.url * @param request.method * @param fileId * @param permissionId */ const assertDeleteRequest = ({url, method, contentType, body}, fileId, permissionId) => { expect(url).toEqual(`https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}/permissions/${permissionId}?supportsAllDrives=true`); expect(method).toEqual('DELETE'); }; /** * DELETE API リクエストでエラー */ test('DELETE Failed', () => { prepareConfigs('abc123'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'abc123'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET_1)); } assertDeleteRequest(request, 'abc123', 'p3'); return httpClient.createHttpResponse(400, 'application/json', '{}'); }); assertError('Failed to delete permission. File:abc123, Permission:p3, Status:400'); }); /** * 共有リンク削除成功 * 共有範囲が anyone のものを削除 */ test('Success - anyone', () => { prepareConfigs('abc123'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'abc123'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET_1)); } assertDeleteRequest(request, 'abc123', 'p3'); return httpClient.createHttpResponse(200, 'application/json', '{}'); }); main(); }); /** * 共有リンク削除成功 * 共有範囲が domain のものを削除 */ test('Success - domain', () => { prepareConfigs('def789'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'def789'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET_2)); } assertDeleteRequest(request, 'def789', 'p1'); return httpClient.createHttpResponse(200, 'application/json', '{}'); }); main(); }); ]]>