Skip to content

Commit f862628

Browse files
committed
Refactor db code, fix opengraph parser
1 parent 9b45475 commit f862628

File tree

3 files changed

+103
-59
lines changed

3 files changed

+103
-59
lines changed

irc-prime.js

+65-51
Original file line numberDiff line numberDiff line change
@@ -47,60 +47,40 @@ var ircData = new ircDataProvider('localhost', 27017,'laticus',ready);
4747

4848
var genericUserUpdate = function(nick, mongoUpdate) {
4949
if(dbReady) {
50-
ircData.getCollection(function (error, collection) {
50+
ircData.update(function(error, modified, result) {
5151
if(error) console.log(error);
52-
else {
53-
collection.update({"user": nick},mongoUpdate,{"upsert" : true}, function(error, modified, result) {
54-
if(error) console.log(error);
55-
});
56-
}
57-
}, 'users');
52+
},'users',{"user": nick},mongoUpdate,{"upsert" : true});
5853
}
5954
};
6055

6156
var genericLinkUpdate = function(linkURL, nick, mongoUpdate) {
6257
if(dbReady) {
63-
ircData.getCollection(function (error, collection) {
58+
ircData.update(function(error, modified, result) {
6459
if(error) console.log(error);
65-
else {
66-
collection.update({"url": linkURL, "user": nick},mongoUpdate,{"upsert" : true}, function(error, modified, result) {
67-
if(error) console.log(error);
68-
});
69-
}
70-
}, 'links');
60+
}, 'links',{"url": linkURL, "user": nick},mongoUpdate,{"upsert" : true});
7161
}
7262
};
7363

