LEFT | RIGHT |
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 """This file contains a parser for the Mozilla Firefox history.""" | 2 """This file contains a parser for the Mozilla Firefox history.""" |
3 | 3 |
4 # pylint: disable=wrong-import-order | 4 # pylint: disable=wrong-import-order |
5 try: | 5 try: |
6 from pysqlite2 import dbapi2 as sqlite3 | 6 from pysqlite2 import dbapi2 as sqlite3 |
7 except ImportError: | 7 except ImportError: |
8 import sqlite3 | 8 import sqlite3 |
9 | 9 |
10 from dfdatetime import posix_time as dfdatetime_posix_time | 10 from dfdatetime import posix_time as dfdatetime_posix_time |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 ((u'SELECT moz_bookmarks.id, moz_bookmarks.title,' | 178 ((u'SELECT moz_bookmarks.id, moz_bookmarks.title,' |
179 u'moz_bookmarks.dateAdded, moz_bookmarks.lastModified ' | 179 u'moz_bookmarks.dateAdded, moz_bookmarks.lastModified ' |
180 u'FROM moz_bookmarks WHERE moz_bookmarks.type = 2'), | 180 u'FROM moz_bookmarks WHERE moz_bookmarks.type = 2'), |
181 u'ParseBookmarkFolderRow')] | 181 u'ParseBookmarkFolderRow')] |
182 | 182 |
183 # The required tables. | 183 # The required tables. |
184 REQUIRED_TABLES = frozenset([ | 184 REQUIRED_TABLES = frozenset([ |
185 u'moz_places', u'moz_historyvisits', u'moz_bookmarks', | 185 u'moz_places', u'moz_historyvisits', u'moz_bookmarks', |
186 u'moz_items_annos']) | 186 u'moz_items_annos']) |
187 | 187 |
188 SCHEMAS = [ | 188 _SCHEMA_V24 = { |
189 {u'moz_anno_attributes': | 189 u'moz_anno_attributes': ( |
190 u'CREATE TABLE moz_anno_attributes ( id INTEGER PRIMARY KEY, name ' | 190 u'CREATE TABLE moz_anno_attributes ( id INTEGER PRIMARY KEY, name ' |
191 u'VARCHAR(32) UNIQUE NOT NULL)', | 191 u'VARCHAR(32) UNIQUE NOT NULL)'), |
192 u'moz_annos': | 192 u'moz_annos': ( |
193 u'CREATE TABLE moz_annos ( id INTEGER PRIMARY KEY, place_id INTEGER ' | 193 u'CREATE TABLE moz_annos ( id INTEGER PRIMARY KEY, place_id INTEGER ' |
194 u'NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) DEFAULT ' | 194 u'NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) DEFAULT ' |
195 u'NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, expiration ' | 195 u'NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, expiration ' |
196 u'INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded INTEGER ' | 196 u'INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded INTEGER ' |
197 u'DEFAULT 0, lastModified INTEGER DEFAULT 0)', | 197 u'DEFAULT 0, lastModified INTEGER DEFAULT 0)'), |
198 u'moz_bookmarks': | 198 u'moz_bookmarks': ( |
199 u'CREATE TABLE moz_bookmarks ( id INTEGER PRIMARY KEY, type INTEGER, ' | 199 u'CREATE TABLE moz_bookmarks ( id INTEGER PRIMARY KEY, type INTEGER, ' |
200 u'fk INTEGER DEFAULT NULL, parent INTEGER, position INTEGER, title ' | 200 u'fk INTEGER DEFAULT NULL, parent INTEGER, position INTEGER, title ' |
201 u'LONGVARCHAR, keyword_id INTEGER, folder_type TEXT, dateAdded ' | 201 u'LONGVARCHAR, keyword_id INTEGER, folder_type TEXT, dateAdded ' |
202 u'INTEGER, lastModified INTEGER)', | 202 u'INTEGER, lastModified INTEGER)'), |
203 u'moz_bookmarks_roots': | 203 u'moz_bookmarks_roots': ( |
204 u'CREATE TABLE moz_bookmarks_roots ( root_name VARCHAR(16) UNIQUE, ' | 204 u'CREATE TABLE moz_bookmarks_roots ( root_name VARCHAR(16) UNIQUE, ' |
205 u'folder_id INTEGER)', | 205 u'folder_id INTEGER)'), |
206 u'moz_favicons': | 206 u'moz_favicons': ( |
207 u'CREATE TABLE moz_favicons ( id INTEGER PRIMARY KEY, url LONGVARCHAR ' | 207 u'CREATE TABLE moz_favicons ( id INTEGER PRIMARY KEY, url ' |
208 u'UNIQUE, data BLOB, mime_type VARCHAR(32), expiration LONG)', | 208 u'LONGVARCHAR UNIQUE, data BLOB, mime_type VARCHAR(32), expiration ' |
209 u'moz_historyvisits': | 209 u'LONG)'), |
210 u'CREATE TABLE moz_historyvisits ( id INTEGER PRIMARY KEY, from_visit ' | 210 u'moz_historyvisits': ( |
211 u'INTEGER, place_id INTEGER, visit_date INTEGER, visit_type INTEGER, ' | 211 u'CREATE TABLE moz_historyvisits ( id INTEGER PRIMARY KEY, ' |
212 u'session INTEGER)', | 212 u'from_visit INTEGER, place_id INTEGER, visit_date INTEGER, ' |
213 u'moz_inputhistory': | 213 u'visit_type INTEGER, session INTEGER)'), |
214 u'CREATE TABLE moz_inputhistory ( place_id INTEGER NOT NULL, input ' | 214 u'moz_inputhistory': ( |
215 u'LONGVARCHAR NOT NULL, use_count INTEGER, PRIMARY KEY (place_id, ' | 215 u'CREATE TABLE moz_inputhistory ( place_id INTEGER NOT NULL, input ' |
216 u'input))', | 216 u'LONGVARCHAR NOT NULL, use_count INTEGER, PRIMARY KEY (place_id, ' |
217 u'moz_items_annos': | 217 u'input))'), |
218 u'CREATE TABLE moz_items_annos ( id INTEGER PRIMARY KEY, item_id ' | 218 u'moz_items_annos': ( |
219 u'INTEGER NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) ' | 219 u'CREATE TABLE moz_items_annos ( id INTEGER PRIMARY KEY, item_id ' |
220 u'DEFAULT NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, ' | 220 u'INTEGER NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) ' |
221 u'expiration INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded ' | 221 u'DEFAULT NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, ' |
222 u'INTEGER DEFAULT 0, lastModified INTEGER DEFAULT 0)', | 222 u'expiration INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded ' |
223 u'moz_keywords': | 223 u'INTEGER DEFAULT 0, lastModified INTEGER DEFAULT 0)'), |
224 u'CREATE TABLE moz_keywords ( id INTEGER PRIMARY KEY AUTOINCREMENT, ' | 224 u'moz_keywords': ( |
225 u'keyword TEXT UNIQUE)', | 225 u'CREATE TABLE moz_keywords ( id INTEGER PRIMARY KEY AUTOINCREMENT, ' |
226 u'moz_places': | 226 u'keyword TEXT UNIQUE)'), |
227 u'CREATE TABLE moz_places ( id INTEGER PRIMARY KEY, url LONGVARCHAR, ' | 227 u'moz_places': ( |
228 u'title LONGVARCHAR, rev_host LONGVARCHAR, visit_count INTEGER ' | 228 u'CREATE TABLE moz_places ( id INTEGER PRIMARY KEY, url LONGVARCHAR, ' |
229 u'DEFAULT 0, hidden INTEGER DEFAULT 0 NOT NULL, typed INTEGER DEFAULT ' | 229 u'title LONGVARCHAR, rev_host LONGVARCHAR, visit_count INTEGER ' |
230 u'0 NOT NULL, favicon_id INTEGER, frecency INTEGER DEFAULT -1 NOT ' | 230 u'DEFAULT 0, hidden INTEGER DEFAULT 0 NOT NULL, typed INTEGER ' |
231 u'NULL, last_visit_date INTEGER )'}, | 231 u'DEFAULT 0 NOT NULL, favicon_id INTEGER, frecency INTEGER DEFAULT ' |
232 {u'moz_anno_attributes': | 232 u'-1 NOT NULL, last_visit_date INTEGER )')} |
233 u'CREATE TABLE moz_anno_attributes ( id INTEGER PRIMARY KEY, name ' | 233 |
234 u'VARCHAR(32) UNIQUE NOT NULL)', | 234 _SCHEMA_V25 = { |
235 u'moz_annos': | 235 u'moz_anno_attributes': ( |
236 u'CREATE TABLE moz_annos ( id INTEGER PRIMARY KEY, place_id INTEGER ' | 236 u'CREATE TABLE moz_anno_attributes ( id INTEGER PRIMARY KEY, name ' |
237 u'NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) DEFAULT ' | 237 u'VARCHAR(32) UNIQUE NOT NULL)'), |
238 u'NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, expiration ' | 238 u'moz_annos': ( |
239 u'INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded INTEGER ' | 239 u'CREATE TABLE moz_annos ( id INTEGER PRIMARY KEY, place_id INTEGER ' |
240 u'DEFAULT 0, lastModified INTEGER DEFAULT 0)', | 240 u'NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) DEFAULT ' |
241 u'moz_bookmarks': | 241 u'NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, expiration ' |
242 u'CREATE TABLE moz_bookmarks ( id INTEGER PRIMARY KEY, type INTEGER, ' | 242 u'INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded INTEGER ' |
243 u'fk INTEGER DEFAULT NULL, parent INTEGER, position INTEGER, title ' | 243 u'DEFAULT 0, lastModified INTEGER DEFAULT 0)'), |
244 u'LONGVARCHAR, keyword_id INTEGER, folder_type TEXT, dateAdded ' | 244 u'moz_bookmarks': ( |
245 u'INTEGER, lastModified INTEGER, guid TEXT)', | 245 u'CREATE TABLE moz_bookmarks ( id INTEGER PRIMARY KEY, type INTEGER, ' |
246 u'moz_bookmarks_roots': | 246 u'fk INTEGER DEFAULT NULL, parent INTEGER, position INTEGER, title ' |
247 u'CREATE TABLE moz_bookmarks_roots ( root_name VARCHAR(16) UNIQUE, ' | 247 u'LONGVARCHAR, keyword_id INTEGER, folder_type TEXT, dateAdded ' |
248 u'folder_id INTEGER)', | 248 u'INTEGER, lastModified INTEGER, guid TEXT)'), |
249 u'moz_favicons': | 249 u'moz_bookmarks_roots': ( |
250 u'CREATE TABLE moz_favicons ( id INTEGER PRIMARY KEY, url LONGVARCHAR ' | 250 u'CREATE TABLE moz_bookmarks_roots ( root_name VARCHAR(16) UNIQUE, ' |
251 u'UNIQUE, data BLOB, mime_type VARCHAR(32), expiration LONG, guid ' | 251 u'folder_id INTEGER)'), |
252 u'TEXT)', | 252 u'moz_favicons': ( |
253 u'moz_historyvisits': | 253 u'CREATE TABLE moz_favicons ( id INTEGER PRIMARY KEY, url ' |
254 u'CREATE TABLE moz_historyvisits ( id INTEGER PRIMARY KEY, from_visit ' | 254 u'LONGVARCHAR UNIQUE, data BLOB, mime_type VARCHAR(32), expiration ' |
255 u'INTEGER, place_id INTEGER, visit_date INTEGER, visit_type INTEGER, ' | 255 u'LONG, guid TEXT)'), |
256 u'session INTEGER)', | 256 u'moz_historyvisits': ( |
257 u'moz_hosts': | 257 u'CREATE TABLE moz_historyvisits ( id INTEGER PRIMARY KEY, ' |
258 u'CREATE TABLE moz_hosts ( id INTEGER PRIMARY KEY, host TEXT NOT NULL ' | 258 u'from_visit INTEGER, place_id INTEGER, visit_date INTEGER, ' |
259 u'UNIQUE, frecency INTEGER, typed INTEGER NOT NULL DEFAULT 0, prefix ' | 259 u'visit_type INTEGER, session INTEGER)'), |
260 u'TEXT)', | 260 u'moz_hosts': ( |
261 u'moz_inputhistory': | 261 u'CREATE TABLE moz_hosts ( id INTEGER PRIMARY KEY, host TEXT NOT ' |
262 u'CREATE TABLE moz_inputhistory ( place_id INTEGER NOT NULL, input ' | 262 u'NULL UNIQUE, frecency INTEGER, typed INTEGER NOT NULL DEFAULT 0, ' |
263 u'LONGVARCHAR NOT NULL, use_count INTEGER, PRIMARY KEY (place_id, ' | 263 u'prefix TEXT)'), |
264 u'input))', | 264 u'moz_inputhistory': ( |
265 u'moz_items_annos': | 265 u'CREATE TABLE moz_inputhistory ( place_id INTEGER NOT NULL, input ' |
266 u'CREATE TABLE moz_items_annos ( id INTEGER PRIMARY KEY, item_id ' | 266 u'LONGVARCHAR NOT NULL, use_count INTEGER, PRIMARY KEY (place_id, ' |
267 u'INTEGER NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) ' | 267 u'input))'), |
268 u'DEFAULT NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, ' | 268 u'moz_items_annos': ( |
269 u'expiration INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded ' | 269 u'CREATE TABLE moz_items_annos ( id INTEGER PRIMARY KEY, item_id ' |
270 u'INTEGER DEFAULT 0, lastModified INTEGER DEFAULT 0)', | 270 u'INTEGER NOT NULL, anno_attribute_id INTEGER, mime_type VARCHAR(32) ' |
271 u'moz_keywords': | 271 u'DEFAULT NULL, content LONGVARCHAR, flags INTEGER DEFAULT 0, ' |
272 u'CREATE TABLE moz_keywords ( id INTEGER PRIMARY KEY AUTOINCREMENT, ' | 272 u'expiration INTEGER DEFAULT 0, type INTEGER DEFAULT 0, dateAdded ' |
273 u'keyword TEXT UNIQUE)', | 273 u'INTEGER DEFAULT 0, lastModified INTEGER DEFAULT 0)'), |
274 u'moz_places': | 274 u'moz_keywords': ( |
275 u'CREATE TABLE moz_places ( id INTEGER PRIMARY KEY, url LONGVARCHAR, ' | 275 u'CREATE TABLE moz_keywords ( id INTEGER PRIMARY KEY AUTOINCREMENT, ' |
276 u'title LONGVARCHAR, rev_host LONGVARCHAR, visit_count INTEGER ' | 276 u'keyword TEXT UNIQUE)'), |
277 u'DEFAULT 0, hidden INTEGER DEFAULT 0 NOT NULL, typed INTEGER DEFAULT ' | 277 u'moz_places': ( |
278 u'0 NOT NULL, favicon_id INTEGER, frecency INTEGER DEFAULT -1 NOT ' | 278 u'CREATE TABLE moz_places ( id INTEGER PRIMARY KEY, url LONGVARCHAR, ' |
279 u'NULL, last_visit_date INTEGER , guid TEXT)', | 279 u'title LONGVARCHAR, rev_host LONGVARCHAR, visit_count INTEGER ' |
280 u'sqlite_stat1': | 280 u'DEFAULT 0, hidden INTEGER DEFAULT 0 NOT NULL, typed INTEGER ' |
281 u'CREATE TABLE sqlite_stat1(tbl,idx,stat)'}] | 281 u'DEFAULT 0 NOT NULL, favicon_id INTEGER, frecency INTEGER DEFAULT ' |
| 282 u'-1 NOT NULL, last_visit_date INTEGER , guid TEXT)'), |
| 283 u'sqlite_stat1': ( |
| 284 u'CREATE TABLE sqlite_stat1(tbl, idx, stat)')} |
| 285 |
| 286 SCHEMAS = [_SCHEMA_V24, _SCHEMA_V25] |
282 | 287 |
283 # Cache queries. | 288 # Cache queries. |
284 URL_CACHE_QUERY = ( | 289 URL_CACHE_QUERY = ( |
285 u'SELECT h.id AS id, p.url, p.rev_host FROM moz_places p, ' | 290 u'SELECT h.id AS id, p.url, p.rev_host FROM moz_places p, ' |
286 u'moz_historyvisits h WHERE p.id = h.place_id') | 291 u'moz_historyvisits h WHERE p.id = h.place_id') |
287 | 292 |
288 # TODO: move to formatter. | 293 # TODO: move to formatter. |
289 _BOOKMARK_TYPES = { | 294 _BOOKMARK_TYPES = { |
290 1: u'URL', | 295 1: u'URL', |
291 2: u'Folder', | 296 2: u'Folder', |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 if timestamp: | 567 if timestamp: |
563 date_time = dfdatetime_posix_time.PosixTimeInMicroseconds( | 568 date_time = dfdatetime_posix_time.PosixTimeInMicroseconds( |
564 timestamp=timestamp) | 569 timestamp=timestamp) |
565 event = time_events.DateTimeValuesEvent( | 570 event = time_events.DateTimeValuesEvent( |
566 date_time, eventdata.EventTimestamp.END_TIME) | 571 date_time, eventdata.EventTimestamp.END_TIME) |
567 parser_mediator.ProduceEventWithEventData(event, event_data) | 572 parser_mediator.ProduceEventWithEventData(event, event_data) |
568 | 573 |
569 | 574 |
570 sqlite.SQLiteParser.RegisterPlugins([ | 575 sqlite.SQLiteParser.RegisterPlugins([ |
571 FirefoxHistoryPlugin, FirefoxDownloadsPlugin]) | 576 FirefoxHistoryPlugin, FirefoxDownloadsPlugin]) |
LEFT | RIGHT |