mirror of
https://github.com/thelounge/thelounge
synced 2024-11-21 19:43:07 +00:00
commit
c97352905d
48 changed files with 260 additions and 265 deletions
|
@ -45,6 +45,7 @@ rules:
|
||||||
no-useless-constructor: error
|
no-useless-constructor: error
|
||||||
no-useless-return: error
|
no-useless-return: error
|
||||||
no-use-before-define: [error, {functions: false}]
|
no-use-before-define: [error, {functions: false}]
|
||||||
|
no-var: error
|
||||||
object-curly-spacing: [error, never]
|
object-curly-spacing: [error, never]
|
||||||
padded-blocks: [error, never]
|
padded-blocks: [error, never]
|
||||||
prefer-const: error
|
prefer-const: error
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
// Generates a string from "color-1" to "color-32" based on an input string
|
// Generates a string from "color-1" to "color-32" based on an input string
|
||||||
module.exports = function(str) {
|
module.exports = function(str) {
|
||||||
var hash = 0;
|
let hash = 0;
|
||||||
for (var i = 0; i < str.length; i++) {
|
for (let i = 0; i < str.length; i++) {
|
||||||
hash += str.charCodeAt(i);
|
hash += str.charCodeAt(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var diff;
|
let diff;
|
||||||
|
|
||||||
module.exports = function(a, opt) {
|
module.exports = function(a, opt) {
|
||||||
if (a !== diff) {
|
if (a !== diff) {
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
const modes = {
|
||||||
|
"~": "owner",
|
||||||
|
"&": "admin",
|
||||||
|
"!": "admin",
|
||||||
|
"@": "op",
|
||||||
|
"%": "half-op",
|
||||||
|
"+": "voice",
|
||||||
|
"": "normal",
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = function(mode) {
|
module.exports = function(mode) {
|
||||||
var modes = {
|
|
||||||
"~": "owner",
|
|
||||||
"&": "admin",
|
|
||||||
"!": "admin",
|
|
||||||
"@": "op",
|
|
||||||
"%": "half-op",
|
|
||||||
"+": "voice",
|
|
||||||
"": "normal",
|
|
||||||
};
|
|
||||||
return modes[mode];
|
return modes[mode];
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
* Simple slideout menu implementation.
|
* Simple slideout menu implementation.
|
||||||
*/
|
*/
|
||||||
module.exports = function slideoutMenu(viewport, menu) {
|
module.exports = function slideoutMenu(viewport, menu) {
|
||||||
var touchStartPos = null;
|
let touchStartPos = null;
|
||||||
var touchCurPos = null;
|
let touchCurPos = null;
|
||||||
var touchStartTime = 0;
|
let touchStartTime = 0;
|
||||||
var menuWidth = 0;
|
let menuWidth = 0;
|
||||||
var menuIsOpen = false;
|
let menuIsOpen = false;
|
||||||
var menuIsMoving = false;
|
let menuIsMoving = false;
|
||||||
|
|
||||||
function toggleMenu(state) {
|
function toggleMenu(state) {
|
||||||
menuIsOpen = state;
|
menuIsOpen = state;
|
||||||
|
@ -26,7 +26,7 @@ module.exports = function slideoutMenu(viewport, menu) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var touch = e.touches.item(0);
|
const touch = e.touches.item(0);
|
||||||
viewport.classList.toggle("menu-dragging", true);
|
viewport.classList.toggle("menu-dragging", true);
|
||||||
|
|
||||||
menuWidth = parseFloat(window.getComputedStyle(menu).width);
|
menuWidth = parseFloat(window.getComputedStyle(menu).width);
|
||||||
|
@ -42,8 +42,8 @@ module.exports = function slideoutMenu(viewport, menu) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTouchMove(e) {
|
function onTouchMove(e) {
|
||||||
var touch = touchCurPos = e.touches.item(0);
|
const touch = touchCurPos = e.touches.item(0);
|
||||||
var setX = touch.screenX - touchStartPos.screenX;
|
let setX = touch.screenX - touchStartPos.screenX;
|
||||||
|
|
||||||
if (Math.abs(setX > 30)) {
|
if (Math.abs(setX > 30)) {
|
||||||
menuIsMoving = true;
|
menuIsMoving = true;
|
||||||
|
@ -73,8 +73,8 @@ module.exports = function slideoutMenu(viewport, menu) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTouchEnd() {
|
function onTouchEnd() {
|
||||||
var diff = touchCurPos.screenX - touchStartPos.screenX;
|
const diff = touchCurPos.screenX - touchStartPos.screenX;
|
||||||
var absDiff = Math.abs(diff);
|
const absDiff = Math.abs(diff);
|
||||||
|
|
||||||
if (absDiff > menuWidth / 2 || Date.now() - touchStartTime < 180 && absDiff > 50) {
|
if (absDiff > menuWidth / 2 || Date.now() - touchStartTime < 180 && absDiff > 50) {
|
||||||
toggleMenu(diff > 0);
|
toggleMenu(diff > 0);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* eslint strict: 0 */
|
/* eslint strict: 0, no-var: 0 */
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -24,15 +24,15 @@ const Changelog = require("./socket-events/changelog");
|
||||||
const JoinChannel = require("./join-channel");
|
const JoinChannel = require("./join-channel");
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
var sidebar = $("#sidebar, #footer");
|
const sidebar = $("#sidebar, #footer");
|
||||||
var chat = $("#chat");
|
const chat = $("#chat");
|
||||||
|
|
||||||
$(document.body).data("app-name", document.title);
|
$(document.body).data("app-name", document.title);
|
||||||
|
|
||||||
var viewport = $("#viewport");
|
const viewport = $("#viewport");
|
||||||
var sidebarSlide = slideoutMenu(viewport[0], sidebar[0]);
|
const sidebarSlide = slideoutMenu(viewport[0], sidebar[0]);
|
||||||
var contextMenuContainer = $("#context-menu-container");
|
const contextMenuContainer = $("#context-menu-container");
|
||||||
var contextMenu = $("#context-menu");
|
const contextMenu = $("#context-menu");
|
||||||
|
|
||||||
$("#main").on("click", function(e) {
|
$("#main").on("click", function(e) {
|
||||||
if ($(e.target).is(".lt")) {
|
if ($(e.target).is(".lt")) {
|
||||||
|
@ -43,16 +43,16 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
viewport.on("click", ".rt", function(e) {
|
viewport.on("click", ".rt", function(e) {
|
||||||
var self = $(this);
|
const self = $(this);
|
||||||
viewport.toggleClass(self.prop("class"));
|
viewport.toggleClass(self.prop("class"));
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
chat.find(".chan.active .chat").trigger("msg.sticky");
|
chat.find(".chan.active .chat").trigger("msg.sticky");
|
||||||
});
|
});
|
||||||
|
|
||||||
function positionContextMenu(that, e) {
|
function positionContextMenu(that, e) {
|
||||||
var offset;
|
let offset;
|
||||||
var menuWidth = contextMenu.outerWidth();
|
const menuWidth = contextMenu.outerWidth();
|
||||||
var menuHeight = contextMenu.outerHeight();
|
const menuHeight = contextMenu.outerHeight();
|
||||||
|
|
||||||
if (that.hasClass("menu")) {
|
if (that.hasClass("menu")) {
|
||||||
offset = that.offset();
|
offset = that.offset();
|
||||||
|
@ -75,8 +75,8 @@ $(function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function showContextMenu(that, e) {
|
function showContextMenu(that, e) {
|
||||||
var target = $(e.currentTarget);
|
const target = $(e.currentTarget);
|
||||||
var output = "";
|
let output = "";
|
||||||
|
|
||||||
if (target.hasClass("user")) {
|
if (target.hasClass("user")) {
|
||||||
output = templates.contextmenu_item({
|
output = templates.contextmenu_item({
|
||||||
|
@ -193,10 +193,10 @@ $(function() {
|
||||||
input.style.height = input.style.minHeight;
|
input.style.height = input.style.minHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
var input = $("#input")
|
const input = $("#input")
|
||||||
.history()
|
.history()
|
||||||
.on("input", function() {
|
.on("input", function() {
|
||||||
var style = window.getComputedStyle(this);
|
const style = window.getComputedStyle(this);
|
||||||
|
|
||||||
// Start by resetting height before computing as scrollHeight does not
|
// Start by resetting height before computing as scrollHeight does not
|
||||||
// decrease when deleting characters
|
// decrease when deleting characters
|
||||||
|
@ -212,7 +212,7 @@ $(function() {
|
||||||
chat.find(".chan.active .chat").trigger("msg.sticky"); // fix growing
|
chat.find(".chan.active .chat").trigger("msg.sticky"); // fix growing
|
||||||
});
|
});
|
||||||
|
|
||||||
var focus = $.noop;
|
let focus = $.noop;
|
||||||
if (!("ontouchstart" in window || navigator.maxTouchPoints > 0)) {
|
if (!("ontouchstart" in window || navigator.maxTouchPoints > 0)) {
|
||||||
focus = function() {
|
focus = function() {
|
||||||
if (chat.find(".active").hasClass("chan")) {
|
if (chat.find(".active").hasClass("chan")) {
|
||||||
|
@ -238,7 +238,7 @@ $(function() {
|
||||||
$("#form").on("submit", function(e) {
|
$("#form").on("submit", function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
utils.forceFocus();
|
utils.forceFocus();
|
||||||
var text = input.val();
|
const text = input.val();
|
||||||
|
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -265,11 +265,11 @@ $(function() {
|
||||||
utils.toggleNickEditor(true);
|
utils.toggleNickEditor(true);
|
||||||
|
|
||||||
// Selects existing nick in the editable text field
|
// Selects existing nick in the editable text field
|
||||||
var element = document.querySelector("#nick-value");
|
const element = document.querySelector("#nick-value");
|
||||||
element.focus();
|
element.focus();
|
||||||
var range = document.createRange();
|
const range = document.createRange();
|
||||||
range.selectNodeContents(element);
|
range.selectNodeContents(element);
|
||||||
var selection = window.getSelection();
|
const selection = window.getSelection();
|
||||||
selection.removeAllRanges();
|
selection.removeAllRanges();
|
||||||
selection.addRange(range);
|
selection.addRange(range);
|
||||||
});
|
});
|
||||||
|
@ -278,7 +278,7 @@ $(function() {
|
||||||
$("button#submit-nick").on("click", submitNick);
|
$("button#submit-nick").on("click", submitNick);
|
||||||
|
|
||||||
function submitNick() {
|
function submitNick() {
|
||||||
var newNick = $("#nick-value").text().trim();
|
const newNick = $("#nick-value").text().trim();
|
||||||
|
|
||||||
if (newNick.length === 0) {
|
if (newNick.length === 0) {
|
||||||
cancelNick();
|
cancelNick();
|
||||||
|
@ -316,8 +316,8 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
chat.on("click", ".inline-channel", function() {
|
chat.on("click", ".inline-channel", function() {
|
||||||
var name = $(this).data("chan");
|
const name = $(this).data("chan");
|
||||||
var chan = utils.findCurrentNetworkChan(name);
|
const chan = utils.findCurrentNetworkChan(name);
|
||||||
|
|
||||||
if (chan.length) {
|
if (chan.length) {
|
||||||
chan.trigger("click");
|
chan.trigger("click");
|
||||||
|
@ -334,8 +334,8 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
const openWindow = function openWindow(e, data) {
|
const openWindow = function openWindow(e, data) {
|
||||||
var self = $(this);
|
const self = $(this);
|
||||||
var target = self.data("target");
|
const target = self.data("target");
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -372,9 +372,7 @@ $(function() {
|
||||||
sidebarSlide.toggle(false);
|
sidebarSlide.toggle(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastActive = $("#windows > .active");
|
const lastActive = $("#windows > .active")
|
||||||
|
|
||||||
lastActive
|
|
||||||
.removeClass("active")
|
.removeClass("active")
|
||||||
.find(".chat")
|
.find(".chat")
|
||||||
.unsticky();
|
.unsticky();
|
||||||
|
@ -391,7 +389,7 @@ $(function() {
|
||||||
render.trimMessageInChannel(lastActiveChan, 100);
|
render.trimMessageInChannel(lastActiveChan, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
var chan = $(target)
|
const chan = $(target)
|
||||||
.addClass("active")
|
.addClass("active")
|
||||||
.trigger("show");
|
.trigger("show");
|
||||||
|
|
||||||
|
@ -403,7 +401,7 @@ $(function() {
|
||||||
document.title = title;
|
document.title = title;
|
||||||
|
|
||||||
const type = chan.data("type");
|
const type = chan.data("type");
|
||||||
var placeholder = "";
|
let placeholder = "";
|
||||||
if (type === "channel" || type === "query") {
|
if (type === "channel" || type === "query") {
|
||||||
placeholder = `Write to ${chanTitle}`;
|
placeholder = `Write to ${chanTitle}`;
|
||||||
}
|
}
|
||||||
|
@ -417,7 +415,7 @@ $(function() {
|
||||||
utils.setNick(self.closest(".network").data("nick"));
|
utils.setNick(self.closest(".network").data("nick"));
|
||||||
}
|
}
|
||||||
|
|
||||||
var chanChat = chan.find(".chat");
|
const chanChat = chan.find(".chat");
|
||||||
if (chanChat.length > 0 && type !== "special") {
|
if (chanChat.length > 0 && type !== "special") {
|
||||||
chanChat.sticky();
|
chanChat.sticky();
|
||||||
}
|
}
|
||||||
|
@ -481,11 +479,11 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
function closeChan(chan) {
|
function closeChan(chan) {
|
||||||
var cmd = "/close";
|
let cmd = "/close";
|
||||||
|
|
||||||
if (chan.hasClass("lobby")) {
|
if (chan.hasClass("lobby")) {
|
||||||
cmd = "/quit";
|
cmd = "/quit";
|
||||||
var server = chan.find(".name").html();
|
const server = chan.find(".name").html();
|
||||||
if (!confirm("Disconnect from " + server + "?")) { // eslint-disable-line no-alert
|
if (!confirm("Disconnect from " + server + "?")) { // eslint-disable-line no-alert
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -601,17 +599,16 @@ $(function() {
|
||||||
|
|
||||||
if ($("body").hasClass("public") && (window.location.hash === "#connect" || window.location.hash === "")) {
|
if ($("body").hasClass("public") && (window.location.hash === "#connect" || window.location.hash === "")) {
|
||||||
$("#connect").one("show", function() {
|
$("#connect").one("show", function() {
|
||||||
var params = URI(document.location.search);
|
const params = URI(document.location.search).search(true);
|
||||||
params = params.search(true);
|
|
||||||
// Possible parameters: name, host, port, password, tls, nick, username, realname, join
|
// Possible parameters: name, host, port, password, tls, nick, username, realname, join
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only
|
||||||
for (var key in params) {
|
for (let key in params) {
|
||||||
if (params.hasOwnProperty(key)) {
|
if (params.hasOwnProperty(key)) {
|
||||||
var value = params[key];
|
const value = params[key];
|
||||||
// \W searches for non-word characters
|
// \W searches for non-word characters
|
||||||
key = key.replace(/\W/g, "");
|
key = key.replace(/\W/g, "");
|
||||||
|
|
||||||
var element = $("#connect input[name='" + key + "']");
|
const element = $("#connect input[name='" + key + "']");
|
||||||
// if the element exists, it isn't disabled, and it isn't hidden
|
// if the element exists, it isn't disabled, and it isn't hidden
|
||||||
if (element.length > 0 && !element.is(":disabled") && !element.is(":hidden")) {
|
if (element.length > 0 && !element.is(":disabled") && !element.is(":hidden")) {
|
||||||
if (element.is(":checkbox")) {
|
if (element.is(":checkbox")) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ module.exports.initialize = () => {
|
||||||
|
|
||||||
const settings = $("#settings");
|
const settings = $("#settings");
|
||||||
|
|
||||||
for (var i in options) {
|
for (const i in options) {
|
||||||
if (i === "userStyles") {
|
if (i === "userStyles") {
|
||||||
settings.find("#user-specified-css-input").val(options[i]);
|
settings.find("#user-specified-css-input").val(options[i]);
|
||||||
} else if (i === "highlights") {
|
} else if (i === "highlights") {
|
||||||
|
@ -137,8 +137,7 @@ module.exports.initialize = () => {
|
||||||
} else if (name === "userStyles") {
|
} else if (name === "userStyles") {
|
||||||
userStyles.html(options[name]);
|
userStyles.html(options[name]);
|
||||||
} else if (name === "highlights") {
|
} else if (name === "highlights") {
|
||||||
var highlightString = options[name];
|
options.highlights = options[name].split(",").map(function(h) {
|
||||||
options.highlights = highlightString.split(",").map(function(h) {
|
|
||||||
return h.trim();
|
return h.trim();
|
||||||
}).filter(function(h) {
|
}).filter(function(h) {
|
||||||
// Ensure we don't have empty string in the list of highlights
|
// Ensure we don't have empty string in the list of highlights
|
||||||
|
|
|
@ -276,7 +276,7 @@ function loadMoreHistory(entries) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var target = $(entry.target).find(".show-more-button");
|
const target = $(entry.target).find(".show-more-button");
|
||||||
|
|
||||||
if (target.prop("disabled")) {
|
if (target.prop("disabled")) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -68,7 +68,7 @@ function processReceivedMessage(data) {
|
||||||
|
|
||||||
notifyMessage(targetId, channel, data);
|
notifyMessage(targetId, channel, data);
|
||||||
|
|
||||||
var lastVisible = container.find("div:visible").last();
|
const lastVisible = container.find("div:visible").last();
|
||||||
if (data.msg.self
|
if (data.msg.self
|
||||||
|| lastVisible.hasClass("unread-marker")
|
|| lastVisible.hasClass("unread-marker")
|
||||||
|| (lastVisible.hasClass("date-marker")
|
|| (lastVisible.hasClass("date-marker")
|
||||||
|
|
|
@ -4,8 +4,8 @@ const $ = require("jquery");
|
||||||
const escape = require("css.escape");
|
const escape = require("css.escape");
|
||||||
const input = $("#input");
|
const input = $("#input");
|
||||||
|
|
||||||
var serverHash = -1;
|
var serverHash = -1; // eslint-disable-line no-var
|
||||||
var lastMessageId = -1;
|
var lastMessageId = -1; // eslint-disable-line no-var
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
inputCommands: {collapse, expand, join},
|
inputCommands: {collapse, expand, join},
|
||||||
|
@ -92,7 +92,7 @@ const favicon = $("#favicon");
|
||||||
function toggleNotificationMarkers(newState) {
|
function toggleNotificationMarkers(newState) {
|
||||||
// Toggles the favicon to red when there are unread notifications
|
// Toggles the favicon to red when there are unread notifications
|
||||||
if (favicon.data("toggled") !== newState) {
|
if (favicon.data("toggled") !== newState) {
|
||||||
var old = favicon.prop("href");
|
const old = favicon.prop("href");
|
||||||
favicon.prop("href", favicon.data("other"));
|
favicon.prop("href", favicon.data("other"));
|
||||||
favicon.data("other", old);
|
favicon.data("other", old);
|
||||||
favicon.data("toggled", newState);
|
favicon.data("toggled", newState);
|
||||||
|
|
2
index.js
2
index.js
|
@ -8,7 +8,7 @@ process.chdir(__dirname);
|
||||||
// Doing this check as soon as possible allows us to avoid ES6 parser errors or
|
// Doing this check as soon as possible allows us to avoid ES6 parser errors or
|
||||||
// other issues
|
// other issues
|
||||||
// Try to display messages nicely, but gracefully degrade if anything goes wrong
|
// Try to display messages nicely, but gracefully degrade if anything goes wrong
|
||||||
var pkg = require("./package.json");
|
const pkg = require("./package.json");
|
||||||
if (!require("semver").satisfies(process.version, pkg.engines.node)) {
|
if (!require("semver").satisfies(process.version, pkg.engines.node)) {
|
||||||
let colors;
|
let colors;
|
||||||
let log;
|
let log;
|
||||||
|
|
116
src/client.js
116
src/client.js
|
@ -1,20 +1,20 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var colors = require("colors/safe");
|
const colors = require("colors/safe");
|
||||||
var pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
var Chan = require("./models/chan");
|
const Chan = require("./models/chan");
|
||||||
var crypto = require("crypto");
|
const crypto = require("crypto");
|
||||||
var Msg = require("./models/msg");
|
const Msg = require("./models/msg");
|
||||||
var Network = require("./models/network");
|
const Network = require("./models/network");
|
||||||
var ircFramework = require("irc-framework");
|
const ircFramework = require("irc-framework");
|
||||||
var Helper = require("./helper");
|
const Helper = require("./helper");
|
||||||
const UAParser = require("ua-parser-js");
|
const UAParser = require("ua-parser-js");
|
||||||
|
|
||||||
module.exports = Client;
|
module.exports = Client;
|
||||||
|
|
||||||
var id = 0;
|
let id = 0;
|
||||||
var events = [
|
const events = [
|
||||||
"away",
|
"away",
|
||||||
"connection",
|
"connection",
|
||||||
"unhandled",
|
"unhandled",
|
||||||
|
@ -37,7 +37,7 @@ var events = [
|
||||||
"list",
|
"list",
|
||||||
"whois",
|
"whois",
|
||||||
];
|
];
|
||||||
var inputs = [
|
const inputs = [
|
||||||
"ban",
|
"ban",
|
||||||
"ctcp",
|
"ctcp",
|
||||||
"msg",
|
"msg",
|
||||||
|
@ -59,8 +59,7 @@ var inputs = [
|
||||||
"list",
|
"list",
|
||||||
"whois",
|
"whois",
|
||||||
].reduce(function(plugins, name) {
|
].reduce(function(plugins, name) {
|
||||||
var path = "./plugins/inputs/" + name;
|
const plugin = require(`./plugins/inputs/${name}`);
|
||||||
var plugin = require(path);
|
|
||||||
plugin.commands.forEach((command) => plugins[command] = plugin);
|
plugin.commands.forEach((command) => plugins[command] = plugin);
|
||||||
return plugins;
|
return plugins;
|
||||||
}, {});
|
}, {});
|
||||||
|
@ -78,9 +77,9 @@ function Client(manager, name, config = {}) {
|
||||||
manager: manager,
|
manager: manager,
|
||||||
});
|
});
|
||||||
|
|
||||||
var client = this;
|
const client = this;
|
||||||
|
|
||||||
var delay = 0;
|
let delay = 0;
|
||||||
(client.config.networks || []).forEach((n) => {
|
(client.config.networks || []).forEach((n) => {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
client.connect(n);
|
client.connect(n);
|
||||||
|
@ -114,10 +113,10 @@ Client.prototype.emit = function(event, data) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.find = function(channelId) {
|
Client.prototype.find = function(channelId) {
|
||||||
var network = null;
|
let network = null;
|
||||||
var chan = null;
|
let chan = null;
|
||||||
for (var i in this.networks) {
|
for (const i in this.networks) {
|
||||||
var n = this.networks[i];
|
const n = this.networks[i];
|
||||||
chan = _.find(n.channels, {id: channelId});
|
chan = _.find(n.channels, {id: channelId});
|
||||||
if (chan) {
|
if (chan) {
|
||||||
network = n;
|
network = n;
|
||||||
|
@ -135,15 +134,13 @@ Client.prototype.find = function(channelId) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.connect = function(args) {
|
Client.prototype.connect = function(args) {
|
||||||
var config = Helper.config;
|
const client = this;
|
||||||
var client = this;
|
const nick = args.nick || "lounge-user";
|
||||||
|
let webirc = null;
|
||||||
var nick = args.nick || "lounge-user";
|
let channels = [];
|
||||||
var webirc = null;
|
|
||||||
var channels = [];
|
|
||||||
|
|
||||||
if (args.channels) {
|
if (args.channels) {
|
||||||
var badName = false;
|
let badName = false;
|
||||||
|
|
||||||
args.channels.forEach((chan) => {
|
args.channels.forEach((chan) => {
|
||||||
if (!chan.name) {
|
if (!chan.name) {
|
||||||
|
@ -177,8 +174,8 @@ Client.prototype.connect = function(args) {
|
||||||
args.ip = args.ip || (client.config && client.config.ip) || client.ip;
|
args.ip = args.ip || (client.config && client.config.ip) || client.ip;
|
||||||
args.hostname = args.hostname || (client.config && client.config.hostname) || client.hostname;
|
args.hostname = args.hostname || (client.config && client.config.hostname) || client.hostname;
|
||||||
|
|
||||||
var network = new Network({
|
const network = new Network({
|
||||||
name: args.name || (config.displayNetwork ? "" : config.defaults.name) || "",
|
name: args.name || (Helper.config.displayNetwork ? "" : Helper.config.defaults.name) || "",
|
||||||
host: args.host || "",
|
host: args.host || "",
|
||||||
port: parseInt(args.port, 10) || (args.tls ? 6697 : 6667),
|
port: parseInt(args.port, 10) || (args.tls ? 6697 : 6667),
|
||||||
tls: !!args.tls,
|
tls: !!args.tls,
|
||||||
|
@ -197,9 +194,9 @@ Client.prototype.connect = function(args) {
|
||||||
networks: [network.getFilteredClone(this.lastActiveChannel, -1)],
|
networks: [network.getFilteredClone(this.lastActiveChannel, -1)],
|
||||||
});
|
});
|
||||||
|
|
||||||
if (config.lockNetwork) {
|
if (Helper.config.lockNetwork) {
|
||||||
// This check is needed to prevent invalid user configurations
|
// This check is needed to prevent invalid user configurations
|
||||||
if (!Helper.config.public && args.host && args.host.length > 0 && args.host !== config.defaults.host) {
|
if (!Helper.config.public && args.host && args.host.length > 0 && args.host !== Helper.config.defaults.host) {
|
||||||
network.channels[0].pushMessage(client, new Msg({
|
network.channels[0].pushMessage(client, new Msg({
|
||||||
type: Msg.Type.ERROR,
|
type: Msg.Type.ERROR,
|
||||||
text: "Hostname you specified is not allowed.",
|
text: "Hostname you specified is not allowed.",
|
||||||
|
@ -207,9 +204,9 @@ Client.prototype.connect = function(args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
network.host = config.defaults.host;
|
network.host = Helper.config.defaults.host;
|
||||||
network.port = config.defaults.port;
|
network.port = Helper.config.defaults.port;
|
||||||
network.tls = config.defaults.tls;
|
network.tls = Helper.config.defaults.tls;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (network.host.length === 0) {
|
if (network.host.length === 0) {
|
||||||
|
@ -220,17 +217,17 @@ Client.prototype.connect = function(args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.webirc && network.host in config.webirc) {
|
if (Helper.config.webirc && network.host in Helper.config.webirc) {
|
||||||
if (!args.hostname) {
|
if (!args.hostname) {
|
||||||
args.hostname = args.ip;
|
args.hostname = args.ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.ip) {
|
if (args.ip) {
|
||||||
if (config.webirc[network.host] instanceof Function) {
|
if (Helper.config.webirc[network.host] instanceof Function) {
|
||||||
webirc = config.webirc[network.host](client, args);
|
webirc = Helper.config.webirc[network.host](client, args);
|
||||||
} else {
|
} else {
|
||||||
webirc = {
|
webirc = {
|
||||||
password: config.webirc[network.host],
|
password: Helper.config.webirc[network.host],
|
||||||
username: pkg.name,
|
username: pkg.name,
|
||||||
address: args.ip,
|
address: args.ip,
|
||||||
hostname: args.hostname,
|
hostname: args.hostname,
|
||||||
|
@ -247,11 +244,11 @@ Client.prototype.connect = function(args) {
|
||||||
host: network.host,
|
host: network.host,
|
||||||
port: network.port,
|
port: network.port,
|
||||||
nick: nick,
|
nick: nick,
|
||||||
username: config.useHexIp ? Helper.ip2hex(args.ip) : network.username,
|
username: Helper.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,
|
||||||
outgoing_addr: config.bind,
|
outgoing_addr: Helper.config.bind,
|
||||||
rejectUnauthorized: false,
|
rejectUnauthorized: false,
|
||||||
enable_chghost: true,
|
enable_chghost: true,
|
||||||
enable_echomessage: true,
|
enable_echomessage: true,
|
||||||
|
@ -266,8 +263,7 @@ Client.prototype.connect = function(args) {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events.forEach((plugin) => {
|
events.forEach((plugin) => {
|
||||||
var path = "./plugins/irc-events/" + plugin;
|
require(`./plugins/irc-events/${plugin}`).apply(client, [
|
||||||
require(path).apply(client, [
|
|
||||||
network.irc,
|
network.irc,
|
||||||
network,
|
network,
|
||||||
]);
|
]);
|
||||||
|
@ -319,7 +315,7 @@ Client.prototype.updateSession = function(token, ip, request) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.setPassword = function(hash, callback) {
|
Client.prototype.setPassword = function(hash, callback) {
|
||||||
var client = this;
|
const client = this;
|
||||||
|
|
||||||
client.manager.updateUser(client.name, {
|
client.manager.updateUser(client.name, {
|
||||||
password: hash,
|
password: hash,
|
||||||
|
@ -334,7 +330,7 @@ Client.prototype.setPassword = function(hash, callback) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.input = function(data) {
|
Client.prototype.input = function(data) {
|
||||||
var client = this;
|
const client = this;
|
||||||
data.text.split("\n").forEach((line) => {
|
data.text.split("\n").forEach((line) => {
|
||||||
data.text = line;
|
data.text = line;
|
||||||
client.inputLine(data);
|
client.inputLine(data);
|
||||||
|
@ -342,9 +338,8 @@ Client.prototype.input = function(data) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.inputLine = function(data) {
|
Client.prototype.inputLine = function(data) {
|
||||||
var client = this;
|
const client = this;
|
||||||
var text = data.text;
|
const target = client.find(data.target);
|
||||||
var target = client.find(data.target);
|
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -353,6 +348,8 @@ Client.prototype.inputLine = function(data) {
|
||||||
// so that reloading the page will open this channel
|
// so that reloading the page will open this channel
|
||||||
this.lastActiveChannel = target.chan.id;
|
this.lastActiveChannel = target.chan.id;
|
||||||
|
|
||||||
|
let text = data.text;
|
||||||
|
|
||||||
// This is either a normal message or a command escaped with a leading '/'
|
// This is either a normal message or a command escaped with a leading '/'
|
||||||
if (text.charAt(0) !== "/" || text.charAt(1) === "/") {
|
if (text.charAt(0) !== "/" || text.charAt(1) === "/") {
|
||||||
if (target.chan.type === Chan.Type.LOBBY) {
|
if (target.chan.type === Chan.Type.LOBBY) {
|
||||||
|
@ -368,14 +365,14 @@ Client.prototype.inputLine = function(data) {
|
||||||
text = text.substr(1);
|
text = text.substr(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
var args = text.split(" ");
|
const args = text.split(" ");
|
||||||
var cmd = args.shift().toLowerCase();
|
const cmd = args.shift().toLowerCase();
|
||||||
|
|
||||||
var irc = target.network.irc;
|
const irc = target.network.irc;
|
||||||
var connected = irc && irc.connection && irc.connection.connected;
|
let connected = irc && irc.connection && irc.connection.connected;
|
||||||
|
|
||||||
if (cmd in inputs) {
|
if (cmd in inputs) {
|
||||||
var plugin = inputs[cmd];
|
const plugin = inputs[cmd];
|
||||||
if (connected || plugin.allowDisconnected) {
|
if (connected || plugin.allowDisconnected) {
|
||||||
connected = true;
|
connected = true;
|
||||||
plugin.input.apply(client, [target.network, target.chan, cmd, args]);
|
plugin.input.apply(client, [target.network, target.chan, cmd, args]);
|
||||||
|
@ -460,8 +457,8 @@ Client.prototype.sort = function(data) {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "channels":
|
case "channels": {
|
||||||
var network = _.find(this.networks, {id: data.target});
|
const network = _.find(this.networks, {id: data.target});
|
||||||
if (!network) {
|
if (!network) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -473,13 +470,14 @@ Client.prototype.sort = function(data) {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.save();
|
this.save();
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.names = function(data) {
|
Client.prototype.names = function(data) {
|
||||||
var client = this;
|
const client = this;
|
||||||
var target = client.find(data.target);
|
const target = client.find(data.target);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -518,8 +516,8 @@ Client.prototype.quit = function(signOut) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.clientAttach = function(socketId, token) {
|
Client.prototype.clientAttach = function(socketId, token) {
|
||||||
var client = this;
|
const client = this;
|
||||||
var save = false;
|
let save = false;
|
||||||
|
|
||||||
if (client.awayMessage && _.size(client.attachedClients) === 0) {
|
if (client.awayMessage && _.size(client.attachedClients) === 0) {
|
||||||
client.networks.forEach(function(network) {
|
client.networks.forEach(function(network) {
|
||||||
|
@ -544,7 +542,7 @@ Client.prototype.clientAttach = function(socketId, token) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!network.hostname) {
|
if (!network.hostname) {
|
||||||
var hostmask = (client.config && client.config.hostname) || client.hostname;
|
const hostmask = (client.config && client.config.hostname) || client.hostname;
|
||||||
|
|
||||||
if (hostmask) {
|
if (hostmask) {
|
||||||
save = true;
|
save = true;
|
||||||
|
|
|
@ -17,7 +17,7 @@ program
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var child_spawn = child.spawn(
|
const child_spawn = child.spawn(
|
||||||
process.env.EDITOR || "vi",
|
process.env.EDITOR || "vi",
|
||||||
[Helper.getConfigPath()],
|
[Helper.getConfigPath()],
|
||||||
{stdio: "inherit"}
|
{stdio: "inherit"}
|
||||||
|
|
|
@ -56,7 +56,7 @@ program
|
||||||
});
|
});
|
||||||
|
|
||||||
function add(manager, name, password, enableLog) {
|
function add(manager, name, password, enableLog) {
|
||||||
var hash = Helper.password.hash(password);
|
const hash = Helper.password.hash(password);
|
||||||
manager.addUser(name, hash, enableLog);
|
manager.addUser(name, hash, enableLog);
|
||||||
|
|
||||||
log.info(`User ${colors.bold(name)} created.`);
|
log.info(`User ${colors.bold(name)} created.`);
|
||||||
|
|
|
@ -28,7 +28,7 @@ program
|
||||||
log.error(`User ${colors.bold(name)} does not exist.`);
|
log.error(`User ${colors.bold(name)} does not exist.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var child_spawn = child.spawn(
|
const child_spawn = child.spawn(
|
||||||
process.env.EDITOR || "vi",
|
process.env.EDITOR || "vi",
|
||||||
[Helper.getUserConfigPath(name)],
|
[Helper.getUserConfigPath(name)],
|
||||||
{stdio: "inherit"}
|
{stdio: "inherit"}
|
||||||
|
|
|
@ -27,8 +27,8 @@ program
|
||||||
log.error(`User ${colors.bold(name)} does not exist.`);
|
log.error(`User ${colors.bold(name)} does not exist.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var file = Helper.getUserConfigPath(name);
|
const file = Helper.getUserConfigPath(name);
|
||||||
var user = require(file);
|
const user = require(file);
|
||||||
log.prompt({
|
log.prompt({
|
||||||
text: "Enter new password:",
|
text: "Enter new password:",
|
||||||
silent: true,
|
silent: true,
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var path = require("path");
|
const path = require("path");
|
||||||
var os = require("os");
|
const os = require("os");
|
||||||
var fs = require("fs");
|
const fs = require("fs");
|
||||||
var net = require("net");
|
const net = require("net");
|
||||||
var bcrypt = require("bcryptjs");
|
const bcrypt = require("bcryptjs");
|
||||||
const colors = require("colors/safe");
|
const colors = require("colors/safe");
|
||||||
|
|
||||||
let homePath;
|
let homePath;
|
||||||
|
@ -140,7 +140,7 @@ function ip2hex(address) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return address.split(".").map(function(octet) {
|
return address.split(".").map(function(octet) {
|
||||||
var hex = parseInt(octet, 10).toString(16);
|
let hex = parseInt(octet, 10).toString(16);
|
||||||
|
|
||||||
if (hex.length === 1) {
|
if (hex.length === 1) {
|
||||||
hex = "0" + hex;
|
hex = "0" + hex;
|
||||||
|
|
|
@ -22,12 +22,12 @@ class Identification {
|
||||||
log.warn("Using both identd and oidentd at the same time, this is most likely not intended.");
|
log.warn("Using both identd and oidentd at the same time, this is most likely not intended.");
|
||||||
}
|
}
|
||||||
|
|
||||||
var server = net.createServer(this.serverConnection.bind(this));
|
const server = net.createServer(this.serverConnection.bind(this));
|
||||||
server.listen({
|
server.listen({
|
||||||
port: Helper.config.identd.port || 113,
|
port: Helper.config.identd.port || 113,
|
||||||
host: Helper.config.bind || Helper.config.host,
|
host: Helper.config.bind || Helper.config.host,
|
||||||
}, () => {
|
}, () => {
|
||||||
var address = server.address();
|
const address = server.address();
|
||||||
log.info(`Identd server available on ${colors.green(address.address + ":" + address.port)}`);
|
log.info(`Identd server available on ${colors.green(address.address + ":" + address.port)}`);
|
||||||
|
|
||||||
startedCallback(this);
|
startedCallback(this);
|
||||||
|
@ -54,7 +54,7 @@ class Identification {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var connection of this.connections.values()) {
|
for (const connection of this.connections.values()) {
|
||||||
if (connection.socket.remoteAddress === socket.remoteAddress
|
if (connection.socket.remoteAddress === socket.remoteAddress
|
||||||
&& connection.socket.remotePort === fport
|
&& connection.socket.remotePort === fport
|
||||||
&& connection.socket.localPort === lport
|
&& connection.socket.localPort === lport
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var colors = require("colors/safe");
|
const colors = require("colors/safe");
|
||||||
var moment = require("moment");
|
const moment = require("moment");
|
||||||
const read = require("read");
|
const read = require("read");
|
||||||
var Helper = require("./helper");
|
const Helper = require("./helper");
|
||||||
|
|
||||||
function timestamp() {
|
function timestamp() {
|
||||||
const format = Helper.config.logs.format || "YYYY-MM-DD HH:mm:ss";
|
const format = Helper.config.logs.format || "YYYY-MM-DD HH:mm:ss";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var Helper = require("../helper");
|
const Helper = require("../helper");
|
||||||
const User = require("./user");
|
const User = require("./user");
|
||||||
const userLog = require("../userLog");
|
const userLog = require("../userLog");
|
||||||
const storage = require("../plugins/storage");
|
const storage = require("../plugins/storage");
|
||||||
|
@ -43,7 +43,7 @@ Chan.prototype.destroy = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Chan.prototype.pushMessage = function(client, msg, increasesUnread) {
|
Chan.prototype.pushMessage = function(client, msg, increasesUnread) {
|
||||||
var obj = {
|
const obj = {
|
||||||
chan: this.id,
|
chan: this.id,
|
||||||
msg: msg,
|
msg: msg,
|
||||||
};
|
};
|
||||||
|
@ -110,7 +110,7 @@ Chan.prototype.getSortedUsers = function(irc) {
|
||||||
return users;
|
return users;
|
||||||
}
|
}
|
||||||
|
|
||||||
var userModeSortPriority = {};
|
const userModeSortPriority = {};
|
||||||
irc.network.options.PREFIX.forEach((prefix, index) => {
|
irc.network.options.PREFIX.forEach((prefix, index) => {
|
||||||
userModeSortPriority[prefix.symbol] = index;
|
userModeSortPriority[prefix.symbol] = index;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
|
|
||||||
var id = 0;
|
let id = 0;
|
||||||
|
|
||||||
class Msg {
|
class Msg {
|
||||||
constructor(attr) {
|
constructor(attr) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var Chan = require("./chan");
|
const Chan = require("./chan");
|
||||||
|
|
||||||
module.exports = Network;
|
module.exports = Network;
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ Network.prototype.getNetworkStatus = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Network.prototype.export = function() {
|
Network.prototype.export = function() {
|
||||||
var network = _.pick(this, [
|
const network = _.pick(this, [
|
||||||
"awayMessage",
|
"awayMessage",
|
||||||
"nick",
|
"nick",
|
||||||
"name",
|
"name",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
|
|
||||||
module.exports = User;
|
module.exports = User;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["slap", "me"];
|
exports.commands = ["slap", "me"];
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ exports.input = function({irc}, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var text;
|
let text;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case "slap":
|
case "slap":
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = [
|
exports.commands = [
|
||||||
"ban",
|
"ban",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["connect", "server"];
|
exports.commands = ["connect", "server"];
|
||||||
exports.allowDisconnected = true;
|
exports.allowDisconnected = true;
|
||||||
|
@ -24,8 +24,8 @@ exports.input = function({irc}, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var port = args[1] || "";
|
let port = args[1] || "";
|
||||||
var tls = port[0] === "+";
|
const tls = port[0] === "+";
|
||||||
|
|
||||||
if (tls) {
|
if (tls) {
|
||||||
port = port.substring(1);
|
port = port.substring(1);
|
||||||
|
|
|
@ -5,7 +5,7 @@ const Helper = require("../../helper");
|
||||||
exports.commands = ["disconnect"];
|
exports.commands = ["disconnect"];
|
||||||
|
|
||||||
exports.input = function({irc}, chan, cmd, args) {
|
exports.input = function({irc}, chan, cmd, args) {
|
||||||
var quitMessage = args[0] ? args.join(" ") : Helper.config.leaveMessage;
|
const quitMessage = args[0] ? args.join(" ") : Helper.config.leaveMessage;
|
||||||
|
|
||||||
irc.quit(quitMessage);
|
irc.quit(quitMessage);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["invite"];
|
exports.commands = ["invite"];
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["kick"];
|
exports.commands = ["kick"];
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = [
|
exports.commands = [
|
||||||
"mode",
|
"mode",
|
||||||
|
|
|
@ -3,26 +3,25 @@
|
||||||
exports.commands = ["msg", "say"];
|
exports.commands = ["msg", "say"];
|
||||||
|
|
||||||
exports.input = function(network, chan, cmd, args) {
|
exports.input = function(network, chan, cmd, args) {
|
||||||
var irc = network.irc;
|
const target = cmd === "msg" ? args.shift() : chan.name;
|
||||||
var target = cmd === "msg" ? args.shift() : chan.name;
|
|
||||||
|
|
||||||
if (args.length === 0 || !target) {
|
if (args.length === 0 || !target) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var msg = args.join(" ");
|
const msg = args.join(" ");
|
||||||
|
|
||||||
if (msg.length === 0) {
|
if (msg.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
irc.say(target, msg);
|
network.irc.say(target, msg);
|
||||||
|
|
||||||
if (!network.irc.network.cap.isEnabled("echo-message")) {
|
if (!network.irc.network.cap.isEnabled("echo-message")) {
|
||||||
var channel = network.getChannel(target);
|
const channel = network.getChannel(target);
|
||||||
if (typeof channel !== "undefined") {
|
if (typeof channel !== "undefined") {
|
||||||
irc.emit("privmsg", {
|
network.irc.emit("privmsg", {
|
||||||
nick: irc.user.nick,
|
nick: network.irc.user.nick,
|
||||||
target: channel.name,
|
target: channel.name,
|
||||||
message: msg,
|
message: msg,
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["nick"];
|
exports.commands = ["nick"];
|
||||||
exports.allowDisconnected = true;
|
exports.allowDisconnected = true;
|
||||||
|
@ -22,7 +22,7 @@ exports.input = function(network, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var newNick = args[0];
|
const newNick = args[0];
|
||||||
|
|
||||||
// If connected to IRC, send to server and wait for ACK
|
// If connected to IRC, send to server and wait for ACK
|
||||||
// otherwise update the nick and UI straight away
|
// otherwise update the nick and UI straight away
|
||||||
|
|
|
@ -7,19 +7,19 @@ exports.input = function(network, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var message = args.slice(1).join(" ");
|
let targetChan = network.getChannel(args[0]);
|
||||||
var irc = network.irc;
|
let message = args.slice(1).join(" ");
|
||||||
irc.notice(args[0], message);
|
|
||||||
|
network.irc.notice(args[0], message);
|
||||||
|
|
||||||
var targetChan = network.getChannel(args[0]);
|
|
||||||
if (typeof targetChan === "undefined") {
|
if (typeof targetChan === "undefined") {
|
||||||
message = "{to " + args[0] + "} " + message;
|
message = "{to " + args[0] + "} " + message;
|
||||||
targetChan = chan;
|
targetChan = chan;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!network.irc.network.cap.isEnabled("echo-message")) {
|
if (!network.irc.network.cap.isEnabled("echo-message")) {
|
||||||
irc.emit("notice", {
|
network.irc.emit("notice", {
|
||||||
nick: irc.user.nick,
|
nick: network.irc.user.nick,
|
||||||
target: targetChan.name,
|
target: targetChan.name,
|
||||||
message: message,
|
message: message,
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
const Helper = require("../../helper");
|
const Helper = require("../../helper");
|
||||||
|
|
||||||
exports.commands = ["close", "leave", "part"];
|
exports.commands = ["close", "leave", "part"];
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["query"];
|
exports.commands = ["query"];
|
||||||
|
|
||||||
exports.input = function(network, chan, cmd, args) {
|
exports.input = function(network, chan, cmd, args) {
|
||||||
var target = args[0];
|
const target = args[0];
|
||||||
if (args.length === 0 || target.length === 0) {
|
if (args.length === 0 || target.length === 0) {
|
||||||
chan.pushMessage(this, new Msg({
|
chan.pushMessage(this, new Msg({
|
||||||
type: Msg.Type.ERROR,
|
type: Msg.Type.ERROR,
|
||||||
|
@ -16,12 +16,12 @@ exports.input = function(network, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var query = _.find(network.channels, {name: target});
|
const query = _.find(network.channels, {name: target});
|
||||||
if (typeof query !== "undefined") {
|
if (typeof query !== "undefined") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var char = target[0];
|
const char = target[0];
|
||||||
if (network.irc.network.options.CHANTYPES && network.irc.network.options.CHANTYPES.includes(char)) {
|
if (network.irc.network.options.CHANTYPES && network.irc.network.options.CHANTYPES.includes(char)) {
|
||||||
chan.pushMessage(this, new Msg({
|
chan.pushMessage(this, new Msg({
|
||||||
type: Msg.Type.ERROR,
|
type: Msg.Type.ERROR,
|
||||||
|
@ -30,7 +30,7 @@ exports.input = function(network, chan, cmd, args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < network.irc.network.options.PREFIX.length; i++) {
|
for (let i = 0; i < network.irc.network.options.PREFIX.length; i++) {
|
||||||
if (network.irc.network.options.PREFIX[i].symbol === char) {
|
if (network.irc.network.options.PREFIX[i].symbol === char) {
|
||||||
chan.pushMessage(this, new Msg({
|
chan.pushMessage(this, new Msg({
|
||||||
type: Msg.Type.ERROR,
|
type: Msg.Type.ERROR,
|
||||||
|
@ -40,7 +40,7 @@ exports.input = function(network, chan, cmd, args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var newChan = new Chan({
|
const newChan = new Chan({
|
||||||
type: Chan.Type.QUERY,
|
type: Chan.Type.QUERY,
|
||||||
name: target,
|
name: target,
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
const Helper = require("../../helper");
|
const Helper = require("../../helper");
|
||||||
|
|
||||||
exports.commands = ["quit"];
|
exports.commands = ["quit"];
|
||||||
exports.allowDisconnected = true;
|
exports.allowDisconnected = true;
|
||||||
|
|
||||||
exports.input = function(network, chan, cmd, args) {
|
exports.input = function(network, chan, cmd, args) {
|
||||||
var client = this;
|
const client = this;
|
||||||
|
|
||||||
client.networks = _.without(client.networks, network);
|
client.networks = _.without(client.networks, network);
|
||||||
network.destroy();
|
network.destroy();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
|
|
||||||
exports.commands = ["cycle", "rejoin"];
|
exports.commands = ["cycle", "rejoin"];
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Chan = require("../../models/chan");
|
const Chan = require("../../models/chan");
|
||||||
var Msg = require("../../models/msg");
|
const Msg = require("../../models/msg");
|
||||||
|
|
||||||
exports.commands = ["topic"];
|
exports.commands = ["topic"];
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ module.exports = function(client, chan, msg) {
|
||||||
|
|
||||||
function parse(msg, preview, res, client) {
|
function parse(msg, preview, res, client) {
|
||||||
switch (res.type) {
|
switch (res.type) {
|
||||||
case "text/html":
|
case "text/html": {
|
||||||
var $ = cheerio.load(res.data);
|
const $ = cheerio.load(res.data);
|
||||||
preview.type = "link";
|
preview.type = "link";
|
||||||
preview.head =
|
preview.head =
|
||||||
$('meta[property="og:title"]').attr("content")
|
$('meta[property="og:title"]').attr("content")
|
||||||
|
@ -92,6 +92,7 @@ function parse(msg, preview, res, client) {
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "image/png":
|
case "image/png":
|
||||||
case "image/gif":
|
case "image/gif":
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var pkg = require("../package.json");
|
const pkg = require("../package.json");
|
||||||
var Client = require("./client");
|
const Client = require("./client");
|
||||||
var ClientManager = require("./clientManager");
|
const ClientManager = require("./clientManager");
|
||||||
var express = require("express");
|
const express = require("express");
|
||||||
var fs = require("fs");
|
const fs = require("fs");
|
||||||
var path = require("path");
|
const path = require("path");
|
||||||
var io = require("socket.io");
|
const io = require("socket.io");
|
||||||
var dns = require("dns");
|
const dns = require("dns");
|
||||||
var Helper = require("./helper");
|
const Helper = require("./helper");
|
||||||
var colors = require("colors/safe");
|
const colors = require("colors/safe");
|
||||||
const net = require("net");
|
const net = require("net");
|
||||||
const Identification = require("./identification");
|
const Identification = require("./identification");
|
||||||
const changelog = require("./plugins/changelog");
|
const changelog = require("./plugins/changelog");
|
||||||
|
@ -31,14 +31,14 @@ const authPlugins = [
|
||||||
// A random number that will force clients to reload the page if it differs
|
// A random number that will force clients to reload the page if it differs
|
||||||
const serverHash = Math.floor(Date.now() * Math.random());
|
const serverHash = Math.floor(Date.now() * Math.random());
|
||||||
|
|
||||||
var manager = null;
|
let manager = null;
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
log.info(`The Lounge ${colors.green(Helper.getVersion())} \
|
log.info(`The Lounge ${colors.green(Helper.getVersion())} \
|
||||||
(Node.js ${colors.green(process.versions.node)} on ${colors.green(process.platform)} ${process.arch})`);
|
(Node.js ${colors.green(process.versions.node)} on ${colors.green(process.platform)} ${process.arch})`);
|
||||||
log.info(`Configuration file: ${colors.green(Helper.getConfigPath())}`);
|
log.info(`Configuration file: ${colors.green(Helper.getConfigPath())}`);
|
||||||
|
|
||||||
var app = express()
|
const app = express()
|
||||||
.disable("x-powered-by")
|
.disable("x-powered-by")
|
||||||
.use(allRequests)
|
.use(allRequests)
|
||||||
.use(index)
|
.use(index)
|
||||||
|
@ -72,20 +72,19 @@ module.exports = function() {
|
||||||
return res.sendFile(path.join(packagePath, fileName));
|
return res.sendFile(path.join(packagePath, fileName));
|
||||||
});
|
});
|
||||||
|
|
||||||
var config = Helper.config;
|
let server = null;
|
||||||
var server = null;
|
|
||||||
|
|
||||||
if (config.public && (config.ldap || {}).enable) {
|
if (Helper.config.public && (Helper.config.ldap || {}).enable) {
|
||||||
log.warn("Server is public and set to use LDAP. Set to private mode if trying to use LDAP authentication.");
|
log.warn("Server is public and set to use LDAP. Set to private mode if trying to use LDAP authentication.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.https.enable) {
|
if (!Helper.config.https.enable) {
|
||||||
server = require("http");
|
server = require("http");
|
||||||
server = server.createServer(app);
|
server = server.createServer(app);
|
||||||
} else {
|
} else {
|
||||||
const keyPath = Helper.expandHome(config.https.key);
|
const keyPath = Helper.expandHome(Helper.config.https.key);
|
||||||
const certPath = Helper.expandHome(config.https.certificate);
|
const certPath = Helper.expandHome(Helper.config.https.certificate);
|
||||||
const caPath = Helper.expandHome(config.https.ca);
|
const caPath = Helper.expandHome(Helper.config.https.ca);
|
||||||
|
|
||||||
if (!keyPath.length || !fs.existsSync(keyPath)) {
|
if (!keyPath.length || !fs.existsSync(keyPath)) {
|
||||||
log.error("Path to SSL key is invalid. Stopping server...");
|
log.error("Path to SSL key is invalid. Stopping server...");
|
||||||
|
@ -112,12 +111,12 @@ module.exports = function() {
|
||||||
|
|
||||||
let listenParams;
|
let listenParams;
|
||||||
|
|
||||||
if (typeof config.host === "string" && config.host.startsWith("unix:")) {
|
if (typeof Helper.config.host === "string" && Helper.config.host.startsWith("unix:")) {
|
||||||
listenParams = config.host.replace(/^unix:/, "");
|
listenParams = Helper.config.host.replace(/^unix:/, "");
|
||||||
} else {
|
} else {
|
||||||
listenParams = {
|
listenParams = {
|
||||||
port: config.port,
|
port: Helper.config.port,
|
||||||
host: config.host,
|
host: Helper.config.host,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,23 +126,23 @@ module.exports = function() {
|
||||||
if (typeof listenParams === "string") {
|
if (typeof listenParams === "string") {
|
||||||
log.info("Available on socket " + colors.green(listenParams));
|
log.info("Available on socket " + colors.green(listenParams));
|
||||||
} else {
|
} else {
|
||||||
const protocol = config.https.enable ? "https" : "http";
|
const protocol = Helper.config.https.enable ? "https" : "http";
|
||||||
const address = server.address();
|
const address = server.address();
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
"Available at " +
|
"Available at " +
|
||||||
colors.green(`${protocol}://${address.address}:${address.port}/`) +
|
colors.green(`${protocol}://${address.address}:${address.port}/`) +
|
||||||
` in ${colors.bold(config.public ? "public" : "private")} mode`
|
` in ${colors.bold(Helper.config.public ? "public" : "private")} mode`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sockets = io(server, {
|
const sockets = io(server, {
|
||||||
serveClient: false,
|
serveClient: false,
|
||||||
transports: config.transports,
|
transports: Helper.config.transports,
|
||||||
});
|
});
|
||||||
|
|
||||||
sockets.on("connect", (socket) => {
|
sockets.on("connect", (socket) => {
|
||||||
if (config.public) {
|
if (Helper.config.public) {
|
||||||
performAuthentication.call(socket, {});
|
performAuthentication.call(socket, {});
|
||||||
} else {
|
} else {
|
||||||
socket.emit("auth", {
|
socket.emit("auth", {
|
||||||
|
@ -302,9 +301,9 @@ function initializeClient(socket, client, token, lastMessage) {
|
||||||
socket.on(
|
socket.on(
|
||||||
"change-password",
|
"change-password",
|
||||||
function(data) {
|
function(data) {
|
||||||
var old = data.old_password;
|
const old = data.old_password;
|
||||||
var p1 = data.new_password;
|
const p1 = data.new_password;
|
||||||
var p2 = data.verify_password;
|
const p2 = data.verify_password;
|
||||||
if (typeof p1 === "undefined" || p1 === "") {
|
if (typeof p1 === "undefined" || p1 === "") {
|
||||||
socket.emit("change-password", {
|
socket.emit("change-password", {
|
||||||
error: "Please enter a new password",
|
error: "Please enter a new password",
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var fs = require("fs");
|
const fs = require("fs");
|
||||||
var fsextra = require("fs-extra");
|
const fsextra = require("fs-extra");
|
||||||
var moment = require("moment");
|
const moment = require("moment");
|
||||||
var Helper = require("./helper");
|
const Helper = require("./helper");
|
||||||
|
|
||||||
module.exports.write = function(user, network, chan, msg) {
|
module.exports.write = function(user, network, chan, msg) {
|
||||||
const path = Helper.getUserLogsPath(user, network);
|
const path = Helper.getUserLogsPath(user, network);
|
||||||
|
@ -15,13 +15,13 @@ module.exports.write = function(user, network, chan, msg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var format = Helper.config.logs.format || "YYYY-MM-DD HH:mm:ss";
|
const format = Helper.config.logs.format || "YYYY-MM-DD HH:mm:ss";
|
||||||
var tz = Helper.config.logs.timezone || "UTC+00:00";
|
const tz = Helper.config.logs.timezone || "UTC+00:00";
|
||||||
|
|
||||||
var time = moment(msg.time).utcOffset(tz).format(format);
|
const time = moment(msg.time).utcOffset(tz).format(format);
|
||||||
var line = `[${time}] `;
|
let line = `[${time}] `;
|
||||||
|
|
||||||
var type = msg.type.trim();
|
const type = msg.type.trim();
|
||||||
if (type === "message" || type === "highlight") {
|
if (type === "message" || type === "highlight") {
|
||||||
// Format:
|
// Format:
|
||||||
// [2014-01-01 00:00:00] <Arnold> Put that cookie down.. Now!!
|
// [2014-01-01 00:00:00] <Arnold> Put that cookie down.. Now!!
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var expect = require("chai").expect;
|
const expect = require("chai").expect;
|
||||||
|
|
||||||
var Chan = require("../../src/models/chan");
|
const Chan = require("../../src/models/chan");
|
||||||
var ModeCommand = require("../../src/plugins/inputs/mode");
|
const ModeCommand = require("../../src/plugins/inputs/mode");
|
||||||
|
|
||||||
describe("Commands", function() {
|
describe("Commands", function() {
|
||||||
describe("/mode", function() {
|
describe("/mode", function() {
|
||||||
|
|
2
test/fixtures/env.js
vendored
2
test/fixtures/env.js
vendored
|
@ -2,5 +2,5 @@
|
||||||
|
|
||||||
global.log = require("../../src/log.js");
|
global.log = require("../../src/log.js");
|
||||||
|
|
||||||
var home = require("path").join(__dirname, ".lounge");
|
const home = require("path").join(__dirname, ".lounge");
|
||||||
require("../../src/helper").setHome(home);
|
require("../../src/helper").setHome(home);
|
||||||
|
|
|
@ -82,7 +82,7 @@ describe("Chan", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("#getSortedUsers(irc)", function() {
|
describe("#getSortedUsers(irc)", function() {
|
||||||
var getUserNames = function(chan) {
|
const getUserNames = function(chan) {
|
||||||
return chan.getSortedUsers(network).map((u) => u.nick);
|
return chan.getSortedUsers(network).map((u) => u.nick);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ const Network = require("../../src/models/network");
|
||||||
describe("Network", function() {
|
describe("Network", function() {
|
||||||
describe("#export()", function() {
|
describe("#export()", function() {
|
||||||
it("should produce an valid object", function() {
|
it("should produce an valid object", function() {
|
||||||
var network = new Network({
|
const network = new Network({
|
||||||
awayMessage: "I am away",
|
awayMessage: "I am away",
|
||||||
name: "networkName",
|
name: "networkName",
|
||||||
channels: [
|
channels: [
|
||||||
|
@ -47,7 +47,7 @@ describe("Network", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("lobby should be at the top", function() {
|
it("lobby should be at the top", function() {
|
||||||
var network = new Network({
|
const network = new Network({
|
||||||
name: "Super Nice Network",
|
name: "Super Nice Network",
|
||||||
channels: [
|
channels: [
|
||||||
new Chan({name: "AAAA!", type: Chan.Type.QUERY}),
|
new Chan({name: "AAAA!", type: Chan.Type.QUERY}),
|
||||||
|
@ -62,7 +62,7 @@ describe("Network", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should maintain channel reference", function() {
|
it("should maintain channel reference", function() {
|
||||||
var chan = new Chan({
|
const chan = new Chan({
|
||||||
name: "#506-bug-fix",
|
name: "#506-bug-fix",
|
||||||
messages: [
|
messages: [
|
||||||
new Msg({
|
new Msg({
|
||||||
|
@ -71,7 +71,7 @@ describe("Network", function() {
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
var network = new Network({
|
const network = new Network({
|
||||||
name: "networkName",
|
name: "networkName",
|
||||||
channels: [
|
channels: [
|
||||||
chan,
|
chan,
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var expect = require("chai").expect;
|
const expect = require("chai").expect;
|
||||||
|
|
||||||
var Network = require("../../src/models/network");
|
const Network = require("../../src/models/network");
|
||||||
|
|
||||||
var network = new Network({name: "networkName"});
|
const network = new Network({name: "networkName"});
|
||||||
|
|
||||||
describe("Nickname highlights", function() {
|
describe("Nickname highlights", function() {
|
||||||
it("should NOT highlight nickname", function() {
|
it("should NOT highlight nickname", function() {
|
||||||
|
|
14
test/util.js
14
test/util.js
|
@ -1,11 +1,11 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var EventEmitter = require("events").EventEmitter;
|
const EventEmitter = require("events").EventEmitter;
|
||||||
var util = require("util");
|
const util = require("util");
|
||||||
var _ = require("lodash");
|
const _ = require("lodash");
|
||||||
var express = require("express");
|
const express = require("express");
|
||||||
var Network = require("../src/models/network");
|
const Network = require("../src/models/network");
|
||||||
var Chan = require("../src/models/chan");
|
const Chan = require("../src/models/chan");
|
||||||
|
|
||||||
function MockClient() {
|
function MockClient() {
|
||||||
this.user = {nick: "test-user"};
|
this.user = {nick: "test-user"};
|
||||||
|
@ -13,7 +13,7 @@ function MockClient() {
|
||||||
util.inherits(MockClient, EventEmitter);
|
util.inherits(MockClient, EventEmitter);
|
||||||
|
|
||||||
MockClient.prototype.createMessage = function(opts) {
|
MockClient.prototype.createMessage = function(opts) {
|
||||||
var message = _.extend({
|
const message = _.extend({
|
||||||
text: "dummy message",
|
text: "dummy message",
|
||||||
nick: "test-user",
|
nick: "test-user",
|
||||||
target: "#test-channel",
|
target: "#test-channel",
|
||||||
|
|
Loading…
Reference in a new issue