sotlas-api/mapkey.js

58 wiersze
1.9 KiB
JavaScript

const express = require("express");
const config = require('./config')
const { expressjwt: jwt } = require('express-jwt')
const { expressJwtSecret } = require('jwks-rsa')
const axios = require('axios')
let router = express.Router();
module.exports = router;
let jwtCallback = jwt({
credentialsRequired: false,
secret: expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: config.sso.jwksUri
}),
algorithms: ['RS256']
});
router.get("/get", jwtCallback, async (req, res) => {
res.cacheControl = {
noCache: true
};
// Must either be logged in or have a valid Turnstile token
if (req.auth) {
console.log('Request for MapTiler key with SSO login from user ' + req.auth.userid);
res.json({mapTilerApiKey: config.mapTiler.apiKey});
return;
}
if (req.query.token) {
try {
const params = {
secret: config.turnstile.secretKey,
response: req.query.token,
remoteip: req.ip
};
const response = await axios.post('https://challenges.cloudflare.com/turnstile/v0/siteverify', params);
if (response.data.success) {
console.log('Request for MapTiler key with successful Captcha response from ' + req.ip);
res.json({mapTilerApiKey: config.mapTiler.apiKey});
return;
} else {
console.error('Turnstile validation failed:', response.data['error-codes']);
}
} catch (error) {
console.error('Turnstile validation error:', error);
}
}
console.error('Request for MapTiler key without SSO login or Captcha response from ' + req.ip);
return res.status(401).send('Unable to verify SSO login or Captcha response').end();
});
module.exports = router;