This Google Apps Script will change the access permissions of the specified Google Drive folder from Public to Private at a custom date and time. When you initialize the script, it creates a time-based trigger that is responsible for change the shared permissions.
Google Scripts has a simple file.removeViewer(user) method to remove one or more users from a shared File but it doesn’t seem to work when the file /folder is shared with Public. Thus the workaround, as used in this script, is to create a copy of the shared folder and delete the original one thus expiring the shared links.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// Enter the full URL of the public Google Docs folder var FOLDER_URL = "https://docs.google.com/folder/d/1234567890/edit"; // Enter the expiry date in YYYY-MM-DD HH:MM format (local time zone) var EXPIRY_TIME = "2013-02-15 18:30"; function getFolderID() { var search = /docs\.google\.com\/folder\/d\/(.*)\//g; var results = search.exec(FOLDER_URL); var id = "0"; if (search.lastIndex) id = results[1]; return id; } function Start() { var ID = getFolderID(); if (ID == "0") { MailApp.sendEmail(Session.getActiveUser(), "Error", "Check the URL of the shared Google Docs folder : " + FOLDER_URL); return; } var time = EXPIRY_TIME; var expireAt = new Date(time.substr(0,4), time.substr(5,2)-1, time.substr(8,2), time.substr(11,2), time.substr(14,2)); if ( !isNaN ( expireAt.getTime() ) ) ScriptApp.newTrigger("autoExpire").timeBased().at(expireAt).create(); else MailApp.sendEmail(Session.getActiveUser(), "Error", "The auto-expiry date isn't in proper format. Please use YYYY-MM-DD HH:MM"); } function autoExpire() { try { var folder = DocsList.getFolderById(Initialize()); if (folder) { var name = folder.getName(); var copy = DocsList.createFolder(name + " (Private)"); var files = folder.getFiles(); for (var i=0; i<files.length; i++) { files[i].removeFromFolder(folder); files[i].addToFolder(copy); } folder.setTrashed(true); copy.rename(name); MailApp.sendEmail(Session.getActiveUser(), "Success", "Your shared files are no longer public and the new (private) URL is :" + copy.getUrl()); } } catch (e) { MailApp.sendEmail(Session.getActiveUser(), "Error", "Could not set the expiry date for your file. " + e.toString()); } } |