require("dotenv").config(); const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const app = express(); const port = process.env.SERVER_PORT || 3000; const db = new sqlite3.Database('astrocom.db', (err) => { if (err) { console.error('Error connecting to database:', err); } else { console.log('Connected to SQLite database'); } }); const bypass = false // Create 'routes' table // We need to store server address, port, secret, block_start and block_length. Then make a query that takes in an arbitrary number, and returns a row if that number between block start and block start + block length. db.run('CREATE TABLE IF NOT EXISTS routes (server TEXT NOT NULL, port INTEGER NOT NULL DEFAULT 4569, auth TEST NOT NULL DEFAULT astrocom, secret TEXT NOT NULL, block_start INTEGER UNIQUE NOT NULL, block_length INTEGER NOT NULL DEFAULT 9999, apiKey TEXT NOT NULL)'); // Query to get a route app.get('/api/v1/route/:apiKey/:ani/:number', (req, res) => { const apiKey = req.params.apiKey; const number = Number(req.params.number); const ani = Number(req.params.ani); console.log(`${apiKey}:${req.params.ani}:${number}`); db.get("SELECT * FROM routes WHERE apiKey = ? AND block_start <= ? AND block_start + block_length >= ?", [apiKey, ani, ani], (err, row) => { // If no row or error, return 401 if (err || !row) { console.error(err); console.log(row) res.status(401).send(`${process.env.MSG_ROUTE_ADDRESS}/401`) return; } db.get('SELECT * FROM routes WHERE block_start <= ? AND block_start + block_length >= ?', [number, number], (err, row) => { if (err) { console.error('Error getting route:', err); res.status(500).send(`${process.env.MSG_ROUTE_ADDRESS}/500`) } else if (row) { // Check if the ANI is within the block range // If it is, return `local` if (!bypass && (req.params.ani >= row.block_start && req.params.ani <= row.block_start + row.block_length)) { console.log("sent local") res.status(200).send('local'); } else { console.log("sent remote") res.status(200).send(`IAX2/${row.auth}:${row.secret}@${row.server}:${row.port}/${number}`); } } else { console.log("boowomp") res.status(404).send(`${process.env.MSG_ROUTE_ADDRESS}/404`); } }); }); }); // Middleware for parsing JSON bodies app.use(express.json()); // Basic route app.get('/api/v1/call', (req, res) => { res.json({ message: 'Welcome to the API' }); }); // Start server app.listen(port, () => { console.log(`Server is running on port ${port}`); });