Skip to content
Snippets Groups Projects
Commit 7cd46891 authored by Erick Hitter's avatar Erick Hitter
Browse files

Merge branch 'develop' into 'master'

Basic plugin functionality

See merge request !1
parents 88abfa67 f8032929
No related branches found
No related tags found
1 merge request!1Basic plugin functionality
config.json
node_modules
...@@ -4,3 +4,21 @@ Slash command to record completed tasks as WordPress posts ...@@ -4,3 +4,21 @@ Slash command to record completed tasks as WordPress posts
## Prerequisites: ## Prerequisites:
* A WordPress site running version 4.6+ and the JSON Basic Authentication plugin * 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!"
```
"use strict";
// Dependencies
var express = require( 'express' );
var bodyParser = require( 'body-parser' );
var WPAPI = require( 'wpapi' );
var striptags = require( 'striptags' );
var app = express();
app.use( bodyParser.text() );
app.use( bodyParser.urlencoded( { extended: true } ) );
// Config
var config = require( './config.json' );
var wp = new WPAPI( {
endpoint: config.wp_endpoint,
username: config.wp_username,
password: config.wp_password
} );
// 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 ) {
// Don't bother if there's nothing to record
if ( 'undefined' === typeof req.body || ! req.body.length ) {
return res.sendStatus( 400 );
}
// 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 ) {
var response = {
"response_type": "ephemeral",
"text": "Entry recorded (" + resp.id + ")\n" + resp.title.rendered + "\n\n" + resp.link
};
res.send( response);
} );
} );
//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 );
} );
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
"description": "Slash command to record completed tasks as WordPress posts", "description": "Slash command to record completed tasks as WordPress posts",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"body-parser": "*",
"express": "*", "express": "*",
"request": "*", "body-parser": "*",
"wpapi": "*" "wpapi": "*",
"striptags": "*"
}, },
"devDependencies": {}, "devDependencies": {},
"scripts": { "scripts": {
...@@ -19,6 +19,6 @@ ...@@ -19,6 +19,6 @@
"url": "git+https://ethitter@git.ethitter.com/open-source/slash-done.git" "url": "git+https://ethitter@git.ethitter.com/open-source/slash-done.git"
}, },
"author": "ethitter", "author": "ethitter",
"license": "GPLv2", "license": "GPL-2.0+",
"homepage": "https://git.ethitter.com/open-source/slash-done" "homepage": "https://git.ethitter.com/open-source/slash-done"
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment