[mirotalksfu] - add IPLookup on server side (optional)
هذا الالتزام موجود في:
@@ -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",
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم