[mirotalksfu] - add IPLookup on server side (optional)

هذا الالتزام موجود في:
Miroslav Pejic
2023-04-18 09:44:35 +02:00
الأصل e0b72dd15c
التزام a4bdf0f910
3 ملفات معدلة مع 32 إضافات و5 حذوفات

عرض الملف

@@ -8,6 +8,9 @@
███████ ███████ ██  ██   ████   ███████ ██  ██              ███████ ███████ ██  ██   ████   ███████ ██  ██             
dependencies: { dependencies: {
@sentry/node : https://www.npmjs.com/package/@sentry/node
@sentry/integrations : https://www.npmjs.com/package/@sentry/integrations
axios : https://www.npmjs.com/package/axios
body-parser : https://www.npmjs.com/package/body-parser body-parser : https://www.npmjs.com/package/body-parser
compression : https://www.npmjs.com/package/compression compression : https://www.npmjs.com/package/compression
colors : https://www.npmjs.com/package/colors colors : https://www.npmjs.com/package/colors
@@ -20,8 +23,6 @@ dependencies: {
ngrok : https://www.npmjs.com/package/ngrok ngrok : https://www.npmjs.com/package/ngrok
openai : https://www.npmjs.com/package/openai openai : https://www.npmjs.com/package/openai
qs : https://www.npmjs.com/package/qs qs : https://www.npmjs.com/package/qs
@sentry/node : https://www.npmjs.com/package/@sentry/node
@sentry/integrations : https://www.npmjs.com/package/@sentry/integrations
socket.io : https://www.npmjs.com/package/socket.io socket.io : https://www.npmjs.com/package/socket.io
swagger-ui-express : https://www.npmjs.com/package/swagger-ui-express swagger-ui-express : https://www.npmjs.com/package/swagger-ui-express
uuid : https://www.npmjs.com/package/uuid uuid : https://www.npmjs.com/package/uuid
@@ -50,10 +51,11 @@ const https = require('httpolyglot');
const mediasoup = require('mediasoup'); const mediasoup = require('mediasoup');
const mediasoupClient = require('mediasoup-client'); const mediasoupClient = require('mediasoup-client');
const http = require('http'); const http = require('http');
const config = require('./config');
const path = require('path'); const path = require('path');
const axios = require('axios');
const ngrok = require('ngrok'); const ngrok = require('ngrok');
const fs = require('fs'); const fs = require('fs');
const config = require('./config');
const checkXSS = require('./XSS.js'); const checkXSS = require('./XSS.js');
const Host = require('./Host'); const Host = require('./Host');
const Room = require('./Room'); const Room = require('./Room');
@@ -722,7 +724,7 @@ function startServer() {
roomList.get(socket.room_id).broadCast(socket.id, 'setVideoOff', data); roomList.get(socket.room_id).broadCast(socket.id, 'setVideoOff', data);
}); });
socket.on('join', (dataObject, cb) => { socket.on('join', async (dataObject, cb) => {
if (!roomList.has(socket.room_id)) { if (!roomList.has(socket.room_id)) {
return cb({ return cb({
error: 'Room does not exist', error: 'Room does not exist',
@@ -732,6 +734,11 @@ function startServer() {
// Get peer IPv4 (::1 Its the loopback address in ipv6, equal to 127.0.0.1 in ipv4) // Get peer IPv4 (::1 Its the loopback address in ipv6, equal to 127.0.0.1 in ipv4)
const peer_ip = socket.handshake.headers['x-forwarded-for'] || socket.conn.remoteAddress; const peer_ip = socket.handshake.headers['x-forwarded-for'] || socket.conn.remoteAddress;
// Get peer Geo Location
if (config.IPLookup.enabled && (peer_ip != '::1' || peer_ip != '127.0.0.1')) {
dataObject.peer_geo = await getPeerGeoLocation(peer_ip);
}
const data = checkXSS(dataObject); const data = checkXSS(dataObject);
log.debug('User joined', data); log.debug('User joined', data);
@@ -1060,6 +1067,15 @@ function startServer() {
} }
}); });
async function getPeerGeoLocation(ip) {
const endpoint = config.IPLookup.getEndpoint(ip);
log.debug('Get peer geo', { ip: ip, endpoint: endpoint });
return axios
.get(endpoint)
.then((response) => response.data)
.catch((error) => log.error(error));
}
function getIP(req) { function getIP(req) {
return req.headers['x-forwarded-for'] || req.socket.remoteAddress; return req.headers['x-forwarded-for'] || req.socket.remoteAddress;
} }

عرض الملف

@@ -80,7 +80,7 @@ module.exports = {
signingSecret: '', signingSecret: '',
}, },
chatGPT: { chatGPT: {
/** /*
ChatGPT ChatGPT
1. Goto https://platform.openai.com/ 1. Goto https://platform.openai.com/
2. Create your account 2. Create your account
@@ -92,6 +92,16 @@ module.exports = {
max_tokens: 1000, max_tokens: 1000,
temperature: 0, temperature: 0,
}, },
IPLookup: {
/*
GeoJS
https://www.geojs.io/docs/v1/endpoints/geo/
*/
enabled: false,
getEndpoint(ip) {
return `https://get.geojs.io/v1/ip/geo/${ip}.json`;
},
},
mediasoup: { mediasoup: {
// Worker settings // Worker settings
numWorkers: Object.keys(os.cpus()).length, numWorkers: Object.keys(os.cpus()).length,

عرض الملف

@@ -35,6 +35,7 @@
"dependencies": { "dependencies": {
"@sentry/integrations": "7.48.0", "@sentry/integrations": "7.48.0",
"@sentry/node": "7.48.0", "@sentry/node": "7.48.0",
"axios": "^1.3.5",
"body-parser": "1.20.2", "body-parser": "1.20.2",
"colors": "1.4.0", "colors": "1.4.0",
"compression": "1.7.4", "compression": "1.7.4",