1- // Distributed under MS-RSL license: see /LICENSE for terms. Copyright 2019-2020 Dominic Morris.
1+ // Distributed under MS-RSL license: see /LICENSE for terms. Copyright 2019-2021 Dominic Morris.
22'use strict' ;
33
44const express = require ( 'express' ) ;
@@ -12,8 +12,9 @@ const scp_eos = require('./scp_eos');
1212const scp_ext = require ( './scp_ext' ) ;
1313const scp_ref = require ( './scp_ref' ) ;
1414const scp_xs = require ( './scp_xs' ) ;
15- const scp_cm = require ( './scp_cm' ) ;
15+ // const scp_cm = require('./scp_cm');
1616const scp_stm = require ( './scp_stm' ) ;
17+ const scp_faucet = require ( './scp_faucet' ) ;
1718const scp_dbg = require ( './scp_dbg' ) ;
1819const sql = require ( 'mssql' ) ;
1920const config = require ( './config' ) ;
@@ -37,17 +38,12 @@ scp_sql_pool.connect()
3738
3839// SQL connections (StMaster - AC/SD DBs)
3940//global.stm_sql_pools = [];
40- const stm_db = config . stm_sql_db ( ) ;
41- //const stm_dbs = config.stm_sql_dbs();
42- //for (let stm_db of stm_dbs) {
43- //console.log(db.name);
44- const stm_sql_pool = new sql . ConnectionPool ( stm_db . config ) ;
45- stm_sql_pool . connect ( )
46- . then ( ( ) => { console . log ( `stm_sql_pool connected ok: ` , stm_db . config . server ) ; } )
47- . catch ( ( err => { console . error ( `## failed to connect to stm_sql_pool: ${ err . message } ` ) ; } ) ) ;
48- //global.stm_sql_pools.push(stm_sql_pool);
49- global . stm_sql_pool = stm_sql_pool ;
50- //}
41+ // const stm_db = config.stm_sql_db();
42+ // const stm_sql_pool = new sql.ConnectionPool(stm_db.config);
43+ // stm_sql_pool.connect()
44+ // .then(() => { console.log(`stm_sql_pool connected ok: `, stm_db.config.server); })
45+ // .catch((err => { console.error(`## failed to connect to stm_sql_pool: ${err.message}`); }));
46+ // global.stm_sql_pool = stm_sql_pool;
5147
5248// *** cors is set on the azure web service (host IIS instance) - works much more reliably ***
5349// but needed for dev
@@ -74,40 +70,42 @@ if (process.env.DEV === "1") {
7470 app . use ( "/api" , cors ( corsOptions ) ) ;
7571}
7672
77- // hard rate limits - block
78- const generous_limiter = rateLimit ( {
79- windowMs : 1 * 60 * 1000 , // 1 minute
80- max : 15 , // limit per IP per windowMs - clears after windowMs
81- handler : ( req , res , /*next*/ ) => { console . log ( `### generous_limiter - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #1a" ) ; } ,
82- onLimitReached : ( req , res , options ) => { console . log ( `### generous_limiter - onLimitReached: ${ req . url } ` ) ; }
83- } ) ;
84- app . use ( "/api/assets" , generous_limiter ) ;
85- app . use ( "/api/data" , generous_limiter ) ;
86- app . use ( "/api/login_v2" , generous_limiter ) ;
87- app . use ( "/api/account" , generous_limiter ) ;
88- app . use ( "/api/refer" , generous_limiter ) ;
89- //app.use("/api/stm", generous_limiter); // no limit on this endpoint - it's called in parallel by wallet worker threads (see: action/s/wallet.js:newWalletAddressFromPrivKey())
90-
91- const paranoid_limiter = rateLimit ( {
92- windowMs : 10 * 1000 , // 10 seconds
93- max : 4 ,
94- handler : ( req , res , /*next*/ ) => { console . log ( `### paranoid_limiter - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #1b" ) ; } ,
95- onLimitReached : ( req , res , options ) => { console . log ( `### paranoid_limiter - onLimitReached: ${ req . url } ` ) ; }
96- } ) ;
97- app . use ( "/api/login_v2" , paranoid_limiter ) ;
98- app . use ( "/api/account" , paranoid_limiter ) ;
99-
100- // soft limit - slow down
101- const speed_limiter = slowDown ( {
102- windowMs : 10 * 1000 , // 10 secs
103- delayAfter : 10 ,
104- delayMs : 100 , // begin adding 100ms of delay per request above delayAfter - clears after windowMs
105- handler : ( req , res , /*next*/ ) => { console . log ( `### slowDown - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #2" ) ; } ,
106- onLimitReached : ( req , res , options ) => { console . log ( `### slowDown - onLimitReached: ${ req . url } ` ) ; }
107- } ) ;
108- app . use ( "/api/login_v2" , speed_limiter ) ;
109- app . use ( "/api/account" , speed_limiter ) ;
110- app . use ( "/api/refer" , speed_limiter ) ;
73+ // hard rate limits - these block requests after limits are breached
74+ const generous_limiter = rateLimit ( {
75+ windowMs : 1 * 60 * 1000 , // 15 per minute max == every 4 seconds
76+ max : 15 ,
77+ handler : ( req , res , /*next*/ ) => { console . log ( `### generous_limiter - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #1a" ) ; } ,
78+ onLimitReached : ( req , res , options ) => { console . log ( `### generous_limiter - onLimitReached: ${ req . url } ` ) ; }
79+ } ) ;
80+ app . use ( "/api/assets" , generous_limiter ) ;
81+ app . use ( "/api/data" , generous_limiter ) ;
82+ app . use ( "/api/login_v2" , generous_limiter ) ;
83+ app . use ( "/api/account" , generous_limiter ) ;
84+ app . use ( "/api/refer" , generous_limiter ) ;
85+ app . use ( "/api/faucet" , generous_limiter ) ;
86+ //app.use("/api/stm", generous_limiter); // no limit on this endpoint - it's called in parallel by wallet worker threads (see: action/s/wallet.js:newWalletAddressFromPrivKey())
87+
88+ const paranoid_limiter = rateLimit ( {
89+ windowMs : 1 * 1000 , // 2 per second max.
90+ max : 2 ,
91+ handler : ( req , res , /*next*/ ) => { console . log ( `### paranoid_limiter - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #1b" ) ; } ,
92+ onLimitReached : ( req , res , options ) => { console . log ( `### paranoid_limiter - onLimitReached: ${ req . url } ` ) ; }
93+ } ) ;
94+ app . use ( "/api/login_v2" , paranoid_limiter ) ;
95+ app . use ( "/api/account" , paranoid_limiter ) ;
96+ app . use ( "/api/faucet" , paranoid_limiter ) ;
97+
98+ // soft rate limiter - this slows down requests are limits are breached
99+ const speed_limiter = slowDown ( {
100+ windowMs : 10 * 1000 , // 10 seconds
101+ delayAfter : 10 , // allow 10 requests per 10 seconds, then...
102+ delayMs : 100 , // begin adding 100ms of delay per request above delayAfter # requests - clears after windowMs
103+ handler : ( req , res , /*next*/ ) => { console . log ( `### slowDown - handler: ${ req . url } ` ) ; /*set_cors(req, res);*/ res . status ( 429 ) . send ( "Scoop Limit #2" ) ; } ,
104+ onLimitReached : ( req , res , options ) => { console . log ( `### slowDown - onLimitReached: ${ req . url } ` ) ; }
105+ } ) ;
106+ app . use ( "/api/login_v2" , speed_limiter ) ;
107+ app . use ( "/api/account" , speed_limiter ) ;
108+ app . use ( "/api/refer" , speed_limiter ) ;
111109
112110// misc
113111app . use ( bodyParser . urlencoded ( { limit : '2mb' , extended : false } ) ) ;
@@ -141,14 +139,19 @@ app.post('/api/refer', function (req, res) { scp_ref.send_refs(req, res); });
141139app . post ( '/api/xs/c/sign' , function ( req , res ) { scp_xs . changelly_sign ( req , res ) ; } ) ;
142140
143141/*
144- * CryptoMail - WIP...
142+ * CryptoMail
145143 */
146- app . get ( '/api/cm/otu/new' , function ( req , res ) { scp_cm . new_otu ( req , res ) ; } ) ;
144+ // app.get('/api/cm/otu/new', function (req, res) { scp_cm.new_otu(req, res); });
147145
148146/*
149147 * StMaster Integration
150148 */
151- app . get ( '/api/stm' , function ( req , res ) { scp_stm . get_sec_tokens ( req , res ) ; } ) ;
149+ //app.get('/api/stm', function (req, res) { scp_stm.get_sec_tokens(req, res); });
150+
151+ /*
152+ * Faucet
153+ */
154+ app . post ( '/api/faucet' , function ( req , res ) { scp_faucet . faucet_drip ( req , res ) ; } ) ;
152155
153156/*
154157 * dbg
0 commit comments