Browse Source

Add a cache delay for not blink on genuine

- rely on WeakSet
master
Gaëtan Renaudeau 7 years ago
parent
commit
2a54980ecb
  1. 22
      src/components/GenuineCheck.js
  2. 24
      src/config/constants.js

22
src/components/GenuineCheck.js

@ -5,13 +5,14 @@ import { timeout } from 'rxjs/operators/timeout'
import { connect } from 'react-redux'
import { compose } from 'redux'
import { translate, Trans } from 'react-i18next'
import { delay, createCancelablePolling } from 'helpers/promise'
import logger from 'logger'
import type { T, Device } from 'types/common'
import type { DeviceInfo } from 'helpers/devices/getDeviceInfo'
import { GENUINE_TIMEOUT, DEVICE_INFOS_TIMEOUT } from 'config/constants'
import { GENUINE_TIMEOUT, DEVICE_INFOS_TIMEOUT, GENUINE_CACHE_DELAY } from 'config/constants'
import { createCancelablePolling } from 'helpers/promise'
import { getCurrentDevice } from 'reducers/devices'
import { createCustomErrorClass } from 'helpers/errors'
@ -46,12 +47,7 @@ const mapStateToProps = state => ({
const Bold = props => <Text ff="Open Sans|Bold" {...props} />
// to speed up genuine check, cache result by device id
const GENUINITY_CACHE = {}
const getDeviceId = (device: Device) => device.path
const setDeviceGenuinity = (device: Device, isGenuine: boolean) =>
(GENUINITY_CACHE[getDeviceId(device)] = isGenuine)
const getDeviceGenuinity = (device: Device): ?boolean =>
GENUINITY_CACHE[getDeviceId(device)] || null
const genuineDevices = new WeakSet()
class GenuineCheck extends PureComponent<Props> {
connectInteractionHandler = () =>
@ -76,7 +72,9 @@ class GenuineCheck extends PureComponent<Props> {
device: Device,
deviceInfo: DeviceInfo,
}) => {
if (getDeviceGenuinity(device) === true) {
if (genuineDevices.has(device)) {
logger.log("genuine was already checked. don't check again")
await delay(GENUINE_CACHE_DELAY)
return true
}
const res = await getIsGenuine
@ -85,10 +83,10 @@ class GenuineCheck extends PureComponent<Props> {
.toPromise()
const isGenuine = res === '0000'
if (!isGenuine) {
return Promise.reject(new DeviceNotGenuineError())
throw new DeviceNotGenuineError()
}
setDeviceGenuinity(device, true)
return Promise.resolve(true)
genuineDevices.add(device)
return true
}
handleFail = (err: Error) => {

24
src/config/constants.js

@ -19,23 +19,21 @@ export const MIN_WIDTH = intFromEnv('LEDGER_MIN_WIDTH', 1024)
// time and delays...
export const GET_CALLS_TIMEOUT = intFromEnv('GET_CALLS_TIMEOUT', 30 * 1000)
export const CHECK_APP_INTERVAL_WHEN_INVALID = 600
export const CHECK_APP_INTERVAL_WHEN_VALID = 1200
export const CHECK_UPDATE_DELAY = 5000
export const DEVICE_DISCONNECT_DEBOUNCE = intFromEnv('LEDGER_DEVICE_DISCONNECT_DEBOUNCE', 1000)
export const DEVICE_INFOS_TIMEOUT = intFromEnv('DEVICE_INFOS_TIMEOUT', 5 * 1000)
export const GENUINE_CACHE_DELAY = intFromEnv('GENUINE_CACHE_DELAY', 1000)
export const GENUINE_TIMEOUT = intFromEnv('GENUINE_TIMEOUT', 120 * 1000)
export const GET_CALLS_RETRY = intFromEnv('GET_CALLS_RETRY', 2)
export const GET_CALLS_TIMEOUT = intFromEnv('GET_CALLS_TIMEOUT', 30 * 1000)
export const LISTEN_DEVICES_POLLING_INTERVAL = intFromEnv('LISTEN_DEVICES_POLLING_INTERVAL', 100)
export const SYNC_MAX_CONCURRENT = intFromEnv('LEDGER_SYNC_MAX_CONCURRENT', 1)
export const SYNC_BOOT_DELAY = 2 * 1000
export const OUTDATED_CONSIDERED_DELAY = intFromEnv('OUTDATED_CONSIDERED_DELAY', 5 * 60 * 1000)
export const SYNC_ALL_INTERVAL = 120 * 1000
export const DEVICE_INFOS_TIMEOUT = intFromEnv('DEVICE_INFOS_TIMEOUT', 5 * 1000)
export const GENUINE_TIMEOUT = intFromEnv('GENUINE_TIMEOUT', 120 * 1000)
export const SYNC_BOOT_DELAY = 2 * 1000
export const SYNC_MAX_CONCURRENT = intFromEnv('LEDGER_SYNC_MAX_CONCURRENT', 1)
export const SYNC_TIMEOUT = intFromEnv('SYNC_TIMEOUT', 30 * 1000)
export const OUTDATED_CONSIDERED_DELAY = intFromEnv('OUTDATED_CONSIDERED_DELAY', 5 * 60 * 1000)
export const CHECK_APP_INTERVAL_WHEN_INVALID = 600
export const CHECK_APP_INTERVAL_WHEN_VALID = 1200
export const CHECK_UPDATE_DELAY = 5e3
export const DEVICE_DISCONNECT_DEBOUNCE = intFromEnv('LEDGER_DEVICE_DISCONNECT_DEBOUNCE', 1000)
// Endpoints...

Loading…
Cancel
Save