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();
}
};
});
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`
);