Skip to content

Latest commit

 

History

History
88 lines (82 loc) · 1.8 KB

README.md

File metadata and controls

88 lines (82 loc) · 1.8 KB

Request

Handle basic tasks for koajs.

Example config:

const Koa = require('koa');
const {Request} = require('@smpx/koa-request');

const app = new Koa();

const requestOptions = {
	// install request middleware for access to ctx.$req
	middleware: true,
	// base domain of the app
	baseDomain: 'smartprix.com',
	// limit the request from a single ip (10 requests in 1 minute)
	rateLimit: {
		interval: {min: 1},
		max: 10,
		// don't apply rate limit to these requests
		skip(ctx) {
			return false;
		},
	},
	// enable basic authentication
	basicAuth: {
		enabled: true,
		// skip basic authentication if request is proxied by nginx
		skipOnProxy: true,
		// skip basic authentication if request is from localhost
		skipOnLocalhost: true,
		// custom skip function (don't apply basicAuth if this function returns true)
		skip(ctx) {
			return false;
		},
		// basicAuth username
		name: 'admin',
		// basicAuth password
		pass: 'admin',
	},
	// serve static files from these paths
	staticPaths: [
		{
			path: '/',
			root: `${__dirname}/public`,
			// don't serve these paths directly
			skip(ctx) {
				return ctx.path.startWith('/robots.txt');
			}
		},
		{
			path: '/static',
			root: `${__dirname}/static`,
			allowOrigins: '*',
			immutable: true,
		},
		{
			path: '/files',
			root: `${__dirname}/files`,
			immutable: true,
			// custom path of the file
			async getPath(ctx) {
				return DB.fetch('paths', ctx.path);
			},
		},
	],
	// ban bots
	banBots: {
		// enable banning of common bots (does not include search bots)
		commonBots: true,
		// ban these user agents
		userAgents: [
			'80legs',
		],
		// ban these ips
		ips: [
			'27.210.',
		],
		// what email to show in ban messages
		email: '[email protected]',
	}
};

// provides, ctx.user, ctx.$req, rateLimit, static paths and more
Request.install(app, requestOptions);