1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- const log = require('../util/log')
- const path = require('path')
- const sqlite3 = require('sqlite3')
- const bplist = require('bplist-parser')
- const fs = require('fs')
- const plist = require('plist')
- // Derive filenames based on domain + file path
- const fileHash = require('../util/backup_filehash')
- const file = fileHash('Library/Preferences/group.com.google.Gmail.plist', 'AppDomainGroup-group.com.google.Gmail')
- module.exports.name = 'gmail_accounts'
- module.exports.description = 'Show Gmail account(s) information'
- // Specify this reporter requires a backup.
- // The second parameter to func() is now a backup instead of the path to one.
- module.exports.requiresBackup = true
- // Specify this reporter supports the promises API for allowing chaining of reports.
- module.exports.usesPromises = true
- module.exports.func = function (program, backup, resolve, reject) {
- gmailAccountsReport(backup)
- .then((items) => {
- var result = program.formatter.format(items, {
- program: program,
- columns: {
- 'Id': el => el.id,
- 'Email': el => el.email,
- 'Avatar': el => el.avatar
- }
- })
- resolve(result)
- })
- .catch(reject)
- }
- const gmailAccountsReport = (backup) => {
- return new Promise((resolve, reject) => {
- var filename = backup.getFileName(file)
- try {
- let gmailPlist = bplist.parseBuffer(fs.readFileSync(filename))[0]
- let gmailAccountIds = Object.keys(gmailPlist).filter(key => key.indexOf('kIdToEmailMapKey') !== -1);
- let gmailAvatars = Object.keys(gmailPlist).filter(key => key.indexOf('kCurrentAvatarUrlKey') !== -1);
- gmailAvatars = gmailAvatars.map(avatarKey => {
- let id = avatarKey.split('kCurrentAvatarUrlKey')[1].split('-')
- id = id[id.length - 1]
- return {
- avatarKey: avatarKey,
- accountId: id
- }
- })
- gmailAccountIds = gmailAccountIds.map(key => {
- const split = key.split('-')
- return {
- id: split[split.length - 1],
- email: gmailPlist[key],
- avatar: gmailPlist[gmailAvatars.find(avatar => avatar.accountId === split[split.length - 1]).avatarKey]
- }
- });
- resolve(gmailAccountIds)
- } catch (e) {
- reject(e)
- }
- })
- }
|