forked from Mirrors/keyoxide-web
Fix key caching
This commit is contained in:
parent
87aaadae67
commit
d283910706
3 changed files with 21 additions and 24 deletions
|
@ -8,7 +8,6 @@
|
||||||
"ajv": "^8.6.3",
|
"ajv": "^8.6.3",
|
||||||
"bent": "^7.3.12",
|
"bent": "^7.3.12",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"cache": "^3.0.0",
|
|
||||||
"dialog-polyfill": "^0.5.6",
|
"dialog-polyfill": "^0.5.6",
|
||||||
"doipjs": "^0.16.3",
|
"doipjs": "^0.16.3",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
|
@ -18,6 +17,7 @@
|
||||||
"got": "^11.8.2",
|
"got": "^11.8.2",
|
||||||
"hash-wasm": "^4.9.0",
|
"hash-wasm": "^4.9.0",
|
||||||
"jstransformer-markdown-it": "^2.1.0",
|
"jstransformer-markdown-it": "^2.1.0",
|
||||||
|
"keyv": "^4.5.0",
|
||||||
"libravatar": "^3.0.0",
|
"libravatar": "^3.0.0",
|
||||||
"openpgp": "^5.5.0",
|
"openpgp": "^5.5.0",
|
||||||
"pug": "^3.0.0",
|
"pug": "^3.0.0",
|
||||||
|
|
|
@ -32,9 +32,9 @@ import * as doipjs from 'doipjs'
|
||||||
import { readKey, readCleartextMessage, verify } from 'openpgp'
|
import { readKey, readCleartextMessage, verify } from 'openpgp'
|
||||||
import { computeWKDLocalPart } from './utils.js'
|
import { computeWKDLocalPart } from './utils.js'
|
||||||
import { createHash } from 'crypto'
|
import { createHash } from 'crypto'
|
||||||
import cache from 'cache'
|
import Keyv from 'keyv'
|
||||||
|
|
||||||
let c = process.env.ENABLE_EXPERIMENTAL_CACHE ? new cache(60 * 1000) : null
|
const c = process.env.ENABLE_EXPERIMENTAL_CACHE ? new Keyv() : null
|
||||||
|
|
||||||
const fetchWKD = (id) => {
|
const fetchWKD = (id) => {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
|
@ -57,9 +57,8 @@ const fetchWKD = (id) => {
|
||||||
let plaintext
|
let plaintext
|
||||||
|
|
||||||
const hash = createHash('md5').update(id).digest('hex')
|
const hash = createHash('md5').update(id).digest('hex')
|
||||||
|
if (c && await c.get(hash)) {
|
||||||
if (c && c.get(hash)) {
|
plaintext = Uint8Array.from((await c.get(hash)).split(','))
|
||||||
plaintext = c.get(hash)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plaintext) {
|
if (!plaintext) {
|
||||||
|
@ -86,13 +85,13 @@ const fetchWKD = (id) => {
|
||||||
reject(new Error(`No public keys could be fetched using WKD`))
|
reject(new Error(`No public keys could be fetched using WKD`))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plaintext) {
|
if (!plaintext) {
|
||||||
reject(new Error(`No public keys could be fetched using WKD`))
|
reject(new Error(`No public keys could be fetched using WKD`))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c) {
|
if (c) {
|
||||||
c.put(hash, plaintext)
|
await c.set(hash, plaintext.toString(), 60 * 1000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,14 +127,17 @@ const fetchHKP = (id, keyserverDomain) => {
|
||||||
query = `0x${id}`
|
query = `0x${id}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output.fetchURL = `https://${keyserverDomain}/pks/lookup?op=get&options=mr&search=${query}`
|
||||||
|
|
||||||
const hash = createHash('md5').update(`${id}__${keyserverDomain}`).digest('hex')
|
const hash = createHash('md5').update(`${id}__${keyserverDomain}`).digest('hex')
|
||||||
|
|
||||||
if (c && c.get(hash)) {
|
if (c && await c.get(hash)) {
|
||||||
output = c.get(hash)
|
output.publicKey = await readKey({
|
||||||
|
armoredKey: await c.get(hash)
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
output.publicKey = await doipjs.keys.fetchHKP(id, keyserverDomain)
|
output.publicKey = await doipjs.keys.fetchHKP(id, keyserverDomain)
|
||||||
output.fetchURL = `https://${keyserverDomain}/pks/lookup?op=get&options=mr&search=${query}`
|
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
reject(new Error(`No public keys could be fetched using HKP`))
|
reject(new Error(`No public keys could be fetched using HKP`))
|
||||||
}
|
}
|
||||||
|
@ -146,7 +148,7 @@ const fetchHKP = (id, keyserverDomain) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c) {
|
if (c) {
|
||||||
c.put(hash, output)
|
await c.set(hash, output.publicKey.armor(), 60 * 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve(output)
|
resolve(output)
|
||||||
|
|
19
yarn.lock
19
yarn.lock
|
@ -1272,13 +1272,6 @@ bytesish@^0.4.1:
|
||||||
resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz"
|
resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz"
|
||||||
integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==
|
integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==
|
||||||
|
|
||||||
cache@^3.0.0:
|
|
||||||
version "3.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/cache/-/cache-3.0.0.tgz#1c5857e874f7064be641114a605c7e2ae8a80880"
|
|
||||||
integrity sha512-sNoM5jithfalxIceo/uFFm5bOlGjux2y8jEvjNb0F/cACWQaMmWuEPTLl6GzLHdFcNsbWBBdqkBd9NyefZ5UQQ==
|
|
||||||
dependencies:
|
|
||||||
ds "^1.4.2"
|
|
||||||
|
|
||||||
cacheable-lookup@^5.0.3:
|
cacheable-lookup@^5.0.3:
|
||||||
version "5.0.4"
|
version "5.0.4"
|
||||||
resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz"
|
resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz"
|
||||||
|
@ -1823,11 +1816,6 @@ dotenv@^8.2.0:
|
||||||
resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz"
|
resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz"
|
||||||
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
|
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
|
||||||
|
|
||||||
ds@^1.4.2:
|
|
||||||
version "1.4.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/ds/-/ds-1.4.2.tgz#0857aa213790a4fb3abb365b9cec0e9ba8569393"
|
|
||||||
integrity sha512-d5nMCjfod+srvE/1Bnt/u+L++6N8KJx3ZAi95AGp0g6RtfuGDNlGciWL/iiwKHsFVBVnA3/HEFUq5SW1NgTQ3Q==
|
|
||||||
|
|
||||||
duplexer@^0.1.2:
|
duplexer@^0.1.2:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
|
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
|
||||||
|
@ -2908,6 +2896,13 @@ keyv@^4.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
json-buffer "3.0.1"
|
json-buffer "3.0.1"
|
||||||
|
|
||||||
|
keyv@^4.5.0:
|
||||||
|
version "4.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6"
|
||||||
|
integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==
|
||||||
|
dependencies:
|
||||||
|
json-buffer "3.0.1"
|
||||||
|
|
||||||
kind-of@^6.0.2:
|
kind-of@^6.0.2:
|
||||||
version "6.0.3"
|
version "6.0.3"
|
||||||
resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
|
resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
|
||||||
|
|
Loading…
Reference in a new issue