const apiKey = '8ALsk8jDOlynEwn8ScMBSnG87'; function newTrigger() { ScriptApp.newTrigger(readLog) .timeBased() .everyMinutes(1) .create(); prepareSheet(); } async function prepareSheet() { var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/'); sheet = ss.getActiveSheet(); sheet = ss.getActiveSheet(); lastRow = sheet.getLastRow(); sheet.clear() sheet.getRange(1,1).setValue("domain"); for (var sh = 1; sh < 100; sh++) { sheet.getRange(1, sh+1).setValue("groups_"+sh) } } function readLog() { //var previousLast = 0 var folder = DriveApp.getFolderById("1nAkWPYFNpRx-UZECMJN4C3N--i0Clcho") var files = folder.getFiles() while (files.hasNext()) { var fileName = files.next() if (fileName == "status.json") { var content = fileName.getBlob().getDataAsString(); var json = JSON.parse(content); var previousLast = json['lastLine']; main(previousLast) } } } function createLog() { var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j") blob = JSON.stringify(obj); file = folder.createFile("status.json", blob); } function updateLog(lastUpdatedLine) { var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j"); obj = JSON.stringify({ lastLine: lastUpdatedLine }); var files = folder.getFiles(); while (files.hasNext()) { var fileName = files.next(); if (fileName == "status.json") { Logger.log(fileName+" found!") fileName.setContent(obj); } } } function deleteLog() { var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j"); var files = folder.getFiles(); while (files.hasNext()) { var fileName = files.next(); if (fileName == "status.json") { folder.removeFile(fileName); } } } function main(previousLast) { Logger.log("Main PL: "+previousLast) var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j"); var files = folder.getFiles(); while (files.hasNext()) { var file = files.next(); var getDate = new Date(); var date = Utilities.formatDate(getDate, 'America/New_York', 'MM/dd/yyyy hh'); var fileDate = file.getDateCreated(); var fileDateFormatted = Utilities.formatDate(fileDate, 'America/New_York', 'MM/dd/yyyy hh'); if (date == fileDateFormatted) { var updated_file = file.getBlob() var updated_blob = updated_file.getDataAsString(); var updated_data = Utilities.parseCsv(updated_blob, ','); //var updated_data = updated_data.slice(previousLast); var full_data = Utilities.parseCsv(updated_data, ','); //var full_data = full_data.slice(previousLast) } else if (date != fileDateFormatted) { var outdated_file = file.getBlob() var outdated_blob = outdated_file.getDataAsString(); var outdated_data = Utilities.parseCsv(outdated_blob, ','); //var outdated_data = outdated_data.slice(previousLast); } } austinComparseData(outdated_data, updated_data); fullParse(full_data); moveOldFiles(); } function moveOldFiles() { var folder = DriveApp.getFolderById("15p4vXVQd6hhcMl73VOxD8VctL2gR-q43") var files = folder.getFiles() while (files.hasNext()) { var file = files.next(); var getDate = new Date(); var date = Utilities.formatDate(getDate, 'America/New_York', 'MM/dd/yyyy'); var fileDate = file.getDateCreated(); var fileDateFormatted = Utilities.formatDate(fileDate, 'America/New_York', 'MM/dd/yyyy'); if (date != fileDateFormatted) { const destination = DriveApp.getFolderById('17WCI5QkV9W6j35a-1n9BspTF6z_MZ9yu'); file.moveTo(destination); } } } function austinComparseData(outdated_data, updated_data) { let domains_to_update = []; let updatedFlag = 1; let outdatedFlag = 1; while(updatedFlag < updated_data.length && outdatedFlag < outdated_data.length){ if(updated_data[updatedFlag][0] == outdated_data[outdatedFlag][0]) { let allUpdatedGroups = []; let allOutdatedGroups = []; for(let i = 1; i < updated_data[updatedFlag].length; i++){ if(updated_data[updatedFlag][i]){ allUpdatedGroups.push(updated_data[updatedFlag][i].trim()); } } for(let j = 1; j < outdated_data[outdatedFlag].length; j++){ if(outdated_data[outdatedFlag][j]){ allOutdatedGroups.push(outdated_data[outdatedFlag][j].trim()); } } if(allUpdatedGroups.length !== allOutdatedGroups.length){ domains_to_update.push(updated_data[updatedFlag]); } else { for(let k = 0; k < allUpdatedGroups.length; k++){ if(allOutdatedGroups.indexOf(allUpdatedGroups[k]) == -1){ domains_to_update.push(updated_data[updatedFlag]); } } } updatedFlag++; outdatedFlag++; } else { if(updated_data[updatedFlag][0] > outdated_data[outdatedFlag][0]){ outdatedFlag++; } else if(updated_data[updatedFlag][0] < outdated_data[outdatedFlag][0]){ domains_to_update.push(updated_data[updatedFlag]); updatedFlag++; } } if(updatedFlag > updated_data.length-1 || outdatedFlag > outdated_data.length-1){ break; } } updatedDomainsOnly(domains_to_update); } function updatedDomainsOnly(domains_to_update) { for (var x = 0; x < domains_to_update.length; x++) { var array = domains_to_update[x]; for (var i = 1; i < array.length; i++) { var item = array[i] if (item != "") { var api_url = 'https://api.northpass.com/v2/groups/?filter[name][eq]='+encodeURIComponent(item); const settings = { async: true, crossDomain: true, method: 'GET', headers: { accept: 'application/json', 'X-Api-Key': apiKey } }; const sendMsg = UrlFetchApp.fetch(api_url, settings); var uuidResponse = sendMsg.getContentText(); var parseData = JSON.parse(uuidResponse); var groupID = parseData['data'][0]['id']; var groupName = array.indexOf(item); if (groupName != -1) { array[groupName] = groupID; } } } const dom = array.shift(); const groups = array; sendWebhook({domain_to_update : { domain: dom, group_ids: groups }}) } } function fullParse(full_data) { for (var x = 1; x < full_data.length; x++) { var array = full_data[x]; for (var i = 1; i < array.length; i++) { var item = array[i] if (item != "") { var api_url = 'https://api.northpass.com/v2/groups/?filter[name][eq]='+encodeURIComponent(item); const settings = { async: true, crossDomain: true, method: 'GET', headers: { accept: 'application/json', 'X-Api-Key': apiKey } }; const sendMsg = UrlFetchApp.fetch(api_url, settings); var uuidResponse = sendMsg.getContentText(); var parseData = JSON.parse(uuidResponse) Logger.log("Current Check:"+item) var groupID = parseData['data'][0]['id'] var groupName = array.indexOf(item); if (groupName != -1) { array[groupName] = groupID; } } } const dom = array.shift(); const groups = array; previousLast++ Logger.log(previousLast) updateLog(previousLast) writeDataToSheet(dom, groups) } } //Inserts a new sheet and writes a 2D array of data in it function writeDataToSheet(dom, groups) { var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/'); var dataRow = Math.max(sheet.getLastRow(),1); sheet.insertRowAfter(dataRow); sheet.getRange(dataRow + 1, 1).setValue(dom); for (var g = 1; g < groups.length; g++) { sheet.getRange(dataRow + 1, g+1).setValue(groups[g]); } } function sendWebhook(domain_to_update){ Logger.log("Webhook function Object: "+JSON.stringify(domain_to_update)) var payload = domain_to_update var options = { 'method': 'post', 'payload': JSON.stringify(payload) }; UrlFetchApp.fetch('https://webhooks.workato.com/webhooks/rest/604b4fc0-fcd9-4f3b-b715-b42d7f740ba6/domains-updated', options); }