12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- const fileHash = require('../../util/backup_filehash')
- const log = require('../../util/log')
- const PAIRED_DB = fileHash('Library/Database/com.apple.MobileBluetooth.ledevices.paired.db', 'SysSharedContainerDomain-systemgroup.com.apple.bluetooth')
- const OTHER_DB = fileHash('Library/Database/com.apple.MobileBluetooth.ledevices.other.db', 'SysSharedContainerDomain-systemgroup.com.apple.bluetooth')
- module.exports = {
- version: 4,
- name: 'system.bluetooth_devices',
- description: `List known bluetooth devices`,
- requiresBackup: true,
- // Run on a v3 lib / backup object
- run (lib, { backup }) {
- return getBluetoothDevices(backup)
- },
- // Available fields.
- output: {
- uuid: el => el.Uuid || null,
- name: el => el.Name ? el.Name : 'N/A',
- macAddress: el => {
- let address = el.ResolvedAddress ? el.ResolvedAddress : el.Address ? el.Address : 'N/A'
- address = address.indexOf(' ') !== -1 ? address.split(' ')[1] : address
- return address
- },
- lastConnected: el => el.LastConnectionTime || 0,
- lastSeen: el => el.LastSeenTime || 0,
- paired: el => el.Paired ? el.Paired : 'No'
- }
- }
- // Get the bluetooth devices in a backup.
- function getBluetoothDevices (backup) {
- return new Promise(async (resolve, reject) => {
- // Get paired devices
- try {
- var paired = await getPairedDevices(backup)
- } catch (e) {
- log.verbose(`couldn't get paired devices`, e)
- }
- // Get other devices
- try {
- var other = await getOtherDevices(backup)
- } catch (e) {
- log.verbose(`couldn't get paired devices`, e)
- }
- // console.log(paired, other)
- resolve([...(paired || []), ...(other || [])])
- })
- }
- // Get devies we've paired with
- function getPairedDevices (backup) {
- return new Promise((resolve, reject) => {
- backup.openDatabase(PAIRED_DB)
- .then(paired => {
- const query = `SELECT *, 'Yes' as Paired FROM PairedDevices`
- paired.all(query, function (err, rows) {
- if (err) reject(err)
- resolve(rows)
- })
- })
- .catch(reject)
- })
- }
- // Get other devices we've seen.
- function getOtherDevices (backup) {
- return new Promise((resolve, reject) => {
- backup.openDatabase(OTHER_DB)
- .then(paired => {
- const query = `SELECT * FROM OtherDevices`
- paired.all(query, function (err, rows) {
- if (err) reject(err)
- resolve(rows)
- })
- })
- .catch(reject)
- })
- }
|