Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,69 @@ for ( var i = 0, l = users.length; i < l; i++ ) {
})
}
```

### Sending a message with an image attachment

```javascript

var fs = require( 'fs' )
var Push = require( 'pushover-notifications' )

var p = new Push( {
user: process.env['PUSHOVER_USER'],
token: process.env['PUSHOVER_TOKEN'],
})

var msg = {
message: 'omg node test', // required
title: "Well - this is fantastic - an attachment",
sound: 'magic',
device: 'devicename',
attachment: fs.createReadStream('path/to/image.jpg'),
priority: 1
}

p.send( msg, function( err, result ) {
if ( err ) {
throw err
}

console.log( result )
})
```

### Sending a message with an image attachment from a Buffer

```javascript

var fs = require( 'fs' )
var Push = require( 'pushover-notifications' )

var p = new Push( {
user: process.env['PUSHOVER_USER'],
token: process.env['PUSHOVER_TOKEN'],
})

// data is a Buffer object holding contents of image.jpg
fs.readFile('path/to/image.jpg', function (err, data) {
if (err) throw err;

var msg = {
message: 'omg node test', // required
title: "Well - this is fantastic - an attachment from a buffer",
sound: 'magic',
device: 'devicename',
attachment: data
priority: 1
}

p.send( msg, function( err, result ) {
if ( err ) {
throw err
}

console.log( result )
})
})

```
54 changes: 22 additions & 32 deletions lib/pushover.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ var http = require('http')
var url = require('url')
var qs = require('querystring')
var pUrl = 'https://api.pushover.net/1/messages.json'
var FormData = require('form-data')

function setDefaults (o) {
var def = [
Expand Down Expand Up @@ -113,26 +114,27 @@ Pushover.prototype.updateSounds = function () {
Pushover.prototype.send = function (obj, fn) {
var self = this
var o = url.parse(pUrl)
var form = new FormData()
var proxy
o.method = 'POST'

obj = setDefaults(obj)

var reqString = {
token: self.token || obj.token,
user: self.user || obj.user
}
form.append('token', self.token || obj.token)
form.append('user', self.user || obj.user)

if ('attachment' in obj && obj.attachment instanceof Buffer) {
// Sending a file from a buffer
// https://stackoverflow.com/a/43914175
form.append('attachment', obj.attachment, {filename: 'filename'})
delete obj.attachment
}
var p
for (p in obj) {
reqString[ p ] = obj[p]
form.append(p, obj[p])
}

reqString = qs.stringify(reqString)

o.headers = {
'Content-Length': reqString.length
}
o.headers = form.getHeaders()

var httpOpts = self.httpOptions || {}
if (httpOpts) {
Expand All @@ -150,18 +152,20 @@ Pushover.prototype.send = function (obj, fn) {
o.protocol = proxy.protocol
}

var request
if (httpOpts.proxy && httpOpts.proxy !== '') {
request = http.request
} else {
request = https.request
}
form.submit(o, function (err, res) {
if (err) {
if (fn) {
fn(err)
}
// In the tests the "end" event did not get emitted if "error" was emitted,
// but to be sure that the callback is not get called twice, null the callback function
fn = null
}

var req = request(o, function (res) {
if (self.debug) {
console.log(res.statusCode)
}
var err

var data = ''
res.on('end', function () {
self.errors(data, res)
Expand All @@ -175,20 +179,6 @@ Pushover.prototype.send = function (obj, fn) {
})
})

req.on('error', function (err) {
if (fn) {
fn(err)
}
// In the tests the "end" event did not get emitted if "error" was emitted,
// but to be sure that the callback is not get called twice, null the callback function
fn = null
})

if (self.debug) {
console.log(reqString.replace(self.token, 'XXXXX').replace(self.user, 'XXXXX'))
}
req.write(reqString)
req.end()
}

exports = module.exports = Pushover
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
"type": "git",
"url": "https://github.com/qbit/node-pushover.git"
},
"dependencies": {},
"dependencies": {
"form-data": "^2.3.2"
},
"devDependencies": {},
"optionalDependencies": {},
"engines": {
Expand Down
41 changes: 41 additions & 0 deletions test/test_attachment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
var Push = require('../lib/pushover.js')
var fs = require('fs')

var p = new Push({
user: process.env['PUSHOVER_USER'],
token: process.env['PUSHOVER_TOKEN'],
update_sounds: false,
debug: true
})

var msg = {
message: 'test from ' + process.argv[1],
sound: 'magic',
title: 'Testing attachment',
attachment: fs.createReadStream('img/pushover-header.png')
}

// console.log( p );

p.send(msg, function (err, result, res) {
console.log('error', err)
console.log('result', result)
console.log('res.headers', res.headers)
// process.exit(0);
})

fs.readFile('img/pushover-header.png', function (err, data) {
if (err) throw err;

msg = {
message: 'test from ' + process.argv[1],
title: 'Testing attachment from buffer',
attachment: data
}

p.send(msg, function (err, result, res) {
console.log('error', err)
console.log('result', result)
console.log('res.headers', res.headers)
})
});