สคีมาบัญชีดำ:
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Ycxj-Wanglihui เมื่อปี 2014/5/28
-
'ใช้อย่างเข้มงวด';
var mongoose = ต้องการ ('mongoose');
var schema = mongoose.schema;
// 1. การปิดกั้นระยะสั้น 2. การบล็อกถาวร
var degree = {temp: 1, Forever: 2};
-
* บัญชีดำ
* @type {schema}
-
* @param ip {string} blacklist ip
* @param createat {วันที่} เวลาการสร้าง
* @Param Expiretime {วันที่} หากเป็นการปิดกั้นสั้น ๆ บล็อกเวลาหมดอายุ
* @param ForbidDendeGree {number} การปิดกั้นระดับ 1 การบล็อกระยะสั้น 2. การปิดกั้นถาวร
* @param เหตุผล {string} การปิดกั้นเหตุผล
-
var blacklist = schema ใหม่ ({
ip: {
ประเภท: สตริง
ดัชนี: จริง
-
createat: {
ประเภท: วันที่
ค่าเริ่มต้น: date.now
-
หมดอายุ: {
ประเภท: วันที่
-
ForbidDendeGree: {
ประเภท: จำนวน,
ค่าเริ่มต้น: degree.temp
-
เหตุผล:{
ประเภท: สตริง
ค่าเริ่มต้น: 'คำขอบ่อยครั้ง'
-
-
Mongoose.model ('Blacklist', Blacklist);
สคีมาบันทึก IP และส่ง:
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Ycxj-Wanglihui เมื่อปี 2014/5/28
-
'ใช้อย่างเข้มงวด';
var mongoose = ต้องการ ('mongoose');
var schema = mongoose.schema;
var objectId = schema.ObjectId;
-
* บันทึกคำตอบและ IP ของการเข้าร่วมในแบบสอบถาม
* @type {schema}
-
* @param answerid {objectId} ตอบกลับรหัส
* @param createat {วันที่} เวลาการสร้าง
* @param ip {String} ผู้ที่เข้าร่วมในการตอบกลับ IP
-
var ipanswerLog = new schema ({
คำตอบ: {
ประเภท: ObjectId
-
createat: {
ประเภท: วันที่
ค่าเริ่มต้น: date.now
-
ip: {
ประเภท: สตริง
ดัชนี: จริง
-
-
mongoose.model ('ipanswerlog', ipanswerlog);
รหัสพร็อกซีที่เกี่ยวข้อง:
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Ycxj-Wanglihui เมื่อปี 2014/5/28
-
'ใช้อย่างเข้มงวด';
var ipanswerlog = ต้องการ ('../ models'). ipanswerlog;
-
* สร้างและบันทึก
* @param ipanswerlog {schema หรือ dict}
* @param callback
-
var newandsave = function (ipanswerlog, callback) {
if (ipanswerlog instanceof ipanswerlog) {
ipanswerlog.save (โทรกลับ);
}อื่น{
var m = ใหม่ ipanswerlog (ipanswerlog);
M.Save (โทรกลับ);
-
-
-
* จำนวนการตอบกลับภายในหนึ่งนาที
* @param ip
* @param callback
-
var countoneminuteanswer = function (ip, callback) {
var endtime = date.now ();
var Begintime = endtime - 1,000*60*1;
Countipanswerbytime (Begintime, Endtime, IP, Callback);
-
-
* ตอบกลับหมายเลขภายในหนึ่งชั่วโมง
* @param ip
* @param callback
-
var countoneHouranswer = function (IP, callback) {
var endtime = date.now ();
var begintime = endtime - 1,000*60*60*1;
Countipanswerbytime (Begintime, Endtime, IP, Callback);
-
-
* ตอบกลับภายในหนึ่งวัน
* @param ip
* @param callback
-
var countonedayanswer = function (ip, callback) {
var endtime = date.now ();
var begintime = endtime - 1,000*60*60*24;
Countipanswerbytime (Begintime, Endtime, IP, Callback);
-
-
* คำนวณจำนวนการตอบกลับในระยะเวลาหนึ่ง
* @param Begintime {number} การประทับเวลาเริ่มต้น
* @param Endtime {number} เวลาสิ้นสุดถ้า null ให้ใช้การประทับเวลาปัจจุบัน
* @param ip {string} ที่อยู่ IP
* @param callback
-
var countipanswerbytime = function (begintime, endtime, ip, callback) {
if (! endtime) {
endtime = date.now ();
-
ipanswerlog.count ({ip: ip, '$ และ': {$ lt: Begintime, $ gt: endtime}}, callback);
-
exports.countipanswerbytime = countipanswerbytime;
การส่งออก
Exports.countoneHouranswer = CountoneHouranswer;
Exports.countoneminuteanswer = countoneminuteanswer;
Exports.newandsave = Newandsave;
พร็อกซีบัญชีดำ:
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Ycxj-Wanglihui เมื่อปี 2014/5/28
-
'ใช้อย่างเข้มงวด';
var BlackList = ต้องการ ('../ models'). Blacklist;
-
* สร้างและบันทึก
* @param backlist {blacklist} หรือ {dict} ข้อมูล Blacklist
* @param callback
-
var newandsave = function (backlist, callback) {
if (อินสแตนซ์รายการ backlist ของ Blacklist) {
Backlist.save (โทรกลับ);
}อื่น{
var m = บัญชีดำใหม่ (backlist);
M.Save (โทรกลับ);
-
-
-
* ปิดใช้งานการเข้าถึง IP เป็นเวลาหนึ่งชั่วโมง
* @param ip {String}
* @param callback
-
var newandsaveonehourtempforbidden = function (ip, callback) {
var ExpireTime = Date.now () + 1,000*60*60;
Newandsavetempforbidden (IP, Expiretime, Callback);
-
-
* ปิดการใช้งานหนึ่งวัน
* @param ip {String}
* @param callback
-
var newandsaveonedaytempforbidden = function (ip, callback) {
var ExpireTime = Date.now () + 1,000*60*60*24;
Newandsavetempforbidden (IP, Expiretime, Callback);
-
-
* สร้างบัญชีดำชั่วคราว
* @param ip {String}
* @param หมดอายุ {หมายเลข} เวลาหมดอายุ
* @param callback
-
var newandsavetempforbidden = function (IP, EXPIRETIME, CallBack) {
var blacklist = new BlackList ({IP: IP, EXPIRETIME: EXPIRETIME, FORBIDDENDEGREE: 1});
Newandsave (Blacklist, Callback);
-
-
* สร้างและบันทึกบัญชีดำถาวร
* @param ip
* @param callback
-
var newandsaveforeverborbidden = function (ip, callback) {
var blacklist = new BlackList ({IP: IP, ForbidDendeGree: 2});
Newandsave (Blacklist, Callback);
-
-
* ตรวจสอบว่าอยู่ในบัญชีดำหรือไม่
* @param ip {string} ที่อยู่ IP
* @param callback
-
var isinblacklist = function (ip, callback) {
getBlackListByip (IP, ฟังก์ชั่น (err, Blacklist) {
ถ้า (err) {
การโทรกลับ (err);
} อื่นถ้า (Blacklist) {
var currentDate = date.now ();
if (blacklist.forbiddendegree === 1 && blacklist.expiretime> currentDate) {
removeblacklistbyip (ip, function (err) {
ถ้า (err) {
การโทรกลับ (err);
}อื่น{
การโทรกลับ (null, false);
-
-
}อื่น{
การโทรกลับ (null, true);
-
}อื่น{
การโทรกลับ (null, false);
-
-
-
-
* รับรายการ Blacklist ผ่าน IP
* @param ip
* @param callback
-
var getBlackListByip = function (ip, callback) {
Blacklist.findone ({IP: IP}, การโทรกลับ);
-
-
* ลบบัญชีดำตาม IP
* @param ip
* @param callback
-
var remverblacklistbyip = function (ip, callback) {
getBlackListByip (IP, ฟังก์ชั่น (err, Blacklist) {
ถ้า (err) {
การโทรกลับ (err);
} อื่นถ้า (Blacklist) {
Blacklist.remove (โทรกลับ);
}อื่น{
การโทรกลับ (null, null);
-
-
-
Exports.newandsave = Newandsave;
exports.isinblacklist = isinblacklist;
exports.getBlackListByip = getBlackListByip;
exports.removeblacklistbyip = removeblacklistbyip;
Exports.newandSaveOneHourTempForBidden = NewandSaveOneHourTempForBident;
Exports.newandsaveOnedayTempforBidden = NewandsaveOnedayTempforBided;
Exports.newandsaveforeverborbident = newandsaveforeverborborbondish;
exports.newandsavetempforbidden = newandsavetempforbidden;
รายละเอียดมิดเดิลแวร์:
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Ycxj-Wanglihui เมื่อปี 2014/5/28
-
'ใช้อย่างเข้มงวด';
var blacklistproxy = ต้องการ ('../../ proxy'). blacklistporxy;
var ipanswerlogproxy = ต้องการ ('../../ proxy'). ipanswerlogproxy;
var eventProxy = ต้องการ ('eventProxy');
-
* ตรวจสอบว่าฉันต้องย้าย IP ไปยังบัญชีดำหรือไม่
* @param req
* @param res
* @param ถัดไป
-
var isneedMoveToblackList = function (req, res, ถัดไป) {
var ip = req.ip;
// ตัดสินว่าอยู่ในบัญชีดำหรือไม่
VeutheNotinBlackList (req, res, function () {
var ep = new EventProxy ();
Ep.fail (ถัดไป);
EP.ALL ('MINUTECOUNT', 'HORCOUNT', 'DAYCOUNT', ฟังก์ชั่น (minutecount, hourCount, dayCount) {
if (minutecount> 10) {
BlacklistProxy.NewandSaveOneHourTempForBiden
ถ้า (err) {
ส่งคืนถัดไป (เอ่อ);
}อื่น{
return res.send ('การส่งบ่อยเกินไปลองอีกครั้งหลังจาก 1 ชั่วโมง!');
-
-
} อื่นถ้า (hourcount> 100) {
BlacklistProxy.NewandSaveOnedayTempForBiden
ถ้า (err) {
ส่งคืนถัดไป (เอ่อ);
}อื่น{
return res.send ('การส่งบ่อยเกินไปลองอีกครั้งหลังจาก 1 วัน!');
-
-
} อื่นถ้า (daycount> 1000) {
BlacklistProxy.NewandSaveOnedayTempForBiden
ถ้า (err) {
ส่งคืนถัดไป (เอ่อ);
}อื่น{
return res.send ('การส่งบ่อยเกินไปลองอีกครั้งหลังจาก 1 วัน!');
-
-
}อื่น{
return next ();
-
-
ipanswerlogproxy.countoneminuteanswer (IP, Ep.Done ('minutecount'));
ipanswerlogproxy.countonehouranswer (IP, Ep.Done ('HourCount'));
ipanswerlogproxy.countonedayanswer (Ip, Ep.done ('daycount'));
-
-
-
* มิดเดิลแวร์ต้องการให้ IP ไม่ได้อยู่ในบัญชีดำ
* @param req
* @param res
* @param ถัดไป
-
var quantedenotinblacklist = function (req, res, ถัดไป) {
var ip = req.ip;
BlackListProxy.isinblackList (IP, ฟังก์ชั่น (ERR, ผลลัพธ์) {
ถ้า (err) {
ถัดไป (เอ่อ);
} อื่นถ้า (ผลลัพธ์) {
Return Res.Send ('IP ของคุณถูกห้ามไม่ให้ส่งหากคุณมีคำถามใด ๆ โปรดติดต่อ [email protected]');
}อื่น{
ต่อไป();
-
-
-
Exports.isneedMovetOblackList = iSneedMovetOblackList;
การส่งออก
ใช้ในการกำหนดเส้นทาง:
การคัดลอกรหัสมีดังนี้:
// อินเตอร์เฟสการส่งหน้าเว็บ
Router.post ('/create', middleware.isneedMovetOblackList, Paperanswers.create);