diff --git a/text-moderation/README.md b/text-moderation/README.md index 662619c..fd42eaa 100644 --- a/text-moderation/README.md +++ b/text-moderation/README.md @@ -36,7 +36,7 @@ Below is the trigger rule for the `moderator` function making sure it's triggere "triggers": { "database": { "path": "/messages/$message", - "condition": "!data.exists()" // Only run the function once on new messages + "condition": "!newData.child('sanitized').exists()" // Only run the function if it has not been sanitized } } } diff --git a/text-moderation/index.js b/text-moderation/index.js index d414e08..553960f 100644 --- a/text-moderation/index.js +++ b/text-moderation/index.js @@ -15,48 +15,38 @@ */ 'use strict'; +// Create reference to the database authorized as an admin. var Firebase = require('firebase'); var env = require('./env'); -var ref = new Firebase(env.get('firebase.database.url')); +var ref = new Firebase(env.get('firebase.database.url'), 'admin'); +ref.authWithCustomToken(env.get('firebase.database.secret')); + +// load moderation library. var stringUtils = require('./moderation-string-utils.js'); stringUtils.loadModerationStringUtils(); // Moderates messages by lowering all uppercase messages and removing swearwords. exports.moderator = function(context, data) { - // Authorize to the Firebase Database with admin rights. - ref.authWithCustomToken(env.get('firebase.database.secret'), function(error) { - if (error) { - context.done(error); - } else { - console.log("Authorized successfully with admin rights"); - - // Read the Firebase DB entry that triggered the function. - console.log('Loading firebase path: ' + env.get('firebase.database.url') + data.path); - var messageFirebaseDbRef = ref.child(data.path); - messageFirebaseDbRef.once('value', function(messageData) { + // Read the Firebase DB entry that triggered the function. + console.log('Loading firebase path: ' + env.get('firebase.database.url') + data.path); + var messageFirebaseDbRef = ref.child(data.path); + messageFirebaseDbRef.once('value', function(messageData) { - // Retrieved the message values. - console.log('Retrieved message content: ' + JSON.stringify(messageData.val())); - var messageEntryData = messageData.val(); + // Retrieved the message values. + console.log('Retrieved message content: ' + JSON.stringify(messageData.val())); + var messageEntryData = messageData.val(); - // Run moderation checks on on the message and moderate if needed. - var moderatedMessage = moderateMessage(messageEntryData.text, context, messageFirebaseDbRef); + // Run moderation checks on on the message and moderate if needed. + var moderatedMessage = moderateMessage(messageEntryData.text, context, messageFirebaseDbRef); - // If message has just been moderated we update the Firebase DB. - if (messageEntryData.text != moderatedMessage) { - console.log('Message has been moderated. Saving to DB: ' + moderatedMessage); - messageFirebaseDbRef.update({text: moderatedMessage, sanitized: true}, - context.done); - } else { - console.log('Marking message as sanitized. Saving to DB: ' + moderatedMessage); - messageFirebaseDbRef.update({sanitized: true}, context.done); - } + // Update the Firebase DB with checked message. + console.log('Message has been moderated. Saving to DB: ' + moderatedMessage); + messageFirebaseDbRef.update({text: moderatedMessage, sanitized: true, + moderated: messageEntryData.text != moderatedMessage}, context.done); - // If reading the Firebase DB failed. - }, context.done); - } - }); + // If reading the Firebase DB failed. + }, context.done); }; // Moderates the given message if needed. diff --git a/text-moderation/package.json b/text-moderation/package.json index 6e595e3..f26c155 100644 --- a/text-moderation/package.json +++ b/text-moderation/package.json @@ -3,6 +3,6 @@ "dependencies": { "bad-words": "^1.3.1", "capitalize-sentence": "^0.1.2", - "firebase": "^2.3.1" + "firebase": "^2.4.0" } }