Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const ics = require("ics");
const conferenceFiles = glob.sync(
path.resolve(__dirname, "../conferences/") + "/*.json"
);
// validate
// write to conferences.json
const conferences = conferenceFiles
.map(file => {
return JSON.parse(fs.readFileSync(file).toString());
})
.filter(conference => conference["next-date"] != null);
const { error, value } = ics.createEvents(
conferences.map(conference => {
const start = conference["next-date"]["start"].split(/-/).map(Number);
const end = conference["next-date"]["end"].split(/-/).map(Number);
if(conference["next-date"]["start"] === conference["next-date"]["end"]) {
// Yeah, that's how ICS works.
end[2]++;
}
const geo = {
lat: conference.location.coordinates[1],
lon: conference.location.coordinates[0]
}
return {
title: conference.name,
assignee,
markdown: issue.body,
html: (await markdowner(issue.body)).content,
url: issue.html_url
}
})
))
.filter(issue => issue.time && issue.assignee) // Skipping issues without time or assignee (not confirmed)
.sort((a, b) => {
if (a.time > b.time) return 1
if (a.time < b.time) return -1
return 0
})
await fs.writeFile(`meetings.json`, JSON.stringify({ meetings }, null, 2))
const cal = createEvents(
meetings.map(meeting => {
const time = meeting.time.tz('utc')
return {
start: [time.year(), time.month() + 1, time.date(), time.hour(), time.minute()],
duration: { hours: 1 },
uid: meeting.uid,
timestamp: meeting.updated_at.utc().format('YYYYMMDDTHHMMSS') + 'Z',
startType: 'utc',
title: meeting.title,
description: meeting.markdown,
alarms: [
{ action: 'display', description: 'One hour until DAT comm-comm meeting', trigger: { hours: 1, minutes: 0, before: true } }
],
url: meeting.url
}
})
.utc(hangout.start)
.format("YYYY-M-D-H-m")
.split("-"),
end: moment
.utc(hangout.start)
.format("YYYY-M-D-H-m")
.split("-"),
organizer: {
name: hangout.host && hangout.host.name,
email: "noreply@codebuddies.org"
},
method: "REQUEST"
};
});
const { error, value } = ics.createEvents(events);
if (error) {
console.log("iCalFeed.handleRequest Error:", error);
res.statusCode = 500;
return res.end();
}
res.statusCode = 200;
res.setHeader("Content-type", "text/calendar;charset=UTF-8");
res.write(value);
res.end();
}
};
description,
start,
end,
location,
url,
status: 'CONFIRMED',
organizer: {
name: parentCollective.name,
email: `hello@${parentCollective.slug}.opencollective.com`,
},
alarms,
};
if (this.location.lat) {
event.geo = { lat: this.location.lat, lon: this.location.long };
}
ics.createEvent(event, (err, res) => {
if (err) {
console.error(`Error while generating the ics file for event id ${this.id} (${url})`, err);
}
return resolve(res);
});
});
});
});
incidents.forEach(i => {
const id = host ? { uid: `${i.id}@${host}` } : {};
events.push({
title: i.title,
description: i.description,
start: extractDate(dates.parse(i.scheduled)),
end: extractDate(dates.parse(i.scheduled).add(i.duration, "minute")),
productId,
...id
});
});
const calendar = ics.createEvents(events);
const { error } = calendar;
let { value } = calendar;
if (error) {
throw new Error(error);
} else {
if (!value) {
value = `BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:${productId}\nEND:VCALENDAR`;
}
value = value.replace(
`PRODID:${productId}`,
`PRODID:${productId}\nNAME:${siteConfig.title}\nX-WR-CALNAME:${
siteConfig.title
}\nTIMEZONE-ID:UTC\nX-WR-TIMEZONE:UTC`
);
return new Promise((resolve, reject) => {
ics.createEvent(data, (err, value) => {
if (err) {
reject(err)
return
}
resolve(value)
})
})
}
description,
start,
end,
location,
url,
status: 'CONFIRMED',
organizer: {
name: parentCollective.name,
email: `hello@${parentCollective.slug}.opencollective.com`,
},
alarms,
};
if (this.location.lat) {
event.geo = { lat: this.location.lat, lon: this.location.long };
}
ics.createEvent(event, (err, res) => {
if (err) {
logger.error(`Error while generating the ics file for event id ${this.id} (${url})`, err);
}
return resolve(res);
});
});
});
var expectedKeys = ['rho', 'u', 'v', 'w', 'p'];
expectedKeys.forEach(function(el) {
soln['ics.' + el] = {
id: 'ics.ics.' + el,
value: source[el] !== undefined ? [ source[el].trim() ] : []
};
});
var customIcs = { id: 'ics.ics.custom', value: [] };
Object.keys(source).forEach(function(el) {
if (expectedKeys.indexOf(el) !== -1) {
return;
}
customIcs.value.push({ name: el, value: [source[el].trim()] });
});
soln['ics.custom'] = customIcs;
}
defaults[solnKey] = soln;
return defaults;
}