Dirty GeoJSON API

This commit is contained in:
Liz Cray
2026-04-21 00:08:25 +00:00
parent ea1f00751a
commit a7d3af3323
4 changed files with 125 additions and 7 deletions
+11 -7
View File
@@ -1,12 +1,10 @@
const { loadEnvFile } = require('node:process');
const express = require('express');
const auth = require('express-basic-auth');
const { createHash } = require('crypto');
loadEnvFile();
const app = express();
const port = process.env.PORT || 3000;
const port = 8355;
const geonJsonTemplate = {
type: "FeatureCollection",
features: [],
@@ -15,7 +13,6 @@ const geonJsonTemplate = {
"star-stroked": "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path fill='currentColor' d='M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm73.8 149.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1 0 22.6-12.1 43.5-31.7 54.8L248 280.4c-.2 13-10.9 23.6-24 23.6-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1 0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM192 368a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 104a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM376 80a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM48 408a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm328-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z'/></svg>"
}
};
app.use(auth({
authorizer: (username, password) => {
return true;
@@ -24,17 +21,25 @@ app.use(auth({
app.all('/locations.geojson', (req, res) => {
// Verify Inputs
if (!req.auth.user || !req.auth.password) {
if ((!req.auth.user || !req.auth.password) && (!req.query.auth)) {
res.status(401).send('Unauthorized');
return;
}
// Query Haze API Websocket
let hazePwHash = null;
let hazeUser = null;
if (req.query.auth){
let paramAuth = Buffer.from(req.query.auth, 'base64').toString('utf-8');
hawUser = paramAuth.split(":")[0];
hazePwHash = paramAuth.split(":")[1];
} else {
hazeUser = req.auth.user;
if (/\b[A-Fa-f0-9]{64}\b/.test(req.auth.password)) {
hazePwHash = req.auth.password;
} else {
hazePwHash = createHash('sha256').update(req.auth.password).digest('hex');
}
}
const haze = new WebSocket('wss://do.ecven.com:8120/explr');
haze.addEventListener('message', (event) => {
const data = JSON.parse(event.data);
@@ -46,7 +51,7 @@ app.all('/locations.geojson', (req, res) => {
"body": [
{
"password": hazePwHash,
"email": req.auth.user
"email": hazeUser
}
],
"socketMessageId": 0
@@ -56,7 +61,6 @@ app.all('/locations.geojson', (req, res) => {
if (data['body']['response'] === 1) {
haze_authToken = data['body']['authToken'];
haze_username = data['body']['username'];
console.dir(data);
haze.send('{"event": "getMyLocationsRequest_request","body": [{"higlightImages": true}],"socketMessageId": 0}');
} else {
res.status(401).json({ ...data, password: req.auth.password });