74-
var genericActivityUpdate = function(mongoUpdate) {
64+
var genericActivityInsert = function(mongoInsert) {
7565
if(dbReady) {
76-
ircData.getCollection(function (error, collection) {
66+
ircData.insert(function(error, result) {
7767
if(error) console.log(error);
78-
else {
79-
collection.insert(mongoUpdate, function(error, modified, result) {
80-
if(error) console.log(error);
81-
});
82-
}
83-
}, 'activity');
68+
}, 'activity', mongoInsert);
8469
}
8570
};
8671

8772
var genericTubeUpdate = function(tubeID, nick, mongoUpdate) {
8873
if(dbReady) {
89-
ircData.getCollection(function (error, collection) {
74+
var criteria = {};
75+
if(nick == "BetterBot") {
76+
criteria = {"id": tubeID}; //don't insert unique links if they were echoed by BetterBot, only by unique non-bot users
77+
}
78+
else {
79+
criteria = {"id": tubeID, "user": nick};
80+
}
81+
ircData.update(function(error, modified, result) {
9082
if(error) console.log(error);
91-
else {
92-
var criteria = {};
93-
if(nick == "BetterBot") {
94-
criteria = {"id": tubeID};
95-
}
96-
else {
97-
criteria = {"id": tubeID, "user": nick};
98-
}
99-
collection.update(criteria,mongoUpdate,{"upsert" : true}, function(error, modified, result) {
100-
if(error) console.log(error);
101-
});
102-
}
103-
}, 'tubes');
83+
}, 'tubes',criteria,mongoUpdate,{"upsert" : true});
10484
}
10585
};
10686

@@ -125,7 +105,7 @@ var youtubeLink = function(url) {
125105
}
126106

127107
/* IRC CLIENT CONNECTION AND LISTENERS */
128-
var client = new irc.Client('morgan.freenode.net', 'Laticus-Prime', {channels: ['#laticus'], retryCount: 5000, retryDelay: 30000});
108+
var client = new irc.Client('irc.freenode.net', 'Laticus-Prime', {channels: ['#laticus'], retryCount: 5000, retryDelay: 30000});
129109

130110
client.addListener('message#laticus', function (from, message) {
131111
var usersUpdate = {"$inc" : {"posts" : 1, "links" : 0}, "$setOnInsert" : {"lastLogin" : "unknown", "online" : true}};
@@ -190,49 +170,49 @@ client.addListener('names#laticus', function(nicks) {
190170
client.addListener('join#laticus', function(nick) {
191171
var timeStamp = new Date().toISOString();
192172
var usersUpdate = {"$set" : {"online" : true, "lastLogin" : timeStamp}, "$setOnInsert" : {"posts" : 0, "links" : 0}};
193-
var activityUpdate = {"user" : nick, "event" : "joined", "time" : timeStamp};
173+
var activityInsert = {"user" : nick, "event" : "joined", "time" : timeStamp};
194174
genericUserUpdate(nick, usersUpdate);
195-
genericActivityUpdate(activityUpdate);
175+
genericActivityInsert(activityInsert);
196176
});
197177

198178
client.addListener('part#laticus', function(nick, reason) {
199179
var timeStamp = new Date().toISOString();
200180
var usersUpdate = {"$set" : {"online" : false}, "$setOnInsert" : {"posts" : 0, "links" : 0, "lastLogin" : "unknown"}};
201-
var activityUpdate = {"user" : nick, "event" : "parted", "reason" : reason, "time" : timeStamp};
181+
var activityInsert = {"user" : nick, "event" : "parted", "reason" : reason, "time" : timeStamp};
202182
genericUserUpdate(nick, usersUpdate);
203-
genericActivityUpdate(activityUpdate);
183+
genericActivityInsert(activityInsert);
204184
});
205185

206186
client.addListener('kick#laticus', function(nick, by, reason) {
207187
var timeStamp = new Date().toISOString();
208188
var usersUpdate = {"$set" : {"online" : false}, "$setOnInsert" : {"posts" : 0, "links" : 0, "lastLogin" : "unknown"}};
209-
var activityUpdate = {"user" : nick, "event" : "kicked", "by" : by, "reason" : reason, "time" : timeStamp};
189+
var activityInsert = {"user" : nick, "event" : "kicked", "by" : by, "reason" : reason, "time" : timeStamp};
210190
genericUserUpdate(nick, usersUpdate);
211-
genericActivityUpdate(activityUpdate);
191+
genericActivityInsert(activityInsert);
212192
});
213193

214194
client.addListener('quit', function(nick, reason) {
215195
var timeStamp = new Date().toISOString();
216196
var usersUpdate = {"$set" : {"online" : false}, "$setOnInsert" : {"posts" : 0, "links" : 0, "lastLogin" : "unknown"}};
217-
var activityUpdate = {"user" : nick, "event" : "quit", "reason" : reason, "time" : timeStamp};
197+
var activityInsert = {"user" : nick, "event" : "quit", "reason" : reason, "time" : timeStamp};
218198
genericUserUpdate(nick, usersUpdate);
219-
genericActivityUpdate(activityUpdate);
199+
genericActivityInsert(activityInsert);
220200
});
221201

222202
client.addListener('kill', function(nick, reason) {
223203
var timeStamp = new Date().toISOString();
224204
var usersUpdate = {"$set" : {"online" : false}, "$setOnInsert" : {"posts" : 0, "links" : 0, "lastLogin" : "unknown"}};
225-
var activityUpdate = {"user" : nick, "event" : "killed", "reason" : reason, "time" : timeStamp};
205+
var activityInsert = {"user" : nick, "event" : "killed", "reason" : reason, "time" : timeStamp};
226206
genericUserUpdate(nick, usersUpdate);
227-
genericActivityUpdate(activityUpdate);
207+
genericActivityInsert(activityInsert);
228208
});
229209

230210
client.addListener('nick', function(oldnick, newnick) {
231211
var timeStamp = new Date().toISOString();
232212
var usersUpdate = {"$set" : {"online" : false}, "$setOnInsert" : {"posts" : 0, "links" : 0, "lastLogin" : "unknown"}};
233-
var activityUpdate = {"user" : oldnick, "event" : "nick", "oldnick" : oldnick, "newnick" : newnick, "time" : timeStamp};
213+
var activityInsert = {"user" : oldnick, "event" : "nick", "oldnick" : oldnick, "newnick" : newnick, "time" : timeStamp};
234214
genericUserUpdate(oldnick, usersUpdate);
235-
genericActivityUpdate(activityUpdate);
215+
genericActivityInsert(activityInsert);
236216

237217
usersUpdate = {"$set" : {"online" : true, "lastLogin" : timeStamp}, "$setOnInsert" : {"posts" : 0, "links" : 0}};
238218
genericUserUpdate(newnick, usersUpdate);
@@ -291,8 +271,18 @@ app.post('/auth/', cors(corsOptions), function(req, res, next){
291271
if(dbReady) {
292272
var user = req.body.user, pass = req.body.pass;
293273
console.log(user + ":" + pass);
294-
crypto.randomBytes(48, function(ex, buf) {
295-
res.json({token: buf.toString('base64')});
274+
var expireAt = new Date(Date.now() + (60 * 1000 * 2)); //15)); //session tokens expire after 15 minutes
275+
276+
crypto.randomBytes(32, function(ex, buf) {
277+
var tokenHex = buf.toString('hex');
278+
ircData.update(function(error, modified, result) {
279+
if(error) console.log(error);
280+
else{
281+
res.json({token: tokenHex});
282+
console.log(modified);
283+
console.log(result);
284+
}
285+
},'sessions', {"token" : tokenHex}, {"$set" : {"token" : tokenHex, "expireAt" : expireAt}}, {"upsert" : true});
296286
});
297287
}
298288
});
@@ -303,6 +293,30 @@ app.delete('/rem/:collection/:doc_id/:sessionToken/', cors(corsOptions), functio
303293
var collection = req.params.collection;
304294
var id = req.params.doc_id;
305295
var token = req.params.sessionToken;
296+
297+
ircData.find(function(error, result) {
298+
if(error) console.log(error);
299+
else {
300+
if(result.length > 0 && result[0].token == token) {
301+
res.json({"deleted" : false});
302+
303+
//Refactor below to separate function
304+
var expireAt = new Date(Date.now() + (60 * 1000 * 2)); //15)); //session tokens expire after 15 minutes
305+
ircData.update(function(error, modified, result) {
306+
if(error) console.log(error);
307+
else{
308+
console.log(modified);
309+
console.log(result);
310+
}
311+
},'sessions', {"token" : token}, {"$set" : {"expireAt" : expireAt}}, {"upsert" : false});
312+
313+
}
314+
else {
315+
console.log("Found token: " + result);
316+
res.json({"deleted" : false});
317+
}
318+
};
319+
}, 'sessions',{"token" : token});
306320
/*
307321
ircData.delete(function(error, nRemoved) {
308322
if(error) console.log(error);

ircDataProvider.js

+18
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,23 @@ ircDataProvider.prototype.delete = function(callback, collectionName, id) {
5555
}, collectionName);
5656
};
5757

58+
ircDataProvider.prototype.update = function(callback, collectionName, criteria, updateData, options) {
59+
this.getCollection(function(error, collection) {
60+
if(error) callback(error);
61+
else {
62+
collection.update(criteria, updateData, options, callback);
63+
}
64+
}, collectionName);
65+
};
66+
67+
ircDataProvider.prototype.insert = function(callback, collectionName, insertData) {
68+
this.getCollection(function(error, collection) {
69+
if(error) callback(error);
70+
else {
71+
collection.insert(insertData, callback);
72+
}
73+
}, collectionName);
74+
};
75+
5876
exports.ircDataProvider = ircDataProvider;
5977

opengraphParser.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
var http = require('http');
22

33
opengraphParser = function() {
4-
this.defaultOptions = function(){return {hostname: 'www.opengraph.io', path: '/api/1.0/site/'}};
5-
this.ogHybridParse = function(JSONPdata) {
6-
jsonData = JSON.parse(JSONPdata);
7-
return(jsonData.hybridGraph);
4+
this.defaultOptions = function(){return {hostname: 'opengraph.io', path: '/api/1.0/site/'}};
5+
this.ogHybridParse = function(JSONPdata, next) {
6+
try {
7+
jsonData = JSON.parse(JSONPdata);
8+
next(null, jsonData);
9+
} catch (e) {
10+
next(e);
11+
}
12+
//return(jsonData.hybridGraph);
813
};
914
};
1015

@@ -17,9 +22,16 @@ opengraphParser.prototype.getHybridGraph = function(url, callback) {
1722
res.on('data', function(chunk) {
1823
JSONPdata = JSONPdata + chunk;
1924
}).on('end', function() {
20-
hybridGraph = ogHybridParse(JSONPdata);
21-
if(hybridGraph) {callback(null, hybridGraph);}
22-
else {callback("Unable to get HybridGraph data", null);}
25+
//hybridGraph = ogHybridParse(err,JSONPdata);
26+
ogHybridParse(JSONPdata, function(err, jsonData) {
27+
if(err) {
28+
callback("Unable to get HybridGraph data", null);
29+
} else {
30+
callback(null, jsonData.hybridGraph);
31+
}
32+
});
33+
//if(hybridGraph) {callback(null, hybridGraph);}
34+
//else {callback("Unable to get HybridGraph data", null);}
2335
});
2436
});
2537

@@ -28,4 +40,4 @@ opengraphParser.prototype.getHybridGraph = function(url, callback) {
2840
});
2941
};
3042

31-
exports.opengraphParser = opengraphParser;
43+
exports.opengraphParser = opengraphParser;

0 commit comments

Comments
 (0)