New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

turn-admin-client

Package Overview
Dependencies
Maintainers
4
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

turn-admin-client - npm Package Compare versions

Comparing version 0.1.4 to 0.1.5

spec/fixtures/index.js

111

lib/parser.js
'use strict';
var ipRegexString = '(?:[0-9]{1,3}\\.){3}[0-9]{1,3}';
var regex = /(\d)\)\s+id=(\d+), user <([a-zA-Z0-9\-\=\.]+)>:\n\s+started\s(\d+)\s(secs|mins|hours|days)\sago\n\s+expiring\sin\s(\d+)\s(secs|mins|hours|days)\n\s+client\sprotocol\s(UDP|TCP),\srelay\sprotocol\s(UDP|TCP)\n\s+client\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+),\sserver\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+)\n\s+relay\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+)\n\s+fingerprints\senforced:\s(OFF|ON)\n\s+mobile:\s(OFF|ON)\n\s+SHA256:\s(OFF|ON)\n\s+SHA\stype:\s(SHA1)\s+usage:\srp=(\d+),\srb=(\d+),\ssp=(\d+),\ssb=(\d+)\n\s+rate:\sr=(\d+),\ss=(\d),\stotal=(\d+)\s\(bytes\sper\ssec\)\n\s+peers:\n\s+([\s\.\d\n]+)$/;
var parseData = {
header: {
regex: /(\d)\)\s+id=(\d+), user <([a-zA-Z0-9\-\=\.]+)>:\n/,
captureKeys: [ 'recordNumber', 'id', 'user' ]
},
timing: {
regex: /\n\s+started\s(\d+)\s(secs|mins|hours|days)\sago\n\s+expiring\sin\s(\d+)\s(secs|mins|hours|days)\n/,
captureKeys: [ 'started', 'startedTimeFormat', 'expires', 'expiresTimeFormat' ]
},
protocol: {
regex: /\n\s+client\sprotocol\s(UDP|TCP),\srelay\sprotocol\s(UDP|TCP)\n/,
captureKeys: [ 'clientProtocol', 'relayProtocol' ]
},
addresses: {
regex: /\n\s+client\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+),\sserver\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+)\n\s+relay\saddr\s((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+)\n/,
captureKeys: [ 'clientAddress', 'serverAddress', 'relayAddress' ]
},
properties: {
regex: /\n\s+fingerprints\senforced:\s(OFF|ON)\n\s+mobile:\s(OFF|ON)\n\s+SHA256:\s(OFF|ON)\n\s+SHA\stype:\s(SHA1)\n/,
captureKeys: [ 'fingerprints', 'mobile', 'SHA256', 'SHAType' ]
},
usage: {
regex: /\n\s+usage:\srp=(\d+),\srb=(\d+),\ssp=(\d+),\ssb=(\d+)\n/,
captureKeys: [ 'usageRP', 'usageRB', 'usageSP', 'usageSB' ]
},
rate: {
regex: /\n\s+rate:\sr=(\d+),\ss=(\d+),\stotal=(\d+)\s\(bytes\sper\ssec\)\n/,
captureKeys: [ 'rateR', 'rateS', 'rateTotal' ]
},
peers: {
regex: /\n\s+peers:\n\s+([\s\.\d\n:]+)$/,
captureKeys: [ 'peers' ]
}
};
var ipRegexString = '(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?::\\d+){0,1}';
var ipAddressRegex = new RegExp(ipRegexString);
var captureKeys = [
'recordNumber',
'id',
'user',
'started',
'startedTimeFormat',
'expires',
'expiresTimeFormat',
'clientProtocol',
'relayProtocol',
'clientAddress',
'serverAddress',
'relayAddress',
'fingerprints',
'mobile',
'SHA256',
'SHAType',
'usageRP',
'usageRB',
'usageSP',
'usageSB',
'rateR',
'rateS',
'rateTotal',
'peers'//special case, going to be an array
];
module.exports = function parseResult(string) {
module.exports = function parseResult(source) {
var results = {};
var parsed = regex.exec(string);
var clean = source.replace(/\r\n/g, '\n');
if (!parsed) {
throw new Error('No Turn Session Data');
}
Object.keys(parseData).forEach(function (dataPoint) {
var parseCriteria = parseData[dataPoint];
var parsed = parseCriteria.regex.exec(clean);
parsed.shift();
if (!parsed) {
throw new Error("unable to parse '" + dataPoint + "' from data.");
}
captureKeys.forEach(function (capture, index) {
parsed.shift();
if (capture === 'peers') {
//if we're at peers we've still got some work to do
results[capture] = [];
parseCriteria.captureKeys.forEach(function (captureKey, index) {
if (captureKey !== 'peers') {
results[captureKey] = parsed[index];
return;
}
var ipAddresses = parsed[index].split('\n');
ipAddresses.forEach(function getIpAddresses(line) {
var ipAddress = ipAddressRegex.exec(line);
if (ipAddress && ipAddress[0]) {
results[capture].push(ipAddress[0]);
}
// 'peers' capture needs special treatment
results[captureKey] = [];
var ipAddresses = parsed[index].split('\n');
ipAddresses.forEach(function getIpAddresses(line) {
var ipAddress = ipAddressRegex.exec(line);
if (ipAddress && ipAddress[0]) {
results[captureKey].push(ipAddress[0]);
}
});
});
return;
}
results[capture] = parsed[index];
});

@@ -66,0 +73,0 @@

@@ -50,3 +50,3 @@ 'use strict';

}, this.encoding, '\n\n');
}, this.encoding, '\r\n\r\n');

@@ -57,5 +57,5 @@ };

TurnAdminClient.prototype.disconnect = function () {
this.conn.end();
this.conn.destroy();
};
module.exports = TurnAdminClient;
{
"name": "turn-admin-client",
"version": "0.1.4",
"version": "0.1.5",
"description": "A tool to access live TURN administrative information",

@@ -5,0 +5,0 @@ "keywords": [

@@ -10,2 +10,3 @@ 'use strict';

describe('run a mock turn interface server', function () {
before(function () {

@@ -47,9 +48,9 @@ mockServer = mockTurnServer();

sessions[0].SHAType.should.be.equal('SHA1');
sessions[0].usageRP.should.be.equal('6');
sessions[0].usageRB.should.be.equal('1204');
sessions[0].usageSP.should.be.equal('5');
sessions[0].usageSB.should.be.equal('508');
sessions[0].rateR.should.be.equal('0');
sessions[0].rateS.should.be.equal('0');
sessions[0].rateTotal.should.be.equal('0');
sessions[0].usageRP.should.be.equal('485803');
sessions[0].usageRB.should.be.equal('419430588');
sessions[0].usageSP.should.be.equal('398933');
sessions[0].usageSB.should.be.equal('325623225');
sessions[0].rateR.should.be.equal('255750');
sessions[0].rateS.should.be.equal('198550');
sessions[0].rateTotal.should.be.equal('454300');
sessions[0].peers.should.be.instanceof(Array);

@@ -59,3 +60,3 @@ sessions[0].peers.should.be.deep.equal([

'216.207.245.1',
'10.24.250.86',
'10.24.250.86:12345',
'54.200.182.167'

@@ -82,14 +83,14 @@ ]);

sessions[1].SHAType.should.be.equal('SHA1');
sessions[1].usageRP.should.be.equal('6');
sessions[1].usageRB.should.be.equal('1184');
sessions[1].usageSP.should.be.equal('5');
sessions[1].usageSB.should.be.equal('508');
sessions[1].rateR.should.be.equal('0');
sessions[1].rateS.should.be.equal('0');
sessions[1].rateTotal.should.be.equal('0');
sessions[1].usageRP.should.be.equal('398934');
sessions[1].usageRB.should.be.equal('325625221');
sessions[1].usageSP.should.be.equal('485802');
sessions[1].usageSB.should.be.equal('419428548');
sessions[1].rateR.should.be.equal('199525');
sessions[1].rateS.should.be.equal('257002');
sessions[1].rateTotal.should.be.equal('456527');
sessions[1].peers.should.be.instanceof(Array);
sessions[1].peers.should.be.deep.equal([
'10.24.65.91',
'216.207.245.1',
'10.24.250.86',
'216.207.245.1:12345',
'10.24.250.86:12345',
'54.200.182.167'

@@ -96,0 +97,0 @@ ]);

'use strict';
var net = require('net');
var fs = require('fs');
var testData = fs.readFileSync(__dirname + '/testData.txt');
var fixtures = require('../fixtures');

@@ -18,13 +17,7 @@ module.exports = function () {

if (data.indexOf('ps') !== -1) {
conn.write('\n' + testData + '\n>');
conn.write(fixtures.fullSessionData + fixtures.prompt);
}
});
conn.write(
'TURN Server\n' +
'rfc5766-turn-server\n' +
'Citrix-3.2.2.8 \'Marshal West\'\n\n' +
'Type \'?\' for help\n' +
'>'
);
conn.write(fixtures.welcomeMessageData + fixtures.prompt);
});

@@ -31,0 +24,0 @@

'use strict';
var parse = require('../../lib/parser');
var fs = require('fs');
var sampleSessionRecord = require('../fixtures').singleSessionEntry;
var chai = require('chai');
var should = chai.should();
var testString = fs.readFileSync(__dirname + '/lib/testString.txt');
describe('Parse some test admin TURN data', function () {
it('should return an object', function () {
var results = parse(testString);
var results = parse(sampleSessionRecord);
should.exist(results);

@@ -28,9 +26,9 @@

results.SHAType.should.be.equal('SHA1');
results.usageRP.should.be.equal('6');
results.usageRB.should.be.equal('1204');
results.usageSP.should.be.equal('5');
results.usageSB.should.be.equal('508');
results.rateR.should.be.equal('0');
results.rateS.should.be.equal('0');
results.rateTotal.should.be.equal('0');
results.usageRP.should.be.equal('485803');
results.usageRB.should.be.equal('419430588');
results.usageSP.should.be.equal('398933');
results.usageSB.should.be.equal('325623225');
results.rateR.should.be.equal('255750');
results.rateS.should.be.equal('198550');
results.rateTotal.should.be.equal('454300');
results.peers.should.be.instanceof(Array);

@@ -40,3 +38,3 @@ results.peers.should.be.deep.equal([

'216.207.245.1',
'10.24.250.86',
'10.24.250.86:12345',
'54.200.182.167'

@@ -43,0 +41,0 @@ ]);

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc