summaryrefslogtreecommitdiffstats
path: root/webchat
diff options
context:
space:
mode:
Diffstat (limited to 'webchat')
-rw-r--r--webchat/hello_web.js106
-rw-r--r--webchat/index.js120
-rw-r--r--webchat/public/client.js34
-rw-r--r--webchat/public/reset.css49
4 files changed, 200 insertions, 109 deletions
diff --git a/webchat/hello_web.js b/webchat/hello_web.js
deleted file mode 100644
index 45f6fc56..00000000
--- a/webchat/hello_web.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var fs = require('fs');
-var http = require('https');
-var sockjs = require('sockjs');
-var connect = require('connect');
-var irc = require('irc');
-var Clients = [];
-Clients.broadcast = function(object) {
- Clients.forEach(function(client) {
- client.write(JSON.stringify(object));
- });
-}
-var pingTimeoutDelay = 5*60*1000
-var lastping = setTimeout(reconnect, pingTimeoutDelay)
-
-var irc_client = new irc.Client('irc.freenode.net', 'kweb', {
- channels: ['#krebs'],
- sasl: true,
- secure: true,
- userName: 'kweb',
- realName: 'kweb',
- password: fs.readFileSync(__dirname+'/local_config/irc.key').toString(),
- debug: true,
- showErrors: true,
- port: 6697,
- autoRejoin: true,
- autoConnect: true,
- stripColors: true
-});
-
-var reconnect = function() {
- console.log("reconnecting due to pingtimeout");
- irc_client.disconnect();
- irc_client.connect();
-}
-
-irc_client.on('ping', function(server) {
- console.log("got ping from server, renewing timeout for automatic reconnect");
- clearTimeout(lastping);
- lastping = setTimeout(reconnect, pingTimeoutDelay);
-})
-
-irc_client.on('message#krebs', function(from, message) {
- console.log({ from: from, message: message });
- Clients.broadcast({ from: from, message: message });
- clearTimeout(lastping);
-});
-
-var echo = sockjs.createServer();
-echo.on('connection', function(conn) {
- var origin = '['+conn.remoteAddress+':'+conn.remotePort+']';
- Clients.push(conn);
- Clients.broadcast({from: 'system', message: origin + ' has joined'})
- irc_client.say("#krebs", origin + ' has joined');
- conn.write(JSON.stringify({from: 'system', message: 'hello'}))
- conn.on('data', function(data) {
- console.log('data:',data);
- try {
- var object = JSON.parse(data);
- if (/^\/nick\s+(.+)$/.test(object.message)) {
- object.from = origin;
- } else if (typeof object.nick === 'string') {
- object.from = object.nick;
- } else {
- object.from = origin;
- };
- console.log(object.message);
- irc_client.say("#krebs", object.from + ' → ' + object.message);
- Clients.broadcast(object);
-
- } catch (error) {
- console.log(error);
- }
- });
-conn.on('close', function() {
- Clients.splice(Clients.indexOf(conn));
- Clients.broadcast({from: 'system', message: origin + ' has quit'})
- irc_client.say("#krebs", origin + ' has quit');
-});
-});
-
-var options = {
- key: fs.readFileSync(__dirname+'/local_config/server_npw.key'),
- cert: fs.readFileSync(__dirname+'/local_config/server.crt'),
-};
-
-var app = connect()
- .use(connect.logger('dev'))
- .use(connect.static(__dirname+'/public'))
- .use( function (req, res) {
- res.writeHead(200, {'Content-Type': 'text/html'});
- res.write('<!doctype html>');
- res.write('<link rel="stylesheet" type="text/css" href="reset.css">');
- res.write('<script src="sockjs-0.3.min.js"></script>');
- res.write('<script src="jquery-2.0.3.min.js"></script>');
- res.write('<script src="client.js"></script>');
- res.write('<div id=bg>');
- res.write('hello, this is #krebs:<br>');
- res.write('<table id="chatbox"></table>');
- res.end('<input type="text" id="input"><br>');
- res.write('</div>');
-
- })
-var server = http.createServer(options, app);
-echo.installHandlers(server, {prefix:'/echo'});
-server.listen(1337, '0.0.0.0');
-console.log('Server running at https://127.0.0.1:1337/');
diff --git a/webchat/index.js b/webchat/index.js
new file mode 100644
index 00000000..8ef737fc
--- /dev/null
+++ b/webchat/index.js
@@ -0,0 +1,120 @@
+var fs = require('fs');
+var http = require('https');
+var sockjs = require('sockjs');
+var connect = require('connect');
+var irc = require('irc');
+var Clients = [];
+
+Clients.broadcast = function(object) { //broadcast to all clients
+ Clients.forEach(function(client) {
+ client.write(JSON.stringify(object));
+ });
+}
+
+var irc_reconnect = function() { //reconnt to irc
+ console.log("reconnecting due to pingtimeout");
+ irc_client.disconnect();
+ irc_client.connect();
+}
+
+var pingTimeoutDelay = 3*60*1000
+var lastping = setTimeout(irc_reconnect, pingTimeoutDelay)
+
+var irc_client = new irc.Client('irc.freenode.net', 'kweb', { //create irc_client to talk to irc
+ channels: ['#krebs'], //todo: read from local_config
+ sasl: true,
+ secure: true,
+ userName: 'kweb', //todo: read from local_config
+ realName: 'kweb', //todo: read from local_config
+ password: fs.readFileSync(__dirname+'/local_config/irc.key').toString(),
+ debug: false,
+ showErrors: true,
+ floodProtection: true,
+ port: 6697,
+ autoRejoin: true,
+ autoConnect: true,
+ stripColors: true
+});
+
+
+irc_client.on('ping', function(server) { //restart timer on server ping
+ console.log("got ping from server, renewing timeout for automatic reconnect");
+ clearTimeout(lastping);
+ lastping = setTimeout(irc_reconnect, pingTimeoutDelay); //reconnect after irc timeout
+})
+
+irc_client.on('message#krebs', function(from, message) {
+ console.log({ from: from, message: message });
+ Clients.broadcast({ from: from, message: message }); //broadcast irc messages to all connected clients
+ clearTimeout(lastping);
+});
+
+var web_serv_options = { //certificates for https
+ key: fs.readFileSync(__dirname+'/local_config/server_npw.key'),
+ cert: fs.readFileSync(__dirname+'/local_config/server.crt'),
+};
+
+var echo = sockjs.createServer();
+echo.on('connection', function(conn) {
+ var origin = conn.remoteAddress;
+ Clients.push(conn);
+ Clients.broadcast({from: 'system', message: origin + ' has joined'})
+// irc_client.say("#krebs", origin + ' has joined');
+ conn.write(JSON.stringify({from: 'system', message: 'hello'})) //welcome message
+ conn.on('data', function(data) {
+ console.log('data:',data);
+ try {
+ var object = JSON.parse(data);
+ if (object.message.length > 0) { //if message is not empty
+ if (/^\/nick\s+(.+)$/.test(object.message)) { //if nick is send use nick instead of ip
+ object.from = origin;
+ } else if (typeof object.nick === 'string') {
+ object.from = object.nick;
+ } else {
+ object.from = origin;
+ };
+ console.log(object.message);
+ irc_client.say("#krebs", object.from + ' → ' + object.message);
+ Clients.broadcast(object);
+ }
+
+ } catch (error) {
+ console.log(error);
+ }
+ });
+ conn.on('close', function() { //propagate if client quits the page
+ Clients.splice(Clients.indexOf(conn));
+ Clients.broadcast({from: 'system', message: origin + ' has quit'})
+// irc_client.say("#krebs", origin + ' has quit');
+});
+});
+
+
+var app = connect()
+ .use(connect.logger('dev'))
+ .use(connect.static(__dirname+'/public'))
+ .use( function (req, res) {
+ res.writeHead(200, {'Content-Type': 'text/html'});
+ page_template='<!doctype html>\n';
+ page_template+='<link rel="stylesheet" type="text/css" href="reset.css">\n';
+ page_template+='<script src="sockjs-0.3.min.js"></script>\n';
+ page_template+='<script src="jquery-2.0.3.min.js"></script>\n';
+ page_template+='<script src="client.js"></script>\n';
+ page_template+='<div id="bg">';
+ page_template+='<div id="chatter">';
+ page_template+='<div id="space"></div>';
+ page_template+='hello, this is the official krebs support:<br>\n';
+ page_template+='<table id="chatbox"><tr id="foot"><td id="time"></td><td id="nick" class="chat_from"></td><td><input type="text" id="input"></td></tr></table>\n';
+ page_template+='</div>';
+ page_template+='<div id="sideboard"><div id="links">';
+ page_template+='<a href="http://gold.krebsco.de/">krebsgold browser plugin</a><br>';
+ page_template+='<a href="http://ire:1027/dashboard/">ire: Retiolum Dashboard</a><br>';
+ page_template+='<a href="http://pigstarter/">pigstarter: network graphs</a><br>';
+ page_template+='</div></div></div>';
+ res.end(page_template);
+
+ })
+var server = http.createServer(web_serv_options, app);
+echo.installHandlers(server, {prefix:'/echo'});
+server.listen(1337, '0.0.0.0');
+console.log('Server running at https://127.0.0.1:1337/');
diff --git a/webchat/public/client.js b/webchat/public/client.js
index 95b67ad0..ca71b537 100644
--- a/webchat/public/client.js
+++ b/webchat/public/client.js
@@ -6,9 +6,36 @@ function setMaybeNick (input) {
var match = /^\/nick\s+(.+)$/.exec(input);
if (match) {
nick = match[1];
+ $('#nick').html(nick);
}
}
+function getCurTime () {
+ date = new Date;
+ h = date.getHours();
+ if(h<10)
+ {
+ h = "0"+h;
+ }
+ m = date.getMinutes();
+ if(m<10)
+ {
+ m = "0"+m;
+ }
+ s = date.getSeconds();
+ if(s<10)
+ {
+ s = "0"+s;
+ }
+ return ''+h+':'+m+':'+s;
+};
+
+$(function updateTime () {
+ $('#time').html(getCurTime());
+ setTimeout(updateTime,'1000');
+ return true;
+});
+
var nick;
$(function connect() {
@@ -25,8 +52,11 @@ $(function connect() {
console.log(object.message);
var safe_message = $('<div/>').text(object.message).html();
safe_message = replaceURLWithHTMLLinks(safe_message);
- var safe_from = $('<div/>').text(object.from).html();
- $('#chatbox').append('<tr><td class="chat_from">'+safe_from+'</td><td class="chat_msg">'+safe_message+'</td></tr>');
+ var safe_from = $('<div/>').text(object.from).html();
+ $('<tr><td class="chat_date">'+getCurTime()+'</td><td class="chat_from">'+safe_from+'</td><td class="chat_msg">'+safe_message+'</td></tr>').insertBefore('#foot');
+
+ var elem = document.getElementById('chatter');
+ elem.scrollTop = elem.scrollHeight;
} catch (error) {
console.log(error);
diff --git a/webchat/public/reset.css b/webchat/public/reset.css
index 17e10567..65f68058 100644
--- a/webchat/public/reset.css
+++ b/webchat/public/reset.css
@@ -21,6 +21,7 @@ time, mark, audio, video {
border: 0;
font-size: 100%;
font: inherit;
+ font-family: monospace;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
@@ -47,13 +48,21 @@ q:before, q:after {
#chatbox {
border-collapse: collapse;
border-spacing: 0;
- background-color: black;
+ color: white;
+ width: 100%;
+ vertical-align: bottom;
+}
+#input{
+ width: 100%;
+ background-color: #555555;
+ border: 1px solid black;
color: white;
}
.chat_from {
color:grey;
font-weight: bold;
text-align: right;
+ font-size:12px;
}
.chat_from:after {
content: ":";
@@ -67,6 +76,44 @@ q:before, q:after {
left: 0;
right: 0;
}
+#chatter {
+ width: 75%;
+ height: 100%;
+ background-color: black;
+ opacity: 0.8;
+ overflow: auto;
+ overflow-x: hidden;
+ vertical-align: bottom;
+}
+.chat_date,.chat_from,.chat_msg{
+}
+.chat_msg{
+ width: 100%;
+}
a {
color: red;
}
+.chat_date {
+ color: green;
+}
+.chat_date:after {
+ content: "";
+ padding-right: 4px;
+}
+#time {
+ color: #00FF00;
+}
+#sideboard {
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 100%;
+ width: 24%;
+ background-color: black;
+ opacity: 0.8;
+}
+#links {
+ font-size: 14px;
+ position: absolute;
+ bottom: 5px;
+} \ No newline at end of file