From af90a831988d832174c23819752d2a0e93287b2a Mon Sep 17 00:00:00 2001 From: HF Date: Wed, 17 Mar 2021 15:11:24 +0100 Subject: [PATCH] log subnet for captchaserver, parse error response before caring about status code --- src/actions/fetch.js | 24 ++++++++++-------------- src/store/configureStore.js | 2 ++ src/store/placePixelControl.js | 20 ++++++++++++++++++++ src/ui/placePixel.js | 2 +- src/utils/captcha.js | 4 ++-- 5 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 src/store/placePixelControl.js diff --git a/src/actions/fetch.js b/src/actions/fetch.js index 5499869..56ede23 100644 --- a/src/actions/fetch.js +++ b/src/actions/fetch.js @@ -32,21 +32,17 @@ async function fetchWithTimeout(resource, options) { * @return Object of response */ async function parseAPIresponse(response) { - if (!response.ok) { - const code = response.status; - if (code === 429) { - let error = t`You made too many requests`; - const retryAfter = response.headers.get('Retry-After'); - if (!Number.isNaN(Number(retryAfter))) { - const ti = Math.floor(retryAfter / 60); - error += `, ${t`try again after ${ti}min`}`; - } - return { - errors: [error], - }; + const { status: code } = response; + + if (code === 429) { + let error = t`You made too many requests`; + const retryAfter = response.headers.get('Retry-After'); + if (!Number.isNaN(Number(retryAfter))) { + const ti = Math.floor(retryAfter / 60); + error += `, ${t`try again after ${ti}min`}`; } return { - errors: [t`Connection error ${code} :(`], + errors: [error], }; } @@ -54,7 +50,7 @@ async function parseAPIresponse(response) { return await response.json(); } catch (e) { return { - errors: [t`Server answered with gibberish :(`], + errors: [t`Connection error ${code} :(`], }; } } diff --git a/src/store/configureStore.js b/src/store/configureStore.js index 401c2de..69d2e35 100644 --- a/src/store/configureStore.js +++ b/src/store/configureStore.js @@ -12,6 +12,7 @@ import array from './array'; import promise from './promise'; import notifications from './notifications'; import title from './title'; +import placePixelControl from './placePixelControl'; import extensions from './extensions'; import reducers from '../reducers'; @@ -29,6 +30,7 @@ const store = createStore( title, protocolClientHook, rendererHook, + placePixelControl, extensions, ), ), diff --git a/src/store/placePixelControl.js b/src/store/placePixelControl.js new file mode 100644 index 0000000..b54f6f1 --- /dev/null +++ b/src/store/placePixelControl.js @@ -0,0 +1,20 @@ +/* + * Hooks for placePixel + * + * @flow + */ + +import { requestFromQueue } from '../ui/placePixel'; + +export default (store) => (next) => (action) => { + switch (action.type) { + case 'CLOSE_ALERT': { + requestFromQueue(store); + break; + } + default: + // nothing + } + + return next(action); +}; diff --git a/src/ui/placePixel.js b/src/ui/placePixel.js index ac4c3b9..39eb4e2 100644 --- a/src/ui/placePixel.js +++ b/src/ui/placePixel.js @@ -38,7 +38,7 @@ let clientPredictions = []; let lastRequestValues = {}; -function requestFromQueue(store) { +export function requestFromQueue(store) { if (!pixelQueue.length) { pixelTimeout = null; return; diff --git a/src/utils/captcha.js b/src/utils/captcha.js index 3e62c14..bd7e97a 100644 --- a/src/utils/captcha.js +++ b/src/utils/captcha.js @@ -25,7 +25,7 @@ export function setCaptchaSolution( text: string, ip: string, ) { - const key = `capt:${getIPv6Subnet(ip)}`; + const key = `capt:${ip}`; return redis.setAsync(key, text, 'EX', CAPTCHA_TIMEOUT); } @@ -43,7 +43,7 @@ export async function checkCaptchaSolution( ip: string, ) { const ipn = getIPv6Subnet(ip); - const key = `capt:${ipn}`; + const key = `capt:${ip}`; const solution = await redis.getAsync(key); if (solution) { if (solution.toString('utf8') === text) {