12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 'use strict';
- const express = require('express');
- const rateLimit = require('express-rate-limit');
- const db = new Map();
- const app = express();
- const limiter1 = rateLimit({
- windowMs: 60 * 1000,
- max: 300, // Limit each IP to 300 requests per `window`
- standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
- legacyHeaders: false, // Disable the `X-RateLimit-*` headers
- });
- const limiter2 = rateLimit({
- windowMs: 60 * 1000,
- max: 2,
- standardHeaders: true,
- legacyHeaders: false,
- });
- app.use(limiter1);
- app.use('/create', limiter2);
- app.get('/', (req, res) => {
- res.sendStatus(403);
- });
- app.get('/create', (req, res) => {
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- let code = "";
- do {
- for(let i = 0; i < 4; i += 1) {
- code += characters.charAt(Math.floor(Math.random() * characters.length));
- }
- } while(db.has(code));
- // It's a set because it was originally idx-only, too late to change now
- db.set(code, {
- x: -1.0,
- y: -1.0,
- set: new Set()
- });
- res.send(code);
- });
- app.get('/verify/:code', (req, res) => {
- const code = req.params.code.toUpperCase();
- if(db.has(code)) {
- res.send(`${code}`);
- } else {
- res.sendStatus(404);
- }
- });
- app.get('/order/:code/:bagel/:x/:y', (req, res) => {
- const code = req.params.code.toUpperCase();
- if(db.has(code)) {
- db.get(code).set.add({
- type: req.params.bagel,
- x: req.params.x,
- y: req.params.y
- });
- res.send("OK");
- } else {
- res.sendStatus(404);
- }
- });
- app.get('/getpos/:code', (req, res) => {
- const code = req.params.code.toUpperCase();
- if(db.has(code)) {
- const {x, y} = db.get(code);
- res.send({x, y});
- } else {
- res.sendStatus(404);
- }
- });
- app.get('/take/:code/:x/:y', (req, res) => {
- const code = req.params.code.toUpperCase();
- if(db.has(code)) {
- db.get(code).x = req.params.x;
- db.get(code).y = req.params.y;
- const v = [...db.get(code).set.values()];
- db.get(code).set.clear();
- res.send(v);
- } else {
- res.sendStatus(404);
- }
- });
- app.listen(42137);
|