cleanup comments, update translations, bump to 0.4.1
This commit is contained in:
parent
9edcc9841b
commit
7d8ab87eee
28 changed files with 412 additions and 1114 deletions
|
|
@ -1,15 +1,12 @@
|
|||
'use strict'
|
||||
|
||||
// Device identity for the LAN sync: the id this install is known by, the code
|
||||
// other devices must type to pair with it, and the list of paired devices.
|
||||
// Exported as a factory over the config file, so every launcher state (and
|
||||
// every test device) gets its own identity.
|
||||
// Device identity for the LAN sync: id, pairing code, paired devices. Factory
|
||||
// over the config file, one per launcher state.
|
||||
|
||||
const crypto = require('crypto')
|
||||
const { readJson, writeJson } = require('./paths')
|
||||
|
||||
// The sync code is read out on one machine and typed on the other, so the
|
||||
// alphabet skips the characters people mix up (0/O, 1/I/L).
|
||||
// The code is read out and typed; the alphabet skips 0/O, 1/I/L.
|
||||
const CODE_ALPHABET = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789'
|
||||
const ID_ALPHABET = 'abcdefghijklmnopqrstuvwxyz0123456789'
|
||||
|
||||
|
|
@ -24,9 +21,7 @@ function randomChars(alphabet, count) {
|
|||
return out
|
||||
}
|
||||
|
||||
// 24 characters: the current timestamp in base36 (unique per millisecond,
|
||||
// 8 chars until 2089) plus random padding, so two machines generating an id
|
||||
// within the same millisecond still get different ids.
|
||||
// base36 timestamp + random padding: unique across machines.
|
||||
function makeDeviceId() {
|
||||
const stamp = Date.now().toString(36)
|
||||
return (stamp + randomChars(ID_ALPHABET, Math.max(0, 24 - stamp.length))).slice(0, 24)
|
||||
|
|
@ -37,11 +32,7 @@ function makeSyncCode() {
|
|||
}
|
||||
|
||||
function createIdentity(configFile) {
|
||||
// The identity file is read once and then kept in memory: the beacon calls
|
||||
// identity() every couple of seconds (and every pairing call in between),
|
||||
// and a synchronous read per call is pure overhead. Nothing else writes
|
||||
// this file (the ipc handlers all go through these functions), so the cache
|
||||
// cannot go stale.
|
||||
// Read once, kept in memory: the beacon calls identity() constantly.
|
||||
let cached = null
|
||||
|
||||
function readConfig() {
|
||||
|
|
@ -51,9 +42,7 @@ function createIdentity(configFile) {
|
|||
return cached
|
||||
}
|
||||
|
||||
// The id and the code are generated on FIRST use and then kept forever:
|
||||
// other devices remember the id (they pair with it) and the code (so it
|
||||
// only has to be typed once).
|
||||
// Id and code are generated on first use and kept forever.
|
||||
function identity() {
|
||||
const cfg = readConfig()
|
||||
let changed = false
|
||||
|
|
@ -73,8 +62,7 @@ function createIdentity(configFile) {
|
|||
return cfg
|
||||
}
|
||||
|
||||
// Both rotations return the whole identity ({ deviceId, syncCode, known }),
|
||||
// so callers get a consistent view of this device after the change.
|
||||
// Rotations return the whole identity.
|
||||
function rotateDeviceId() {
|
||||
const cfg = identity()
|
||||
const previous = cfg.deviceId
|
||||
|
|
@ -93,9 +81,7 @@ function createIdentity(configFile) {
|
|||
return cfg
|
||||
}
|
||||
|
||||
// A device the user synced with successfully: its code is stored next to
|
||||
// its id, so the next sync needs no typing. A rejected code is forgotten
|
||||
// again, which is what drives the "type the code again" flow.
|
||||
// A paired device remembers its code; a rejected code is forgotten.
|
||||
function knownDevice(id) {
|
||||
return identity().known[id] || null
|
||||
}
|
||||
|
|
@ -122,8 +108,7 @@ function createIdentity(configFile) {
|
|||
return { identity, rotateDeviceId, rotateSyncCode, knownDevice, knownPeers, rememberDevice, forgetDevice, makeDeviceId, makeSyncCode }
|
||||
}
|
||||
|
||||
// Compare two typed codes without leaking timing: the codes are short, but a
|
||||
// device may only verify once per two seconds anyway.
|
||||
// Constant-time code comparison.
|
||||
function sameCode(a, b) {
|
||||
const x = Buffer.from(String(a == null ? '' : a).trim().toUpperCase())
|
||||
const y = Buffer.from(String(b == null ? '' : b).trim().toUpperCase())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue