-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsrs.js
112 lines (82 loc) · 2.94 KB
/
srs.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* @overview: Simple sender rewriting scheme plugin
*
* @author : Michael Bruderer
* @version 2016/01/27
*/
var Address = require('./address').Address;
var util = require('util');
var addressRfc2822 = require('address-rfc2822');
exports.register = function () {
var plugin = this;
try {
plugin.SRS = require('srs.js');
}
catch (e) {
plugin.logerror("failed to load srs, " +
" try installing it: npm install srs.js");
return;
}
plugin.load_srs_ini();
plugin.srs = new plugin.SRS({secret: plugin.cfg.main.secret});
this.register_hook('data_post', 'srs_data_post');
this.register_hook('bounce', 'srs_bounce');
};
exports.load_srs_ini = function() {
var plugin = this;
plugin.cfg = plugin.config.get('srs.ini', 'ini', function () {
plugin.load_srs_ini();
});
};
exports.hook_rcpt = function (next, connection, params) {
var plugin = this;
var trx = connection.transaction;
var recipient = params[0];
var srsReverseValue = null;
try {
srsReverseValue = plugin.srs.reverse(recipient.user);
} catch (err) {
plugin.loginfo(plugin, 'srs.reverse error. err.stack=' + err.stack + '.');
}
plugin.logdebug(plugin, 'srsReverseValue=' + srsReverseValue + '.');
if (srsReverseValue) {
var beforeSrsReverseRecipient = recipient;
recipient = new Address(srsReverse[0], srsReverse[1]);
var afterSrsReverseRecipient = recipient;
trx.rcpt_to.pop();
trx.rcpt_to.push(afterSrsReverseRecipient);
plugin.loginfo(plugin, 'beforeSrsReverseRecipient=' + beforeSrsReverseRecipient + ', afterSrsReverseRecipient=' + afterSrsReverseRecipient + '.');
}
next();
};
exports.srs_data_post = function(next, connection, params) {
var plugin = this;
var trx = connection.transaction;
var sender = trx.mail_from;
var recipient = trx.rcpt_to;
var srsReverseValue = null;
if (trx.notes.has_alias) {
var beforeSrsRewriteFrom = sender;
var afterSrsRewriteFrom = new Address(plugin.srs.rewrite(sender.user, sender.host), plugin.cfg.main.sender_domain);
trx.mail_from = afterSrsRewriteFrom;
plugin.loginfo(plugin, 'beforeSrsRewriteFrom=' + beforeSrsRewriteFrom + ', afterSrsRewriteFrom=' + afterSrsRewriteFrom + '.');
}
next();
};
exports.srs_bounce = function (next, mail, err) {
var plugin = this;
var srsReverseValue = null;
plugin.loginfo('mail.todo.mail_from=' + mail.todo.mail_from + '.');
if (mail.todo.mail_from.user) {
try {
srsReverseValue = plugin.srs.reverse(mail.todo.mail_from.user);
} catch (err) {
plugin.loginfo('srs.reverse error. err.stack=' + err.stack + '.');
}
}
plugin.loginfo('srsReverseValue=' + srsReverseValue + '.');
if (srsReverseValue) {
mail.todo.mail_from = new Address(srsReverseValue[0], srsReverseValue[1]);
}
next();
};