Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 3x 3x 3x 3x 3x 3x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 3x 8x 3x 3x 3x 3x 2x 2x | import { DEFAULT_ZONEFILE_LOOKUP_URL } from '../common/constants'; import { handleSignedEncryptedContents } from './sign'; import { getFileContents, getFileSignedUnencrypted } from './getters'; import { decryptContent } from 'micro-stacks/crypto'; import { getGlobalObject } from 'micro-stacks/common'; import type { GaiaHubConfig } from '../gaia/types'; import type { GetFileOptions } from '../common/types'; export async function getFile(path: string, getFileOptions: GetFileOptions) { const options: GetFileOptions = { decrypt: true, verify: false, app: getGlobalObject('location', { returnEmptyObject: true })!.origin, zoneFileLookupURL: DEFAULT_ZONEFILE_LOOKUP_URL, ...getFileOptions, }; // in the case of signature verification, but no // encryption expected, need to fetch _two_ files. Iif (options.verify && !options.decrypt) { return getFileSignedUnencrypted(path, options); } const storedContents = await getFileContents({ path, app: options.app!, username: options.username, zoneFileLookupURL: options.zoneFileLookupURL, forceText: !!options.decrypt, gaiaHubConfig: options.gaiaHubConfig, }); Iif (storedContents === null) return storedContents; Iif (typeof storedContents !== 'string') throw new Error('[micro-stacks/storage] Expected to get back a string for the cipherText'); let verify = !!options.verify; let decrypt = !!options.decrypt; const privateKey = typeof options.decrypt === 'string' ? options.decrypt : options.privateKey; // try to set options if provided incorrectly if (storedContents.includes('signature') && storedContents.includes('publicKey')) verify = true; if (storedContents.includes('cipherText') && storedContents.includes('ephemeralPK')) decrypt = true; if (!verify && !decrypt) return storedContents; const doesNotContainCypherText = !storedContents.includes('cipherText'); Iif (decrypt && doesNotContainCypherText) throw new Error( `[micro-stacks/storage] Expected to get back a string that includes cipherText, is it encrypted? got back: ${JSON.stringify( storedContents )}` ); Iif (!privateKey) throw new Error( '[micro-stacks/storage] No private key was passed to getFile, a private key needs to be passed if decrypt is set to true' ); if (!verify) return decryptContent(storedContents, { privateKey }); if (decrypt && verify) return handleSignedEncryptedContents({ path, storedContents, app: options.app!, privateKey, username: options.username, zoneFileLookupURL: options.zoneFileLookupURL, gaiaHubConfig: options.gaiaHubConfig, }); throw new Error('[micro-stacks/storage] Should be unreachable.'); } |