123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Cookie Parser
- const cookieParser = require('../../util/cookies.js')
- module.exports = {
- version: 4,
- name: 'safari.cookies',
- description: `List all iOS cookies`,
- requiresBackup: true,
- // Run on a v3 lib / backup object
- run (lib, { backup }) {
- return new Promise(async (resolve, reject) => {
- let files = await lib.run('backup.files', { backup, raw: true })
- files = files.filter(el => {
- return el.filename.indexOf('Library/Cookies/Cookies.binarycookies') > -1
- })
- resolve(getCookies(backup, files))
- })
- },
- // Available fields.
- output: {
- domain: el => el.domain,
- url: el => el.cookie.url,
- path: el => el.cookie.name,
- value: el => el.cookie.value,
- creation: el => el.cookie.creation,
- expiration: el => el.cookie.expiration,
- flags: el => el.cookie.flags
- }
- }
- // Find all the cookies in a set of files in a backup
- function getCookies (backup, files) {
- return new Promise(async (resolve, reject) => {
- // Cookies result
- let cookiesResult = []
- const iterateElements = (elements, index, callback) => {
- if (index === elements.length) { return callback() }
- // do parse call with element
- var ele = elements[index]
- cookieParser.parse(backup.getFileName(ele.fileID))
- .then(cookies => {
- // Map to include domain
- let formatted = cookies.map(el => { return { domain: ele.domain, cookie: el } })
- // Append result
- cookiesResult = [...cookiesResult, ...formatted]
- // Next file.
- iterateElements(elements, index + 1, callback)
- })
- }
- iterateElements(files, 0, () => {
- resolve(cookiesResult)
- })
- })
- }
|