|
|
@ -5,32 +5,31 @@ import axios from 'axios';
|
|
|
|
import path from 'path';
|
|
|
|
import path from 'path';
|
|
|
|
import icalGenerator from 'ical-generator';
|
|
|
|
import icalGenerator from 'ical-generator';
|
|
|
|
|
|
|
|
|
|
|
|
const app = express();
|
|
|
|
const server = express();
|
|
|
|
app.use(express.json());
|
|
|
|
server.use(express.json());
|
|
|
|
|
|
|
|
|
|
|
|
// Determine the merged calendars directory based on the environment
|
|
|
|
// Determine the merged calendars directory based on the environment
|
|
|
|
const MERGED_CALENDARS_DIR = 'calendar';
|
|
|
|
const MERGED_CALENDARS_DIR = 'calendar';
|
|
|
|
console.log(`Merged calendars directory: ${MERGED_CALENDARS_DIR} under ${process.cwd()}`);
|
|
|
|
console.log(`Merged calendars directory: ${MERGED_CALENDARS_DIR} under ${process.cwd()}`);
|
|
|
|
|
|
|
|
|
|
|
|
// Ensure the merged calendars directory exists
|
|
|
|
// Ensure the merged calendars directory exists
|
|
|
|
fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true });
|
|
|
|
fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true });
|
|
|
|
|
|
|
|
|
|
|
|
app.get('/script.js', (req, res) => {
|
|
|
|
// FRONTEND
|
|
|
|
|
|
|
|
server.get('/', (req, res) => {
|
|
|
|
|
|
|
|
res.sendFile('index.html', { root: '.' });
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
server.get('/script.js', (req, res) => {
|
|
|
|
res.setHeader('Content-Type', 'application/javascript');
|
|
|
|
res.setHeader('Content-Type', 'application/javascript');
|
|
|
|
res.sendFile('script.js', { root: '.' });
|
|
|
|
res.sendFile('script.js', { root: '.' });
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
app.get('/', (req, res) => {
|
|
|
|
|
|
|
|
res.sendFile('index.html', { root: '.' });
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to sanitize the linkGroupName for use as a filename
|
|
|
|
// Function to sanitize the linkGroupName for use as a filename
|
|
|
|
function sanitizeFilename(filename) {
|
|
|
|
function sanitizeFilename(filename) {
|
|
|
|
return filename.replace(/[<>:"/\\|?* ]/g, '_'); // Replace invalid characters with underscores
|
|
|
|
return filename.replace(/[<>:"/\\|?* ]/g, '_'); // Replace invalid characters with underscores
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Merge calendars endpoint
|
|
|
|
// Merge calendars endpoint
|
|
|
|
app.post('/merge', async (req, res) => {
|
|
|
|
server.post('/merge', async (req, res) => {
|
|
|
|
const { linkGroupName, calendars } = req.body;
|
|
|
|
const { linkGroupName, calendars } = req.body;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -131,7 +130,7 @@ app.post('/merge', async (req, res) => {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Serve the merged calendar file and refresh if older than an hour
|
|
|
|
// Serve the merged calendar file and refresh if older than an hour
|
|
|
|
app.get('/calendar/:name', async (req, res) => {
|
|
|
|
server.get('/calendar/:name', async (req, res) => {
|
|
|
|
const calendarName = req.params.name;
|
|
|
|
const calendarName = req.params.name;
|
|
|
|
const icsFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.ics`);
|
|
|
|
const icsFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.ics`);
|
|
|
|
const jsonFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.json`);
|
|
|
|
const jsonFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.json`);
|
|
|
@ -238,13 +237,4 @@ function saveCalendarData(calendarId, linkGroupName, calendars) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Start the server
|
|
|
|
export default server;
|
|
|
|
if (process.env.NODE_ENV !== 'test') {
|
|
|
|
|
|
|
|
const port = 3000;
|
|
|
|
|
|
|
|
app.listen(port, () => {
|
|
|
|
|
|
|
|
console.log(`Server started on port ${port}`);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export default app;
|
|
|
|
|
|
|
|