diff --git a/README.md b/README.md index e9c900df92dff5c2acc34e9f10fa2e99b8e66e51..15dc114d9d303e37dc5ac046ff4c53a5c54620fe 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,21 @@ Slash command to record completed tasks as WordPress posts ## Prerequisites: * A WordPress site running version 4.6+ and the JSON Basic Authentication plugin +* nginx or another proxy to front the app + +## Install: + +1. `npm install` +2. Copy `config-sample.json` to `config.json` and update to your needs +3. `npm start` + +## Usage: + +1. Make a POST request to `/log` with a POST body that contains the item to record + +For example: + +``` +curl -X "POST" "http://localhost:9001/log" \ + -d "I wrote a a thing!" +``` diff --git a/index.js b/index.js index 0cfcf83d2f89905791440dddb956e2c3b2f40921..2448388a9053d8d50e6e896bb2c8594cc9c0feff 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,8 @@ // Dependencies var express = require( 'express' ); +var WPAPI = require( 'wpapi' ); +var striptags = require( 'striptags' ); var app = express(); var bodyParser = require( 'body-parser' ); @@ -11,24 +13,51 @@ app.use( bodyParser.urlencoded( { extended: true } ) ); // Config var config = require( './config.json' ); -// Landing page for status checks -app.get('/', function( req, res ) { - var msg = 'slash-done running'; +var wp = new WPAPI( { + endpoint: config.wp_endpoint, + username: config.wp_username, + password: config.wp_password +} ); - res.send( msg ); -}); +// Landing page for status checks +app.get( '/', function( req, res ) { + res.sendStatus( 200 ); +} ); // Parse POST body to create WP post -app.post('/log', function( req, res ) { +app.post( '/log', function( req, res ) { // Don't bother if there's nothing to record if ( 'undefined' === typeof req.body || ! req.body.length ) { return res.sendStatus( 400 ); } - res.sendStatus( 200 ); -}); + // Massage the title + var title = req.body; + title = striptags( title, [] ); + + if ( title.length > 30 ) { + title = 'Did: ' + title.slice( 0, 29 ); + title += '…'; + } else { + title = 'Did: ' + title; + } + + // Decorate the content + var content = req.body; + content = striptags( content, [ 'a', 'code', 'strong', 'em' ] ); + content = '<blockquote>' + content + "</blockquote>\n\n#slash-done"; + + // Create the post + wp.posts().create( { + title: title, + content: content, + status: 'publish' + } ).then( function( resp ) { + res.sendStatus( 200 ); + } ); +} ); //tells Node which port to listen on app.listen( config.node_port, config.node_listener, function() { console.log( 'slash-done running on', config.node_listener, 'and port', config.node_port ); -}); +} ); diff --git a/package.json b/package.json index fa5d36a3ec540cb685dc77cff7515aab7b9960ce..0ce3279b07e63ac1173451eb7422c5ccdc06fb2b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dependencies": { "express": "*", "body-parser": "*", - "wpapi": "*" + "wpapi": "*", + "striptags": "*" }, "devDependencies": {}, "scripts": {