bibliogram/src/lib/quota/index.js

43 lines
1.1 KiB
JavaScript
Raw Normal View History

2020-07-22 12:58:21 +00:00
const constants = require("../constants")
const LimitByFrame = require("./LimitByFrame")
const {getIdentifier} = require("./get_identifier")
2020-07-22 13:20:06 +00:00
const db = require("../db")
require("../testimports")(LimitByFrame, getIdentifier, db)
2020-07-22 12:58:21 +00:00
const limiter = new LimitByFrame()
function getIPFromReq(req) {
if (constants.quota.ip_mode === "header") {
return req.headers[constants.quota.ip_header]
} else { // constants.quota.ip_mode === "address"
return req.connection.remoteAddress
}
}
2020-07-22 13:20:06 +00:00
const preparedTrack = db.prepare("INSERT INTO QuotaHistory VALUES (?, ?, ?)")
2020-07-22 12:58:21 +00:00
function remaining(req) {
if (!constants.quota.enabled) return Infinity // sure.
const ip = getIPFromReq(req)
const identifier = getIdentifier(ip)
2020-07-22 13:20:06 +00:00
const remaining = limiter.remaining(identifier)
if (constants.quota.track) {
preparedTrack.run(identifier, Date.now(), remaining)
}
return remaining
2020-07-22 12:58:21 +00:00
}
function add(req, count) {
if (!constants.quota.enabled) return Infinity // why not.
const ip = getIPFromReq(req)
const identifier = getIdentifier(ip)
2020-07-22 12:58:21 +00:00
return limiter.add(identifier, count)
}
module.exports.remaining = remaining
module.exports.add = add