You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
4.2 KiB
107 lines
4.2 KiB
'use strict'; |
|
const AV = require('leanengine'); |
|
const akismet = require('akismet-api'); |
|
const akismetClient = akismet.client({ |
|
key : process.env.AKISMET_KEY, |
|
blog : process.env.SITE_URL |
|
}); |
|
|
|
exports.checkSpam = (comment, ip)=> { |
|
if (process.env.AKISMET_KEY === 'MANUAL_REVIEW') { |
|
console.log('已使用人工审核模式,评论审核后才会发表~'); |
|
comment.setACL(new AV.ACL({"*":{"read":false}})); |
|
comment.set('isSpam', true); |
|
comment.save(); |
|
return; |
|
} |
|
akismetClient.verifyKey(function(err, valid) { |
|
if (err) console.log('Akismet key 异常:', err.message); |
|
if (valid) { |
|
// TODO(1) 这里有缺陷 |
|
comment.set('ip', ip); |
|
akismetClient.checkSpam({ |
|
user_ip : ip, |
|
user_agent : comment.get('ua'), |
|
referrer : process.env.SITE_URL + comment.get('url'), |
|
permalink : process.env.SITE_URL + comment.get('url'), |
|
comment_type : 'comment', |
|
comment_author : comment.get('nick'), |
|
comment_author_email : comment.get('mail'), |
|
comment_author_url : comment.get('link'), |
|
comment_content : comment.get('comment'), |
|
// is_test : true // Default value is false |
|
}, function(err, spam) { |
|
if (err) console.log (`垃圾评论检测出错!${err}`); |
|
if (spam) { |
|
console.log('逮到一只垃圾评论,烧死它!用文火~'); |
|
comment.set('isSpam', true); |
|
comment.setACL(new AV.ACL({"*":{"read":false}})); |
|
comment.save(); |
|
// comment.destroy(); |
|
} else { |
|
comment.set('isSpam', false); |
|
comment.setACL(new AV.ACL({"*":{"read":true}})); |
|
comment.save(); |
|
console.log('垃圾评论检测完成,放行~'); |
|
} |
|
}); |
|
} |
|
else console.log('Akismet key 异常!'); |
|
}); |
|
}; |
|
exports.submitSpam = (comment)=> { |
|
if (process.env.AKISMET_KEY === 'MANUAL_REVIEW') { |
|
return; |
|
} |
|
akismetClient.verifyKey(function(err, valid) { |
|
if (err) console.log('Akismet key 异常:', err.message); |
|
if (valid) { |
|
let ipAddr = comment.get('ip'); |
|
akismetClient.submitSpam({ |
|
user_ip : ipAddr, |
|
user_agent : comment.get('ua'), |
|
referrer : process.env.SITE_URL + comment.get('url'), |
|
permalink : process.env.SITE_URL + comment.get('url'), |
|
comment_type : 'comment', |
|
comment_author : comment.get('nick'), |
|
comment_author_email : comment.get('mail'), |
|
comment_author_url : comment.get('link'), |
|
comment_content : comment.get('comment'), |
|
// is_test : true // Default value is false |
|
}, function(err) { |
|
if (!err) { |
|
console.log('垃圾评论已经提交!'); |
|
} |
|
}); |
|
} |
|
else console.log('Akismet key 异常!'); |
|
}); |
|
}; |
|
exports.submitHam = (comment)=> { |
|
if (process.env.AKISMET_KEY === 'MANUAL_REVIEW') { |
|
return; |
|
} |
|
akismetClient.verifyKey(function(err, valid) { |
|
if (err) console.log('Akismet key 异常:', err.message); |
|
if (valid) { |
|
let ipAddr = comment.get('ip'); |
|
akismetClient.submitHam({ |
|
user_ip : ipAddr, |
|
user_agent : comment.get('ua'), |
|
referrer : process.env.SITE_URL + comment.get('url'), |
|
permalink : process.env.SITE_URL + comment.get('url'), |
|
comment_type : 'comment', |
|
comment_author : comment.get('nick'), |
|
comment_author_email : comment.get('mail'), |
|
comment_author_url : comment.get('link'), |
|
comment_content : comment.get('comment'), |
|
// is_test : true // Default value is false |
|
}, function(err) { |
|
if (!err) { |
|
console.log('评论已经标记为非垃圾!'); |
|
} |
|
}); |
|
} |
|
else console.log('Akismet key 异常!'); |
|
}); |
|
};
|
|
|