From 5a5ba51f3ece625f0c45d4ded824a519f6ed17c9 Mon Sep 17 00:00:00 2001
From: Erick Hitter <git-contrib@ethitter.com>
Date: Sat, 1 Apr 2017 18:05:28 -0700
Subject: [PATCH] Working v1

---
 README.md    | 18 ++++++++++++++++++
 index.js     | 47 ++++++++++++++++++++++++++++++++++++++---------
 package.json |  3 ++-
 3 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index e9c900d..15dc114 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 0cfcf83..2448388 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 += '&hellip;';
+	} 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 fa5d36a..0ce3279 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,8 @@
   "dependencies": {
     "express": "*",
     "body-parser": "*",
-    "wpapi": "*"
+    "wpapi": "*",
+    "striptags": "*"
   },
   "devDependencies": {},
   "scripts": {
-- 
GitLab