Skip to content
Snippets Groups Projects
index.js 2.14 KiB
Newer Older
Erick Hitter's avatar
Erick Hitter committed
"use strict";

// Dependencies
var express    = require( 'express' );
var bodyParser = require( 'body-parser' );
Erick Hitter's avatar
Erick Hitter committed
var WPAPI      = require( 'wpapi' );
var striptags  = require( 'striptags' );
var app = express();
app.use( bodyParser.json() );
Erick Hitter's avatar
Erick Hitter committed
app.use( bodyParser.urlencoded( { extended: true } ) );

// Config
var config = require( './config.json' );

Erick Hitter's avatar
Erick Hitter committed
var wp = new WPAPI( {
	endpoint: config.wp_endpoint,
	username: config.wp_username,
	password: config.wp_password
} );
Erick Hitter's avatar
Erick Hitter committed
// Landing page for status checks
app.get( '/', function( req, res ) {
	res.sendStatus( 200 );
} );
Erick Hitter's avatar
Erick Hitter committed

// Parse POST body to create WP post
Erick Hitter's avatar
Erick Hitter committed
app.post( '/log', function( req, res ) {
Erick Hitter's avatar
Erick Hitter committed
	// Don't bother if there's nothing to record
	if ( 'undefined' === typeof req.body || 'undefined' === typeof req.body.text || ! req.body.text.length ) {
Erick Hitter's avatar
Erick Hitter committed
		var response = {
			"response_type": "ephemeral",
			"text": "Please provide something to record."
		};

		return res.status( 400 ).send( response );
	// Limit who can trigger the command
	if ( 'undefined' === typeof req.body.user_name || config.command_user !== req.body.user_name ) {
		var response = {
			"response_type": "ephemeral",
			"text": "Sorry, you can't record completed tasks."
		};

Erick Hitter's avatar
Erick Hitter committed
		return res.status( 403 ).send( response );
Erick Hitter's avatar
Erick Hitter committed
	// Massage the title
	var title = req.body.text;
Erick Hitter's avatar
Erick Hitter committed
	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.text;
Erick Hitter's avatar
Erick Hitter committed
	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",
Erick Hitter's avatar
Erick Hitter committed
			"text": "**Entry recorded (**ID #" + resp.id + ", <" + resp.link + ">**)**\n" + resp.title.rendered
		res.send( response );
Erick Hitter's avatar
Erick Hitter committed
	} );
} );
Erick Hitter's avatar
Erick Hitter committed

//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 );
Erick Hitter's avatar
Erick Hitter committed
} );