مخطط القائمة السوداء:
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة YCXJ-Wanglihui في 2014/5/28.
*/
"استخدام صارم" ؛
var mongoose = يحتاج ('mongoose') ؛
VAR SCEMA = mongoose.schema ؛
// 1. حظر قصير الأجل 2. حظر دائم
var degreat = {temp: 1 ، forever: 2} ؛
/**
* القائمة السوداء
* type {schema}
*
* param ip {string} IP القائمة السوداء
* param createat {date} وقت الإنشاء
* param Expiretime {Date} إذا كان ذلك حظرًا موجزًا ، فالوقت انتهاء صلاحية الكتلة
* param flbiddendegree {number} الحظر المستوى 1. حظر قصير الأجل 2. حظر دائم
* @param quision {String} الحظر سبب
*/
Var Blacklist = مخطط جديد ({
IP: {
اكتب: سلسلة ،
الفهرس: صحيح
} ،
المبدع: {
النوع: التاريخ ،
الافتراضي: التاريخ. الآن
} ،
Expiretime: {
النوع: التاريخ
} ،
Forbiddendegree: {
النوع: رقم ،
الافتراضي: درجة
} ،
سبب:{
اكتب: سلسلة ،
الافتراضي: "الطلبات المتكررة"
}
}) ؛
mongoose.model ("القائمة السوداء" ، القائمة السوداء) ؛
مخطط سجل IP وتقديمه:
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة YCXJ-Wanglihui في 2014/5/28.
*/
"استخدام صارم" ؛
var mongoose = يحتاج ('mongoose') ؛
VAR SCEMA = mongoose.schema ؛
var ObjectId = schema.objectid ؛
/**
* تسجيل الردود و IP للمشاركة في الاستبيان
* type {schema}
*
* @param appledId {ObjectId} معرف الرد
* param createat {date} وقت الإنشاء
* param ip {string} الأشخاص الذين شاركوا في رد IP
*/
var ipanswerlog = مخطط جديد ({
إجابة: {
اكتب: ObjectId
} ،
المبدع: {
النوع: التاريخ ،
الافتراضي: التاريخ. الآن
} ،
IP: {
اكتب: سلسلة ،
الفهرس: صحيح
}
}) ؛
mongoose.model ('ipanswerlog' ، ipanswerlog) ؛
رمز الوكيل ذي الصلة:
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة YCXJ-Wanglihui في 2014/5/28.
*/
"استخدام صارم" ؛
var ipanswerlog = require ('../ models'). ipanswerlog ؛
/**
* إنشاء وحفظ
* param ipanswerlog {schema أو dict}
* param رد الاتصال
*/
var newandsave = function (ipanswerlog ، callback) {
if (ipanswerlog مثيل ipanswerlog) {
ipanswerlog.save (رد الاتصال) ؛
}آخر{
var m = new ipanswerlog (ipanswerlog) ؛
M.Save (رد الاتصال) ؛
}
}
/**
* عدد الردود في غضون دقيقة واحدة
* param IP
* param رد الاتصال
*/
var countoneminuteanswer = function (IP ، callback) {
var endtime = date.now () ؛
var begintime = endtime - 1000*60*1 ؛
countipanswerbytime (begintime ، endtime ، IP ، رد الاتصال) ؛
}
/**
* الرد على الأرقام في غضون ساعة واحدة
* param IP
* param رد الاتصال
*/
var countoneHouranswer = function (IP ، callback) {
var endtime = date.now () ؛
var begintime = endtime - 1000*60*60*1 ؛
countipanswerbytime (begintime ، endtime ، IP ، رد الاتصال) ؛
}
/**
* الرد خلال يوم واحد
* param IP
* param رد الاتصال
*/
var countonedayanswer = function (IP ، callback) {
var endtime = date.now () ؛
var begintime = endtime - 1000*60*60*24 ؛
countipanswerbytime (begintime ، endtime ، IP ، رد الاتصال) ؛
}
/**
* احسب عدد الردود في فترة زمنية معينة
* param begintime {number} ختم وقت البدء
* param endtime {number} نهاية الوقت إذا كان فارغًا ، استخدم الختم الزمني الحالي
* param ip {string} عنوان IP
* param رد الاتصال
*/
var countipanswerbytime = function (begintime ، endtime ، ip ، callback) {
إذا (! Endtime) {
endtime = date.now () ؛
}
ipanswerlog.count ({ip: ip ، '$ و': {$ lt: begintime ، $ gt: endtime}} ، callback) ؛
}
orports.countipanswerbytime = countipanswerbytime ؛
exports.countonedayanswer = countonedayanswer ؛
exports.countonehouranswer = countoneHouranswer ؛
exports.countoneminuteanswer = countoneminuteanswer ؛
التصدير. newandsave = newandsave ؛
وكيل القائمة السوداء:
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة YCXJ-Wanglihui في 2014/5/28.
*/
"استخدام صارم" ؛
var Blacklist = require ('../ models'). القائمة السوداء ؛
/**
* إنشاء وحفظ
* param backlist {BlackList} أو {dict} بيانات القائمة السوداء
* param رد الاتصال
*/
var newAndsave = function (القائمة الخلفية ، رد الاتصال) {
if (مثيل القائمة الخلفية للقائمة السوداء) {
backlist.save (رد الاتصال) ؛
}آخر{
var m = New Blacklist (قائمة خلفية) ؛
M.Save (رد الاتصال) ؛
}
}
/**
* تعطيل وصول IP لمدة ساعة واحدة
* param ip {string}
* param رد الاتصال
*/
var newandsaveonehourtempforbidden = function (IP ، callback) {
var Expiretime = date.now () + 1000*60*60 ؛
NewAndSavetempforddden (IP ، Expirtime ، رد الاتصال) ؛
}
/**
* تعطيل ليوم واحد
* param ip {string}
* param رد الاتصال
*/
var newandsaveonedaytempforbidden = function (IP ، callback) {
var Expiretime = date.now () + 1000*60*60*24 ؛
NewAndSavetempforddden (IP ، Expirtime ، رد الاتصال) ؛
}
/**
* إنشاء قائمة سوداء مؤقتة
* param ip {string}
* param Expiretime {number} وقت انتهاء الصلاحية
* param رد الاتصال
*/
var newandsavetempforbidden = function (IP ، Expiretime ، Callback) {
var BlackList = New BlackList ({IP: IP ، Expiretime: Expiretime ، FlocidDendegree: 1}) ؛
NewAndsave (القائمة السوداء ، رد الاتصال) ؛
}
/**
* إنشاء وحفظ قائمة سوداء دائمة
* param IP
* param رد الاتصال
*/
var newAndSaveForeverForbidden = function (IP ، callback) {
var BlackList = New BlackList ({ip: ip ، flbiddendegree: 2}) ؛
NewAndsave (القائمة السوداء ، رد الاتصال) ؛
}
/**
* حدد ما إذا كان على القائمة السوداء
* param ip {string} عنوان IP
* param رد الاتصال
*/
var isInblackList = function (IP ، callback) {
getBlackListbyip (IP ، الوظيفة (err ، Blacklist) {
إذا (خطأ) {
رد الاتصال (ERR) ؛
} آخر إذا (القائمة السوداء) {
var currentDate = date.now () ؛
if (Blacklist.forbiddendegree === 1 && Blacklist.expiretime> currentDate) {
removeBlackListbyip (IP ، function (err) {
إذا (خطأ) {
رد الاتصال (ERR) ؛
}آخر{
رد الاتصال (فارغ ، خطأ) ؛
}
})
}آخر{
رد الاتصال (فارغ ، صحيح) ؛
}
}آخر{
رد الاتصال (فارغ ، خطأ) ؛
}
})
}
/**
* الحصول على إدخال القائمة السوداء من خلال IP
* param IP
* param رد الاتصال
*/
var getBlackListbyip = function (IP ، callback) {
BlackList.Findone ({ip: ip} ، رد الاتصال) ؛
}
/**
* حذف القائمة السوداء وفقًا لـ IP
* param IP
* param رد الاتصال
*/
var removeBlackListbyip = function (IP ، callback) {
getBlackListbyip (IP ، الوظيفة (err ، Blacklist) {
إذا (خطأ) {
رد الاتصال (ERR) ؛
} آخر إذا (القائمة السوداء) {
Blacklist.remove (رد الاتصال) ؛
}آخر{
رد الاتصال (NULL ، NULL) ؛
}
})
}
التصدير. newandsave = newandsave ؛
orports.isinBlackList = IsinBlackList ؛
exports.getBlackListbyip = getBlackListbyip ؛
Exports.RemoveBlackListbyip = removeBlackListbyip ؛
التصدير.
التصدير.
التصدير.
التصدير.
تفاصيل البرامج الوسيطة:
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة YCXJ-Wanglihui في 2014/5/28.
*/
"استخدام صارم" ؛
var BlackListProxy = require ('../../ proxy'). BlackListPorxy ؛
var ipanswerlogproxy = require ('../../ proxy'). ipanswerlogproxy ؛
var eventproxy = require ('eventProxy') ؛
/**
* حدد ما إذا كنت بحاجة إلى نقل IP إلى القائمة السوداء
* param req
* param الدقة
* param التالي
*/
var isneedmovetOblackList = function (req ، res ، next) {
var ip = req.ip ؛
// احكم على ما إذا كان على القائمة السوداء
quisterenotinblacklist (req ، res ، function () {
var ep = new eventProxy () ؛
ep.fail (التالي) ؛
ep.all ('minuteCount' ، 'Hourcount' ، 'DayCount' ، function (minuteCount ، hourcount ، daycount) {
if (minuteCount> 10) {
Blacklistproxy.newandsaveonehourtempforbidden (IP ، وظيفة (err ، قائمة أسود) {
إذا (خطأ) {
العودة التالي (err) ؛
}آخر{
Return Res.Send ('التقديم متكرر للغاية ، حاول مرة أخرى بعد ساعة واحدة! ") ؛
}
}) ؛
} آخر إذا (hourcount> 100) {
Blacklistproxy.newandsaveonedaytempforbidden (IP ، الوظيفة (ERR ، Blacklist) {
إذا (خطأ) {
العودة التالي (err) ؛
}آخر{
Return Res.Send ('التقديمات متكررة للغاية ، حاول مرة أخرى بعد يوم واحد! ") ؛
}
})
} آخر إذا (daycount> 1000) {
Blacklistproxy.newandsaveonedaytempforbidden (IP ، الوظيفة (ERR ، Blacklist) {
إذا (خطأ) {
العودة التالي (err) ؛
}آخر{
Return Res.Send ('التقديمات متكررة للغاية ، حاول مرة أخرى بعد يوم واحد! ") ؛
}
})
}آخر{
العودة التالي () ؛
}
})
ipanswerlogproxy.countoneminuteanswer (IP ، ep.done ('minuteCount')) ؛
ipanswerlogproxy.countonehouranswer (IP ، ep.done ('hourcount')) ؛
ipanswerlogproxy.countonedayanswer (IP ، ep.done ('daycount')) ؛
}) ؛
}
/**
* تتطلب البرامج الوسيطة ألا يكون IP على القائمة السوداء
* param req
* param الدقة
* param التالي
*/
var requistinBlackList = function (req ، res ، next) {
var ip = req.ip ؛
BlackListProxy.isinBlackList (IP ، وظيفة (ERR ، النتيجة) {
إذا (خطأ) {
التالي (err) ؛
} آخر إذا (النتيجة) {
Return Res.Send ('يحظر على عنوان IP الخاص بك من إرساله. إذا كان لديك أي أسئلة ، فيرجى الاتصال بـ [email protected]') ؛
}آخر{
التالي()؛
}
})
}
exports.isneedmovetOblackList = isNeedMovetOblackList ؛
Exports.RequirenotInblackList = quiredenotinblacklist ؛
استخدم في التوجيه:
نسخة الكود كما يلي:
// واجهة إرسال صفحة الويب
Router.post ('/create' ، middleware.isneedmovetoBlackList ، paperanswers.create) ؛