Merge pull request #749 from thelounge/xpaw/hexip
Add support for hexip ilines and fix storing client ip in config
This commit is contained in:
commit
303fab8519
@ -109,6 +109,17 @@ module.exports = {
|
|||||||
//
|
//
|
||||||
lockNetwork: false,
|
lockNetwork: false,
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hex IP
|
||||||
|
//
|
||||||
|
// If enabled, clients' username will be set to their IP encoded has hex.
|
||||||
|
// This is done to share the real user IP address with the server for host masking purposes.
|
||||||
|
//
|
||||||
|
// @type boolean
|
||||||
|
// @default false
|
||||||
|
//
|
||||||
|
useHexIp: false,
|
||||||
|
|
||||||
//
|
//
|
||||||
// WEBIRC support
|
// WEBIRC support
|
||||||
//
|
//
|
||||||
|
@ -175,6 +175,9 @@ Client.prototype.connect = function(args) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args.ip = args.ip || (client.config && client.config.ip) || client.ip;
|
||||||
|
args.hostname = args.hostname || (client.config && client.config.hostname) || client.hostname;
|
||||||
|
|
||||||
var network = new Network({
|
var network = new Network({
|
||||||
name: args.name || "",
|
name: args.name || "",
|
||||||
host: args.host || "",
|
host: args.host || "",
|
||||||
@ -219,8 +222,9 @@ Client.prototype.connect = function(args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.webirc && network.host in config.webirc) {
|
if (config.webirc && network.host in config.webirc) {
|
||||||
args.ip = args.ip || (client.config && client.config.ip) || client.ip;
|
if (!args.hostname) {
|
||||||
args.hostname = args.hostname || (client.config && client.config.hostname) || client.hostname || args.ip;
|
args.hostname = args.ip;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.ip) {
|
if (args.ip) {
|
||||||
if (config.webirc[network.host] instanceof Function) {
|
if (config.webirc[network.host] instanceof Function) {
|
||||||
@ -259,7 +263,7 @@ Client.prototype.connect = function(args) {
|
|||||||
host: network.host,
|
host: network.host,
|
||||||
port: network.port,
|
port: network.port,
|
||||||
nick: nick,
|
nick: nick,
|
||||||
username: network.username,
|
username: config.useHexIp ? Helper.ip2hex(args.ip) : network.username,
|
||||||
gecos: network.realname,
|
gecos: network.realname,
|
||||||
password: network.password,
|
password: network.password,
|
||||||
tls: network.tls,
|
tls: network.tls,
|
||||||
@ -270,6 +274,8 @@ Client.prototype.connect = function(args) {
|
|||||||
auto_reconnect_max_retries: 360, // At least one hour (plus timeouts) worth of reconnections
|
auto_reconnect_max_retries: 360, // At least one hour (plus timeouts) worth of reconnections
|
||||||
webirc: webirc,
|
webirc: webirc,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
client.save();
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.updateToken = function(callback) {
|
Client.prototype.updateToken = function(callback) {
|
||||||
@ -456,7 +462,31 @@ Client.prototype.quit = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.clientAttach = function(socketId) {
|
Client.prototype.clientAttach = function(socketId) {
|
||||||
this.attachedClients[socketId] = this.lastActiveChannel;
|
var client = this;
|
||||||
|
var save = false;
|
||||||
|
|
||||||
|
client.attachedClients[socketId] = client.lastActiveChannel;
|
||||||
|
|
||||||
|
// Update old networks to store ip and hostmask
|
||||||
|
client.networks.forEach(network => {
|
||||||
|
if (!network.ip) {
|
||||||
|
save = true;
|
||||||
|
network.ip = (client.config && client.config.ip) || client.ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!network.hostname) {
|
||||||
|
var hostmask = (client.config && client.config.hostname) || client.hostname;
|
||||||
|
|
||||||
|
if (hostmask) {
|
||||||
|
save = true;
|
||||||
|
network.hostmask = hostmask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (save) {
|
||||||
|
client.save();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.clientDetach = function(socketId) {
|
Client.prototype.clientDetach = function(socketId) {
|
||||||
|
@ -5,6 +5,7 @@ var _ = require("lodash");
|
|||||||
var path = require("path");
|
var path = require("path");
|
||||||
var os = require("os");
|
var os = require("os");
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
|
var net = require("net");
|
||||||
var bcrypt = require("bcrypt-nodejs");
|
var bcrypt = require("bcrypt-nodejs");
|
||||||
|
|
||||||
var Helper = {
|
var Helper = {
|
||||||
@ -15,6 +16,7 @@ var Helper = {
|
|||||||
setHome: setHome,
|
setHome: setHome,
|
||||||
getVersion: getVersion,
|
getVersion: getVersion,
|
||||||
getGitCommit: getGitCommit,
|
getGitCommit: getGitCommit,
|
||||||
|
ip2hex: ip2hex,
|
||||||
|
|
||||||
password: {
|
password: {
|
||||||
hash: passwordHash,
|
hash: passwordHash,
|
||||||
@ -75,6 +77,23 @@ function getUserLogsPath(name, network) {
|
|||||||
return path.join(this.HOME, "logs", name, network);
|
return path.join(this.HOME, "logs", name, network);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ip2hex(address) {
|
||||||
|
// no ipv6 support
|
||||||
|
if (!net.isIPv4(address)) {
|
||||||
|
return "00000000";
|
||||||
|
}
|
||||||
|
|
||||||
|
return address.split(".").map(function(octet) {
|
||||||
|
var hex = parseInt(octet, 10).toString(16);
|
||||||
|
|
||||||
|
if (hex.length === 1) {
|
||||||
|
hex = "0" + hex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hex;
|
||||||
|
}).join("");
|
||||||
|
}
|
||||||
|
|
||||||
function expandHome(shortenedPath) {
|
function expandHome(shortenedPath) {
|
||||||
var home;
|
var home;
|
||||||
|
|
||||||
|
@ -147,6 +147,8 @@ function init(socket, client) {
|
|||||||
} else {
|
} else {
|
||||||
socket.emit("authorized");
|
socket.emit("authorized");
|
||||||
|
|
||||||
|
client.ip = getClientIp(socket.request);
|
||||||
|
|
||||||
socket.on("disconnect", function() {
|
socket.on("disconnect", function() {
|
||||||
client.clientDetach(socket.id);
|
client.clientDetach(socket.id);
|
||||||
});
|
});
|
||||||
|
19
test/tests/hexip.js
Normal file
19
test/tests/hexip.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const expect = require("chai").expect;
|
||||||
|
const Helper = require("../../src/helper");
|
||||||
|
|
||||||
|
describe("HexIP", function() {
|
||||||
|
it("should correctly convert IPv4 to hex", function() {
|
||||||
|
expect(Helper.ip2hex("66.124.160.150")).to.equal("427ca096");
|
||||||
|
expect(Helper.ip2hex("127.0.0.1")).to.equal("7f000001");
|
||||||
|
expect(Helper.ip2hex("0.0.0.255")).to.equal("000000ff");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("unsupported addresses return default", function() {
|
||||||
|
expect(Helper.ip2hex("0.0.0.999")).to.equal("00000000");
|
||||||
|
expect(Helper.ip2hex("localhost")).to.equal("00000000");
|
||||||
|
expect(Helper.ip2hex("::1")).to.equal("00000000");
|
||||||
|
expect(Helper.ip2hex("2606:2800:220:1:248:1893:25c8:1946")).to.equal("00000000");
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user