#! /usr/bin/python """ List all Firefox tabs with title and URL Supported input: json or jsonlz4 recovery files Default output: title (URL) Output format can be specified as argument """ import sys import os import pathlib import lz4.block import json class Node: def __init__(self, url, lastAccessed): self.url = url self.lastAccessed = lastAccessed self.left = None self.right = None self.parent = None def insert(self, node): if node.lastAccessed > self.lastAccessed: if self.right: self.right.insert(node) else: self.right = node node.parent = self else: if self.left: self.left.insert(node) else: self.left = node node.parent = self def print(self): if self.right: # Print from high to low self.right.print() print(self.url) if self.left: self.left.print() def main(): path = pathlib.Path('/dev/shm/firefox-' + os.environ['FIREFOX_PROFILE'] + "-" + os.environ['USER'] + '/sessionstore-backups') files = path.glob('recovery.js*') tree = None for f in files: b = f.read_bytes() if b[:8] == b'mozLz40\0': b = lz4.block.decompress(b[8:]) j = json.loads(b) for w in j['windows']: for t in w['tabs']: i = t['index'] - 1 node = Node(t['entries'][i]['url'], t['lastAccessed']) if tree: tree.insert(node) else: tree = node if tree: tree.print() if __name__ == "__main__": main()