const axios = require("axios"); module.exports = (fastify, opts, done) => { fastify.get("/flight/:id", async (req, reply) => { const ENDPOINT = "https://www.flightradar24.com/v1/search/web/find"; const FORMAT = "-"; if (req.params.id) { axios .get(ENDPOINT, { params: { format: FORMAT, query: req.params.id, limit: 16, type: "schedule", }, }) .then((res) => reply.send(res.data)); } else { return reply.send([]); } return reply; }); fastify.get("/place/:id", async (req, reply) => { const ENDPOINT = "https://nominatim.openstreetmap.org/"; const FORMAT = "jsonv2"; if (req.params.id) { axios .get(ENDPOINT, { params: { format: FORMAT, q: req.params.id, }, }) .then((res) => reply.send(res.data)); } else { return reply.send([]); } return reply; }); fastify.get("/gpx/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); fastify.level.db.get(req.params.id, (err, val) => { if (err) { console.warn(err); reply.code(500).send(); } else { let file = '' const data = JSON.parse(val); const gen_wpt = (name,desc,latlon,icon="Flag") => `0${name}-${desc}${icon}` const esc_str = (str) => (str||"Undefined").replace('"',""").replace("'","'").replace("<","<").replace(">",">").replace("&","&").replace("\n","...") data.main.forEach(a => { file+= gen_wpt(esc_str(a.hotel.name), esc_str(a.hotel.notes), a.hotel.latlon, icon="Hotel"); a.places.restaurants.forEach(b => { file+= gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, icon="Restaurant"); }); a.places.activities.forEach(b => { file+= gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, icon="Tree"); }); }); file+=""; reply.header('Content-Type', 'application/gpx+xml'); reply.header('Content-Disposition', `attachment; filename=${req.params.id}.gpx`); reply.send(file); } }); return reply; }); fastify.get("/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); fastify.level.db.get(req.params.id, (err, val) => { if (err) { console.warn(err); reply.code(500).send(); } else { reply.send(JSON.parse(val)); } }); return reply; }); fastify.post("/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); fastify.level.db.put(req.params.id, JSON.stringify(req.body), (err) => { if (err) { console.warn(err); reply.code(500).send({ error: "Error with DB" }); } else { reply.send({ content: "ok" }); } }); return reply; }); done(); };