You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.6 KiB

# Text Moderation with Firebase Cloud Functions
This template shows how to perform server side moderation of text written to a Firebase DB.
For instance if a user added the message "I DON'T LIKE THIS APP!! This is POOP!!!" this will get moderated to a - more civilized - non uppercase message: "I don't like this app. This is ****".
## Cloud Function Code
See file [index.js](index.js) for the moderation code.
Moderation of the messages is performed using [bad-words](https://www.npmjs.com/package/bad-words) a bad words remover that uses an external [list of bad-words](https://github.com/web-mech/badwords-list) and is currently mostly aimed at filtering english bad words. Also messages that contains mostly upper case characters are re-capitalized correctly using [capitalize-sentence](https://www.npmjs.com/package/capitalize-sentence).
The dependencies are listed in [package.json](package.json).
## Sample Database Structure
Users anonymously add a message - an object with a `text` attribute - to the `/messages` list:
```
/functions-project-12345
/messages
/key-123456
text: "This is my first message!"
/key-123457
text: "IN THIS MESSAGE I AM SHOUTING!!!"
```
Once the function has ran on the newly added messages it adds two attributes. `sanitized` which is `true` if message has been looked at and `moderated` which is `true` if it was detected that the message contained offensive content and was modified:
```
/functions-project-12345
/messages
/key-123456
text: "This is my first message!",
sanitized: true,
moderated: false
/key-123457
text: "In this message I am shouting."
sanitized: true,
moderated: true
```
## Trigger rules
The function triggers every time a message is modified. It exits if the message has already been moderated.
## Security Rules
The security rules only allow users to create message but not edit them afterwards. Also it does not allows users to set the `sanitized` value. Only the Functions is allowed to modify `sanitized` by using an admin authorized reference.
## Deploy and test
This sample comes with a web-based UI for testing the function. To test it out:
- Create a Firebase Project using the Firebase Developer Console
- Enable Google Provider in the Auth section
- Import and configure Firebase in the `index.html` where the `TODO` is located
- Deploy your project using `firebase deploy`
- Open the app and add messages to the message board. Try to ad bad words into your message and they should get moderated.