def prepareDataFile(suffix): """ Application to wrap the history of the Firefox browser. This script should be executed with each svn commit. """ global dataDir global dataFile global _tmpFile pla.logMessage('firefox: prepare ' + dataFile) # If no file is present in pladirectory, no instrumentation if not os.path.exists(dataDir): pla.logMessage('firefox: Disabled. Skipping') return [] # Copy the Firefox SQLite database to the tmp directory, in order to avoid # lock issues. ffoxDir = os.path.expanduser('~/.mozilla/firefox/') # Parse the ffox configuration config = ConfigParser.ConfigParser() config.read(os.path.join(ffoxDir, 'profiles.ini')) profileDir = os.path.join(ffoxDir, config.get('Profile0', 'Path')) sqliteFile = os.path.join(profileDir, 'places.sqlite') pla.logMessage('firefox: copy file ' + sqliteFile + ' to ' + _tmpFile) shutil.copyfile(sqliteFile, _tmpFile) # Get the timestamp for the last execution lastExecution = pla.getLastExecutionTStamp() pla.logMessage('Last execution: ' + str(lastExecution)) date_clause = '' if lastExecution != None: date_clause = "AND visit_date > " + str(int(lastExecution * 1000000)) # Get the last activity from Firefox, through a query to the # history table conn = sqlite3.connect(_tmpFile) conn.row_factory = sqlite3.Row c = conn.cursor() query = """ SELECT url, DATETIME(CAST (visit_date/1000000.0 AS INTEGER), 'unixepoch', 'localtime') AS timestamp FROM moz_historyvisits h, moz_places p WHERE h.place_id = p.id """ + date_clause + """ ORDER BY visit_date """ pla.logMessage('firefox: Query = ' + query) # Create a duplicate of the data file with the suffix toSendFileName = dataFile + '_' + suffix # Dump the data. Detect empty data because "rowcount" seems broken. dataOut = open(toSendFileName, 'w') # Boolean to capture if an alternative executable is needed use_executable = False try: # Try to execute the query c.execute(query) for row in c: dataOut.write(row['timestamp'] + ' ' + row['url'] + '\n') # Close the statement and the data file c.close() except sqlite3.DatabaseError, e: # Failed, this means the version of the sqlite executable is not # correct, use an alternative. pla.logMessage('Unable to read FFox places with sqlite library') pla.logMessage('Resorting to included binary') use_executable = True
def prepareDataFile(suffix): """ Application to wrap the history of the Google Chrome browser. This script should be executed with each svn commit. """ global dataDir global dataFile global _tmpFile epoch_offset = 11644473600000000 pla.logMessage('chrome: prepare ' + dataFile) # If no file is present in pladirectory, no instrumentation if not os.path.exists(dataDir): pla.logMessage('chrome: Disabled. Skipping') return [] # Copy the Google Chrome history database to the tmp directory, in order to # avoid lock issues. gchromeDir = os.path.expanduser('~/.config/google-chrome/Default') sqliteFile = os.path.join(gchromeDir, 'History') pla.logMessage('chrome: copy file ' + sqliteFile + ' to ' + _tmpFile) shutil.copyfile(sqliteFile, _tmpFile) # Get the timestamp for the last execution lastExecution = pla.getLastExecutionTStamp() pla.logMessage('Last execution: ' + str(lastExecution)) date_clause = '' if lastExecution != None: date_clause = "AND (v.visit_time - " + str(epoch_offset) + ") > " + \ str(int(lastExecution * 1000000)) # Get the last activity from Google Chrome, through a query to the # history table conn = sqlite3.connect(_tmpFile) conn.row_factory = sqlite3.Row c = conn.cursor() query = """ SELECT u.url, DATETIME(CAST ((v.visit_time - """ + str(epoch_offset) + \ """)/1000000.0 AS INTEGER), 'unixepoch', 'localtime') AS timestamp FROM urls u, visits v WHERE v.url = u.id """ + date_clause + " ORDER BY v.visit_time " pla.logMessage('chrome: Query = ' + query) # Create a duplicate of the data file with the suffix toSendFileName = dataFile + '_' + suffix # Dump the data. Detect empty data because "rowcount" seems broken. dataOut = open(toSendFileName, 'w') # Boolean to capture if an alternative executable is needed use_executable = False try: # Try to execute the query c.execute(query) for row in c: dataOut.write(row['timestamp'] + ' ' + row['url'] + '\n') # Close the statement and the data file c.close() except sqlite3.DatabaseError, e: # Failed, this means the version of the sqlite executable is not # correct, use an alternative. pla.logMessage('Unable to read Chrome history with sqlite library') pla.logMessage('Resorting to included binary') use_executable = True