diff --git a/src/server.js b/src/server.js index f6da4e4..7c7138b 100644 --- a/src/server.js +++ b/src/server.js @@ -13,10 +13,17 @@ const ERR_NEEDMOREPARAMS = '461' let server = {} -server.create = function create() { +server.create = function create(config = {}) { + let password + if (config.password) { + password = config.password + } let userlist = {} let server = net.createServer((socket) => { const user = new User(socket) + if (!config.password) { + user.authenticated = true + } socket.on('data', function (data) { data.toString("ascii").split("\r\n").forEach(function (commandline) { if (commandline == "") { @@ -76,8 +83,11 @@ server.create = function create() { server.closeConnection(user.nickname) break; case "PASS": - if (tokenized[1]) - user.setPassword(tokenized[1]) + if (tokenized[1] === config.password) { + user.authenticated = true + } else { + user.closeConnection() + } break; default: diff --git a/src/user.js b/src/user.js index f207aef..b54678e 100644 --- a/src/user.js +++ b/src/user.js @@ -1,5 +1,6 @@ function User(socket) { this.registered = false + this.authenticated = false this.nickname = "" this.connection = socket this.realname = "" @@ -17,6 +18,9 @@ function User(socket) { } this.register = function(username, realname) { + if (!this.authenticated) { + this.connection.destroy() + } this.username = username this.realname = realname this.registered = true @@ -33,7 +37,7 @@ function User(socket) { } this.closeConnection = function () { - socket.destroy() + this.connection.destroy() } diff --git a/test/command_pass.js b/test/command_pass.js index 36e605d..653a25a 100644 --- a/test/command_pass.js +++ b/test/command_pass.js @@ -4,21 +4,31 @@ const IRCServer = require("../src/server.js"); describe("PASS OK", function () { it("should handle a PASS command -> PASS some_passwd", function (done) { - const server = IRCServer.create() + const server = IRCServer.create({ + password: "itsJustATest" + }) let mockedSock = new EventEmitter() + mockedSock.address = function() { + return { port: 12346, family: 'IPv4', address: '127.0.0.1' } + } + + mockedSock.write = function (data) { + return + } mockedSock.destroy = function () { done("Destroyed socket without answering") } server.emit("connection", mockedSock) - mockedSock.emit('data', Buffer.from("PASS some_pass\r\n", "ascii")) + mockedSock.emit('data', Buffer.from("PASS itsJustATest\r\n", "ascii")) mockedSock.emit('data', Buffer.from("NICK some_nick\r\n", "ascii")) + mockedSock.emit('data', Buffer.from("USER guest tolmoon tolsun :Ronnie Reagan\r\n", "ascii")) user = server.getUserlist()["some_nick"] - assert.equal("some_pass", user["password"]) + assert.equal(user["registered"], true) done() }) -}) \ No newline at end of file +})