decryption for gun http rpc
This commit is contained in:
parent
9069ae0921
commit
1ab388b72f
1 changed files with 46 additions and 9 deletions
|
|
@ -2995,12 +2995,19 @@ module.exports = async (
|
||||||
* @prop {boolean} startFromUserGraph
|
* @prop {boolean} startFromUserGraph
|
||||||
* @prop {string} path
|
* @prop {string} path
|
||||||
* @prop {string=} publicKey
|
* @prop {string=} publicKey
|
||||||
|
* @prop {string=} publicKeyForDecryption
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @param {HandleGunFetchParams} args0
|
* @param {HandleGunFetchParams} args0
|
||||||
* @returns {Promise<unknown>}
|
* @returns {Promise<unknown>}
|
||||||
*/
|
*/
|
||||||
const handleGunFetch = ({ type, startFromUserGraph, path, publicKey }) => {
|
const handleGunFetch = ({
|
||||||
|
type,
|
||||||
|
startFromUserGraph,
|
||||||
|
path,
|
||||||
|
publicKey,
|
||||||
|
publicKeyForDecryption
|
||||||
|
}) => {
|
||||||
const keys = path.split('.')
|
const keys = path.split('.')
|
||||||
const { tryAndWait } = require('../services/gunDB/contact-api/utils')
|
const { tryAndWait } = require('../services/gunDB/contact-api/utils')
|
||||||
console.log(keys)
|
console.log(keys)
|
||||||
|
|
@ -3014,76 +3021,106 @@ module.exports = async (
|
||||||
keys.forEach(key => (node = node.get(key)))
|
keys.forEach(key => (node = node.get(key)))
|
||||||
|
|
||||||
return new Promise(res => {
|
return new Promise(res => {
|
||||||
if (type === 'once') node.once(data => res(data))
|
const listener = async data => {
|
||||||
if (type === 'load') node.load(data => res(data))
|
if (publicKeyForDecryption) {
|
||||||
|
res(
|
||||||
|
await GunWriteRPC.deepDecryptIfNeeded(
|
||||||
|
data,
|
||||||
|
publicKeyForDecryption
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
res(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'once') node.once(listener)
|
||||||
|
if (type === 'load') node.load(listener)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used decryption of incoming data.
|
||||||
|
*/
|
||||||
|
const PUBKEY_FOR_DECRYPT_HEADER = 'public-key-for-decryption'
|
||||||
|
|
||||||
ap.get('/api/gun/once/:path', async (req, res) => {
|
ap.get('/api/gun/once/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path } = req.params
|
const { path } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: false,
|
startFromUserGraph: false,
|
||||||
type: 'once'
|
type: 'once',
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ap.get('/api/gun/load/:path', async (req, res) => {
|
ap.get('/api/gun/load/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path } = req.params
|
const { path } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: false,
|
startFromUserGraph: false,
|
||||||
type: 'load'
|
type: 'load',
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ap.get('/api/gun/user/once/:path', async (req, res) => {
|
ap.get('/api/gun/user/once/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path } = req.params
|
const { path } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: true,
|
startFromUserGraph: true,
|
||||||
type: 'once'
|
type: 'once',
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ap.get('/api/gun/user/load/:path', async (req, res) => {
|
ap.get('/api/gun/user/load/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path } = req.params
|
const { path } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: true,
|
startFromUserGraph: true,
|
||||||
type: 'load'
|
type: 'load',
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ap.get('/api/gun/otheruser/:publicKey/once/:path', async (req, res) => {
|
ap.get('/api/gun/otheruser/:publicKey/once/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path, publicKey } = req.params
|
const { path, publicKey } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: false,
|
startFromUserGraph: false,
|
||||||
type: 'once',
|
type: 'once',
|
||||||
publicKey
|
publicKey,
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ap.get('/api/gun/otheruser/:publicKey/load/:path', async (req, res) => {
|
ap.get('/api/gun/otheruser/:publicKey/load/:path', async (req, res) => {
|
||||||
|
const publicKeyForDecryption = req.header(PUBKEY_FOR_DECRYPT_HEADER)
|
||||||
const { path, publicKey } = req.params
|
const { path, publicKey } = req.params
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
data: await handleGunFetch({
|
data: await handleGunFetch({
|
||||||
path,
|
path,
|
||||||
startFromUserGraph: false,
|
startFromUserGraph: false,
|
||||||
type: 'load',
|
type: 'load',
|
||||||
publicKey
|
publicKey,
|
||||||
|
publicKeyForDecryption
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue