function api(opts) { opts = opts || {}; var app = koa(); // logging if ('test' != env) app.use(logger()); // x-response-time app.use(responseTime()); // compression app.use(compress()); // rate limiting app.use(ratelimit({ max: opts.ratelimit, duration: opts.duration, db: redis.createClient() })); // routing app.use(router(app)); // boot load(app, __dirname + '/api'); return app; }
/** * Initialize an app with the given `opts`. * * @param {Object} opts * @return {Application} * @api public */ function api(opts) { opts = opts || {}; let app = koa(); // Oauth2 server init & caching let oauthServer = oauth2orize.createServer(); oauth.init(oauthServer); generateAccessToken.cacheOauthServer(oauthServer); // querystring require('koa-qs')(app); app.querystring = require('qs'); app.use(body()); app.use(cors({ methods: 'GET,POST,PUT,PATCH,OPTIONS', headers: 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since', maxAge: 300000, credentials: true })); // Logging if ('test' != env) app.use(logger()); // Passport app.use(passport.initialize()); // Enable app-wide authentication app.use(isAuthenticated()); // Etag app.use(conditional()); app.use(etag()); // x-response-time app.use(responseTime()); // compression app.use(compress()); // rate limiting app.use(ratelimit({ max: opts.ratelimit, duration: opts.duration, db: redis.hiringTicket })); // routing app.use(router(app)); // Error handling app.use(error()); // boot load(app, __dirname + '/api'); return app; }
const router = new Router() const app = new Koa() const kitsu = new Kitsu() const chrome = spawn('google-chrome') chrome.stdout.on('data', (data) => { console.log(`stdout: ${data}`) }) chrome.stderr.on('data', (data) => { console.log(`stderr: ${data}`) }) chrome.on('close', (code) => { console.log(`exited: ${code}`) }) chrome.on('error', (err) => { console.log(`error: ${err}`) }) app.use(parser()) app.use(ratelimit({ db: redis.createClient(process.env.REDIS_URL), duration: parseInt(process.env.RATELIMIT_DURATION), max: parseInt(process.env.RATELIMIT_MAX), id: (ctx) => { let { body } = ctx.request if (body.user_id) { return body.user_id } else return ctx.ip } })) router.use(async (ctx, next) => { try { let { method, body } = ctx.request let token = process.env.VERIFICATION if (method === 'POST') { let valid = true if (body.token) { valid = body.token === token } else {
module.exports = function (port) { // inject sugarJS require('sugar'); // npm dependencies let bodyParser = require('koa-body')({multipart: true}), koa = require('koa'), gzip = require('koa-gzip'), AWS = require('aws-sdk'), helmet = require('koa-helmet'), logger = require('koa-logger'), router = require('koa-router'), //session = require('koa-generic-session'), //RedisStore = require('koa-redis'), limit = require('koa-ratelimit'), redis = require('redis'), statics = require('koa-static'), path = require('path'), views = require('koa-render'); let utils = require('./libs/utils')(); // config AWS AWS.config.region = 'eu-west-1'; let DynamoDB = new AWS.DynamoDB({ apiVersion: '2012-08-10' }); let db = utils.wrap(DynamoDB); // config coolog require('coolog').addChannel({ name: 'root', level: 'debug', appenders: ['console'] }); let app = koa(); // logger app.use(logger()); // session app.keys = [process.env.SECRET_KEY]; /*app.use(session({ store: new RedisStore({ host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }) }));*/ let redis_url = require('url').parse(process.env.REDIS_URL); let client = redis.createClient(redis_url.port, redis_url.hostname, {no_ready_check: true}); //client.auth(redis_url.auth.split(":")[1]); app.use(limit({ db: client, duration: 1000 * 60 * 60, max: 1000 })); app.use(views('./views', 'jade')); // serve static files app.use(statics(__dirname + '/public')); // router app.use(router(app)); //app.use(require('koa-router-newrelic')(app)); // ## Website routes let website_routes = require('./routes/site')(db); let api_routes = require('./routes/api')(db); let error_routes = require('./routes/error')(); let middleware = require('./middleware')(); // website let website_prefix = ''; app.get(path.join(website_prefix, '/'), website_routes.index); app.get(path.join(website_prefix, '/success/:api_key'), middleware.api_key, website_routes.form.success); app.get(path.join(website_prefix, '/deleted'), website_routes.form.deleted); app.get(path.join(website_prefix, '/signup'), website_routes.form.signup); app.get(path.join(website_prefix, '/delete/:api_key'), middleware.api_key, website_routes.form.del); app.get(path.join(website_prefix, '/edit/:api_key'), middleware.api_key, website_routes.form.edit); app.get(path.join(website_prefix, '/dashboard/:api_key'), middleware.api_key, website_routes.dashboard); app.get(path.join(website_prefix, '/confirm/email/confirmed/:api_key'), middleware.api_key, website_routes.confirmed_email); // website errors app.get(path.join(website_prefix, '/520'), error_routes.origin_error); app.get(path.join(website_prefix, '/404'), error_routes.not_found); app.get(path.join(website_prefix, '/500'), error_routes.server_error); let api_prefix = '/api'; app.post(path.join(api_prefix, '/confirm/sms/:api_key'), bodyParser, api_routes.confirm_sms); app.get(path.join(api_prefix, '/confirm/send-sms/:api_key'), api_routes.send_confirm_sms); app.get(path.join(api_prefix, '/confirm/send-email/:api_key'), middleware.api_key, api_routes.send_confirm_email); app.post(path.join(api_prefix, '/new-form'), bodyParser, api_routes.form.create); app.post(path.join(api_prefix, '/form/:type/:api_key'), bodyParser, api_routes.form.get); //utils.rateLimit() app.post(path.join(api_prefix, '/edit/:api_key'), bodyParser, api_routes.form.edit); app.post(path.join(api_prefix, '/delete/:api_key'), bodyParser, api_routes.form.del); app.get(path.join(api_prefix, '/graph/:api_key'), bodyParser, api_routes.graph); app.get(path.join('/confirm/email/:api_key'), api_routes.confirm_email); // add security app.use(helmet.defaults()); // compress responses app.use(gzip()); // start server return app.listen(port); };