Skip to content

A foul-language filter for NodeJS that works seamlessly as a middleware

License

Notifications You must be signed in to change notification settings

ritenv/profanity-middleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

profanity-middleware

A foul-language filter for NodeJS that works seamlessly as a middleware.

Build Status NPM Module

When used as middleware, all data received for the requests are purified automatically. It inserts profanity filters into all routes (or specific ones) to implicitly take care of purification, so you never have to deal with it.

This plugin is built on the assumption that profanity filters need to be implemented implicitly, so you do not have to manually call functions for sanitizing each string (but you can do that too, with this plugin).

Installation

npm install profanity-middleware

Basic Usage

As middleware with Express for all routes (app middleware):

var app = express();
var profanity = require('profanity-middleware');
...
//try to keep this the last app.use (optional)
app.use(profanity.init); //will filter all user input data in all routes

As middleware with Express for specific routes (route middleware):

var profanity = require('profanity-middleware');
...
app.post('/createPost/', profanity.init, function(req,res) {
	...
});

As function:

var profanity = require('profanity-middleware'),
    filter = profanity.filter;

var html = 'Hello Foul World',
    filtered = filter(html, {blacklist: ['foul']}); //defining foul as a slang word
console.log('filtered');
//Hello f**l world

Configuration

This plugin supports 3 basic options that can be configured:

{
	mask: '$', //default '*'
	fullyMasked: true, // default false
	blacklist: ['foul', 'slang'] //default []
}

mask (optional) is used to filter foul words with a character of your choice; default is asterisk (*)

fullyMasked (optional) is used to replace all letters in profane words with the mask character, instead of just the inner letters

blacklist (optional) is used to define words that you wish to filter in addition to the default dictionary; default is an empty array;

As middleware

As middleware, the options are specified just after 'require':

var profanity = require('profanity-middleware');
profanity.setOptions({
	mask: '$', 
	blacklist: ['foul', 'slang']
});
app.use(profanity.init); //then use it as app middleware or route middleware

As function

As function, the options are specified when calling the function

filter(html, {blacklist: ['foul', 'slang']});

Newly Added

Profane Words Count

When used as middleware, the res object of the route will be assigned a profaneWordsCount which is the count of foul words encountered in that commit.

You can try: console.log(res.profaneWordsCount) in any of your route, and can calculate a rating of foulness based on this.

When used as a direct filter function, you can pass in a parameter which will be changed by reference, as below: filter(str, {mask: '*', blacklist: ['custom']}, resStub) Or: filter(str, {}, resStub) //for default options

The count will be returned in the next line as: resStub.profaneWordsCount

Profane Words Rating

To count the rating, simply call the rating function as below:

var profanity = require('profanity-middleware');
var rating = profanity.rating;
var filter = profanity.filter;
var resStub = {}; //if you are getting data from the request object (as middleware), just use the 'res' object
var badword = filter('enterBadWordHere', {blacklist: ['Bad']}, resStub);
var computedRating = rating(resStub.profaneWordsCount);
console.log("Rating of profanity is ", computedRating);

Fully Masking Profane Words

By default, the middleware will leave the first and last letter of a profane word unmasked. To mask the full word, including first and last letters, add the fullyMasked option to the filter object and set it to true, like below:

...
filter('enterBadWordHere', {fullyMasked: true}, resStub);
...

Tests

npm test

  • Check for replacing case-sensitive words
  • Check for not replacing in-string words that could be part of other words
  • Check for recursively filtering strings inside objects
  • Check for custom words and custom mask
  • Check for count of profane words
  • Check rating of profane words
  • Check for fully masking words as alternate option

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

Release History

  • 0.3.0 Added backwards-compatible option to fully mask profane words
  • 0.2.1 Profane words rating calculator function added
  • 0.2.0 Profane word counts added
  • 0.1.4 GHOST Enhancement
  • 0.1.3 Line breaks Enhancement

About

A foul-language filter for NodeJS that works seamlessly as a middleware

Resources

License

Stars

Watchers

Forks

Packages

No packages published