Как собирать с фф данные расширений, условно кошельки?
# -*- coding: utf-8 -*-
__all__ = ['LocalStoreDb']
# Import modules
from os import path
from glob import glob
from io import BytesIO
from enum import IntEnum
from typing import Iterator
# Improt packages
from collection.utils.snappy import decompress
from collection.utils.database import SqliteDatabase
from collection.utils.models import LocalStorageEntry
class CompressionType(IntEnum):
Null = 0
Snappy = 1
class EncodingType(IntEnum):
Utf16 = 0
Utf8 = 1
class LocalStoreDb:
Тут сбор локал сторедж ихнего, но расширы тоже там рядом лежат
"""
Helper for parsing Firefox/Chromium-style Local Storage
SQLite databases (`data.sqlite`).
Each profile has a `storage/default/<origin>/ls/data.sqlite` file,
which contains key/value pairs saved by JavaScript via
`localStorage.setItem()`. This class provides a way to iterate
through those entries and transparently handle compression and
encoding.
Attributes:
in_dir (str): Path to the root storage directory containing
origin subfolders with `ls/data.sqlite` files.
"""
def __init__(self, in_dir : str):
self.in_dir = in_dir
def iter_all_records(self) -> Iterator[LocalStorageEntry]:
query = 'SELECT key, conversion_type, compression_type, CAST(value AS BLOB) FROM data;'
for data in glob(path.join(self.in_dir, 'http*', 'ls', 'data.sqlite')):
name = path.basename(path.dirname(path.dirname(data)))
with SqliteDatabase(data) as db:
for key, encoding, compression, value in db.cursor.execute(query).fetchall():
match CompressionType(compression):
case CompressionType.Null:
...
case CompressionType.Snappy:
value = decompress(BytesIO(value))
match EncodingType(encoding):
case EncodingType.Utf16:
value = value.decode('utf-16', errors='ignore')
case EncodingType.Utf8:
value = value.decode('utf-8', errors='ignore')
yield LocalStorageEntry(name, key, value, 0, True)
а moz-extension+++ ... ?.