34 lines
		
	
	
		
			850 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			850 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
const { rateLimit } = require('express-rate-limit')
 | 
						|
const errors = require('../../errors')
 | 
						|
const config = require('../../config')
 | 
						|
 | 
						|
const determineKey = (req) => {
 | 
						|
  if (req.user) {
 | 
						|
    return req.user.id
 | 
						|
  }
 | 
						|
  return req.header('cf-connecting-ip') || req.ip
 | 
						|
}
 | 
						|
 | 
						|
// limits requests to user endpoints (login, signup) to 10 requests per 5 minutes
 | 
						|
const userEndpoints = rateLimit({
 | 
						|
  windowMs: 5 * 60 * 1000,
 | 
						|
  limit: 10,
 | 
						|
  keyGenerator: determineKey,
 | 
						|
  handler: (req, res) => errors.errorTooManyRequests(res)
 | 
						|
})
 | 
						|
 | 
						|
// limits the amount of requests to the new note endpoint per 5 minutes based on configuration
 | 
						|
const newNotes = rateLimit({
 | 
						|
  windowMs: 5 * 60 * 1000,
 | 
						|
  limit: config.rateLimitNewNotes,
 | 
						|
  keyGenerator: determineKey,
 | 
						|
  handler: (req, res) => errors.errorTooManyRequests(res)
 | 
						|
})
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  userEndpoints,
 | 
						|
  newNotes
 | 
						|
}
 |