Browse Source

Feature/facebook profile (#28)

* Facebook profile report, work in progress
* Facebook Messenger user id done
Alberto Güerere 7 years ago
parent
commit
a43c096eca
3 changed files with 56 additions and 26 deletions
  1. 2 1
      tools/index.js
  2. 54 0
      tools/reports/facebook_profile.js
  3. 0 25
      tools/reports/safari_bookmarks.js

+ 2 - 1
tools/index.js

@@ -29,7 +29,8 @@ var reportTypes = {
   'address_book': require('./reports/address_book'),
   'safari_bookmarks': require('./reports/safari_bookmarks'),
   'pushstore': require('./reports/pushstore'),
-  'calendar': require('./reports/calendar')
+  'calendar': require('./reports/calendar'),
+  'facebook_profile': require('./reports/facebook_profile')
 }
 
 var formatters = {

+ 54 - 0
tools/reports/facebook_profile.js

@@ -0,0 +1,54 @@
+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/com.facebook.Messenger.plist', 'AppDomain-com.facebook.Messenger')
+
+module.exports.name = 'facebook_profile'
+module.exports.description = 'Show Facebook Messenger user id'
+
+// 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) {
+  facebookProfileReport(backup)
+    .then((items) => {
+      var result = program.formatter.format(items, {
+        program: program,
+        columns: { 
+          'Facebook User ID': el => el.fbid
+        }
+      })
+
+      resolve(result)
+    })
+    .catch(reject)
+}
+
+const facebookProfileReport = (backup) => {
+  return new Promise((resolve, reject) => {
+    var filename = backup.getFileName(file)
+    try {
+      let facebookPlist = bplist.parseBuffer(fs.readFileSync(filename))[0]
+      let facebookUserIds = Object.keys(facebookPlist['kUserGlobalSettings'])
+      facebookUserIds = facebookUserIds.map((fbid) => ({
+        fbid: fbid
+      }))
+
+      resolve(facebookUserIds)
+    } catch (e) {
+      reject(e)
+    }
+  })
+}

+ 0 - 25
tools/reports/safari_bookmarks.js

@@ -55,28 +55,3 @@ module.exports.functions = {
       .catch(reject)
   }
 }
-
-/*
-module.exports.func = function (program, backup, resolve, reject) {
-  backup.getSafariBookmarks()
-    .then((items) => {
-    // Use the configured formatter to print the rows.
-      const result = program.formatter.format(items, {
-      // Color formatting?
-        program: program,
-
-        // Columns to be displayed in human-readable printouts.
-        // Some formatters, like raw or CSV, ignore these.
-        columns: {
-          'id': el => el.id,
-          'title': el => el.title ? el.title.trim() : '',
-          'url': el => el.url ? el.url.trim() : '',
-          'parent': el => el.parent_title
-        }
-      })
-
-      resolve(result)
-    })
-    .catch(reject)
-}
-*/