Run private server by default
Use `shout start --public` or edit your `config.json` to override.
This commit is contained in:
parent
43b6310481
commit
eb7c40276e
10
config.json
10
config.json
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"port": 9000,
|
"port": 9000,
|
||||||
"theme": "themes/example.css",
|
"theme": "themes/example.css",
|
||||||
"public": true
|
"public": false
|
||||||
}
|
}
|
||||||
|
6
index.js
6
index.js
@ -8,14 +8,14 @@ var program = require("commander");
|
|||||||
var shout = require("./src/server.js");
|
var shout = require("./src/server.js");
|
||||||
|
|
||||||
program
|
program
|
||||||
.option("-p, --port <port>");
|
.option("-p, --port <port>")
|
||||||
|
.option("-P, --public");
|
||||||
|
|
||||||
program
|
program
|
||||||
.command("start")
|
.command("start")
|
||||||
.description("Start the server")
|
.description("Start the server")
|
||||||
.action(function() {
|
.action(function() {
|
||||||
var port = program.port || config.port;
|
shout(program.port, program.public);
|
||||||
shout(port);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
program
|
program
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "shout",
|
"name": "shout",
|
||||||
"description": "A web IRC client",
|
"description": "A web IRC client",
|
||||||
"version": "0.9.2",
|
"version": "0.9.3",
|
||||||
"homepage": "http://github.com/erming/shout",
|
"homepage": "http://github.com/erming/shout",
|
||||||
"author": "Mattias Erming",
|
"author": "Mattias Erming",
|
||||||
"preferGlobal": true,
|
"preferGlobal": true,
|
||||||
|
@ -4,9 +4,19 @@ var Client = require("./client");
|
|||||||
module.exports = ClientManager;
|
module.exports = ClientManager;
|
||||||
|
|
||||||
function ClientManager() {
|
function ClientManager() {
|
||||||
this.clients = {};
|
this.clients = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClientManager.prototype.findClient = function(name) {
|
||||||
|
for (var i in this.clients) {
|
||||||
|
var client = this.clients[i];
|
||||||
|
if (client.name == name) {
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
ClientManager.prototype.loadUsers = function(sockets) {
|
ClientManager.prototype.loadUsers = function(sockets) {
|
||||||
var users = this.getUsers();
|
var users = this.getUsers();
|
||||||
for (var i in users) {
|
for (var i in users) {
|
||||||
@ -18,11 +28,11 @@ ClientManager.prototype.loadUsers = function(sockets) {
|
|||||||
if (!json) {
|
if (!json) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!this.clients[name]) {
|
if (!this.findClient(name)) {
|
||||||
this.clients[name] = new Client(
|
this.clients.push(new Client(
|
||||||
sockets,
|
sockets,
|
||||||
json
|
json
|
||||||
);
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
322
src/server.js
322
src/server.js
@ -1,160 +1,162 @@
|
|||||||
var _ = require("lodash");
|
var _ = require("lodash");
|
||||||
var Client = require("./client");
|
var Client = require("./client");
|
||||||
var ClientManager = require("./clientManager");
|
var ClientManager = require("./clientManager");
|
||||||
var config = require("../config.json");
|
var config = require("../config.json");
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
var http = require("connect");
|
var http = require("connect");
|
||||||
var io = require("socket.io");
|
var io = require("socket.io");
|
||||||
|
|
||||||
var sockets = null;
|
var sockets = null;
|
||||||
var manager = new ClientManager();
|
var manager = new ClientManager();
|
||||||
|
|
||||||
var inputs = [
|
var inputs = [
|
||||||
"action",
|
"action",
|
||||||
"connect",
|
"connect",
|
||||||
"invite",
|
"invite",
|
||||||
"join",
|
"join",
|
||||||
"kick",
|
"kick",
|
||||||
"mode",
|
"mode",
|
||||||
"msg",
|
"msg",
|
||||||
"nick",
|
"nick",
|
||||||
"notice",
|
"notice",
|
||||||
"part",
|
"part",
|
||||||
"quit",
|
"quit",
|
||||||
"raw",
|
"raw",
|
||||||
"topic",
|
"topic",
|
||||||
"whois"
|
"whois"
|
||||||
];
|
];
|
||||||
|
|
||||||
module.exports = function(port) {
|
module.exports = function(port, public) {
|
||||||
var port = port || config.port || 9000;
|
config.port = port || config.port,
|
||||||
var app = http()
|
config.public = public || config.public
|
||||||
.use(index)
|
|
||||||
.use(http.static("client"))
|
var app = http()
|
||||||
.listen(port);
|
.use(index)
|
||||||
|
.use(http.static("client"))
|
||||||
sockets = io(app);
|
.listen(config.port);
|
||||||
sockets.on("connect", function(socket) {
|
|
||||||
if (config.public) {
|
sockets = io(app);
|
||||||
auth.call(socket);
|
sockets.on("connect", function(socket) {
|
||||||
} else {
|
if (config.public) {
|
||||||
init(socket);
|
auth.call(socket);
|
||||||
}
|
} else {
|
||||||
});
|
init(socket);
|
||||||
|
}
|
||||||
console.log("");
|
});
|
||||||
console.log("Shout is now running on port " + port);
|
|
||||||
console.log("Press ctrl-c to stop");
|
console.log("");
|
||||||
console.log("");
|
console.log("Shout is now running on port " + config.port);
|
||||||
|
console.log("Press ctrl-c to stop");
|
||||||
if (!config.public) {
|
console.log("");
|
||||||
manager.loadUsers(sockets);
|
|
||||||
}
|
if (!config.public) {
|
||||||
};
|
manager.loadUsers(sockets);
|
||||||
|
}
|
||||||
function index(req, res, next) {
|
};
|
||||||
if (req.url != "/") return next();
|
|
||||||
return fs.readFile("client/index.html", "utf-8", function(err, file) {
|
function index(req, res, next) {
|
||||||
var data = _.merge(
|
if (req.url != "/") return next();
|
||||||
require("../package.json"),
|
return fs.readFile("client/index.html", "utf-8", function(err, file) {
|
||||||
config
|
var data = _.merge(
|
||||||
);
|
require("../package.json"),
|
||||||
res.end(_.template(
|
config
|
||||||
file,
|
);
|
||||||
data
|
res.end(_.template(
|
||||||
));
|
file,
|
||||||
});
|
data
|
||||||
}
|
));
|
||||||
|
});
|
||||||
function init(socket, client) {
|
}
|
||||||
if (!client) {
|
|
||||||
socket.emit("auth");
|
function init(socket, client) {
|
||||||
socket.on("auth", auth);
|
if (!client) {
|
||||||
} else {
|
socket.emit("auth");
|
||||||
socket.on(
|
socket.on("auth", auth);
|
||||||
"input",
|
} else {
|
||||||
function(data) {
|
socket.on(
|
||||||
input(client, data);
|
"input",
|
||||||
}
|
function(data) {
|
||||||
);
|
input(client, data);
|
||||||
socket.on(
|
}
|
||||||
"showMore",
|
);
|
||||||
function(data) {
|
socket.on(
|
||||||
showMore(client, data);
|
"showMore",
|
||||||
}
|
function(data) {
|
||||||
);
|
showMore(client, data);
|
||||||
socket.on(
|
}
|
||||||
"conn",
|
);
|
||||||
function(data) {
|
socket.on(
|
||||||
client.connect(data);
|
"conn",
|
||||||
}
|
function(data) {
|
||||||
);
|
client.connect(data);
|
||||||
socket.join(client.id);
|
}
|
||||||
socket.emit("init", {
|
);
|
||||||
networks: client.networks
|
socket.join(client.id);
|
||||||
});
|
socket.emit("init", {
|
||||||
}
|
networks: client.networks
|
||||||
}
|
});
|
||||||
|
}
|
||||||
function auth(data) {
|
}
|
||||||
var socket = this;
|
|
||||||
if (config.public) {
|
function auth(data) {
|
||||||
var client = new Client(sockets);
|
var socket = this;
|
||||||
clients.push(client);
|
if (config.public) {
|
||||||
socket.on("disconnect", function() {
|
var client = new Client(sockets);
|
||||||
clients = _.without(clients, client);
|
manager.clients.push(client);
|
||||||
client.quit();
|
socket.on("disconnect", function() {
|
||||||
});
|
manager.clients = _.without(manager.clients, client);
|
||||||
init(socket, client);
|
client.quit();
|
||||||
} else {
|
});
|
||||||
var success = 0;
|
init(socket, client);
|
||||||
_.each(manager.clients, function(client) {
|
} else {
|
||||||
if (client.config.name == data.name && client.config.password == data.password) {
|
var success = 0;
|
||||||
init(socket, client);
|
_.each(manager.clients, function(client) {
|
||||||
success++;
|
if (client.config.name == data.name && client.config.password == data.password) {
|
||||||
}
|
init(socket, client);
|
||||||
});
|
success++;
|
||||||
if (!success) {
|
}
|
||||||
socket.emit("auth");
|
});
|
||||||
}
|
if (!success) {
|
||||||
}
|
socket.emit("auth");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function input(client, data) {
|
}
|
||||||
var text = data.text;
|
|
||||||
var target = client.find(data.target);
|
function input(client, data) {
|
||||||
if (text.charAt(0) !== "/") {
|
var text = data.text;
|
||||||
text = "/say " + text;
|
var target = client.find(data.target);
|
||||||
}
|
if (text.charAt(0) !== "/") {
|
||||||
|
text = "/say " + text;
|
||||||
var args = text.split(" ");
|
}
|
||||||
var cmd = args.shift().replace("/", "").toLowerCase();
|
|
||||||
|
var args = text.split(" ");
|
||||||
_.each(inputs, function(plugin) {
|
var cmd = args.shift().replace("/", "").toLowerCase();
|
||||||
try {
|
|
||||||
var path = "./plugins/inputs/" + plugin;
|
_.each(inputs, function(plugin) {
|
||||||
var fn = require(path);
|
try {
|
||||||
fn.apply(client, [
|
var path = "./plugins/inputs/" + plugin;
|
||||||
target.network,
|
var fn = require(path);
|
||||||
target.chan,
|
fn.apply(client, [
|
||||||
cmd,
|
target.network,
|
||||||
args
|
target.chan,
|
||||||
]);
|
cmd,
|
||||||
} catch (e) {
|
args
|
||||||
console.log(path + ": " + e);
|
]);
|
||||||
}
|
} catch (e) {
|
||||||
});
|
console.log(path + ": " + e);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
function showMore(client, data) {
|
}
|
||||||
var target = client.find(data.target);
|
|
||||||
if (!target) {
|
function showMore(client, data) {
|
||||||
return;
|
var target = client.find(data.target);
|
||||||
}
|
if (!target) {
|
||||||
var chan = target.chan;
|
return;
|
||||||
var messages = chan.messages.slice(0, chan.messages.length - (data.count || 0));
|
}
|
||||||
client.emit("showMore", {
|
var chan = target.chan;
|
||||||
chan: chan.id,
|
var messages = chan.messages.slice(0, chan.messages.length - (data.count || 0));
|
||||||
messages: messages
|
client.emit("showMore", {
|
||||||
});
|
chan: chan.id,
|
||||||
}
|
messages: messages
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user