-
Notifications
You must be signed in to change notification settings - Fork 2
/
contact.js
61 lines (52 loc) · 1.43 KB
/
contact.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var nano = require('nano'),
Sendgrid = require('sendgrid-web'),
format = require('util').format;
var requiredProps = ['message'];
var props = requiredProps;
function valid(articleSuggestion, messages) {
function notPresent(attr) {
var not = !articleSuggestion[attr];
if (not) {
messages.push('Missing ' + attr);
}
return not;
}
return !requiredProps.some(notPresent);
}
module.exports = function(config) {
var sendgrid = new Sendgrid(config.email.sendgrid);
function validateAndCreate(contact) {
var res = this.res,
req = this.req,
errors = [],
user = req.session.user;
if (valid(contact, errors)) {
sendgrid.send({
to: config.email.to,
from: config.email.from,
subject: "[" + config.title + "] Contact",
html: ['<p>Message from:</p>', '<pre>' + format('%j', {
login: user.login,
email: user.email,
url: user.html_url
}) + '</pre>', '<hr />', '<p>' + contact.message + '</p>', '<hr />'].join('')
}, function(err) {
if (err) {
console.error(err.stack);
res.writeHead(500);
return res.end('Error');
}
res.writeHead(201);
return res.end(JSON.stringify({
ok: true
}));
});
} else {
res.writeHead(406);
res.end(JSON.stringify({
error: errors.join(', ')
}));
}
}
return validateAndCreate;
};