19 package org.sleuthkit.autopsy.modules.android;
 
   22 import java.sql.Connection;
 
   23 import java.sql.DriverManager;
 
   24 import java.sql.ResultSet;
 
   25 import java.sql.SQLException;
 
   26 import java.sql.Statement;
 
   27 import java.util.List;
 
   28 import java.util.logging.Level;
 
   29 import org.openide.util.NbBundle;
 
   30 import org.openide.util.NbBundle.Messages;
 
   48 class WWFMessageAnalyzer {
 
   50     private static final String moduleName = AndroidModuleFactory.getModuleName();
 
   51     private static final Logger logger = Logger.getLogger(WWFMessageAnalyzer.class.getName());
 
   52     private static Blackboard blackboard;
 
   54     public static void findWWFMessages(Content dataSource, FileManager fileManager,
 
   55             IngestJobContext context) {
 
   56         List<AbstractFile> absFiles;
 
   57         blackboard = Case.getCurrentCase().getServices().getBlackboard();
 
   59             absFiles = fileManager.findFiles(dataSource, 
"WordsFramework"); 
 
   61             for (AbstractFile abstractFile : absFiles) {
 
   63                     File jFile = 
new File(Case.getCurrentCase().getTempDirectory(), abstractFile.getName());
 
   64                     ContentUtils.writeToFile(abstractFile, jFile, context::dataSourceIngestIsCancelled);
 
   66                     findWWFMessagesInDB(jFile.toString(), abstractFile);
 
   67                 } 
catch (Exception e) {
 
   68                     logger.log(Level.SEVERE, 
"Error parsing WWF messages", e); 
 
   71         } 
catch (TskCoreException e) {
 
   72             logger.log(Level.SEVERE, 
"Error finding WWF messages", e); 
 
   76     @Messages({
"WWFMessageAnalyzer.indexError.message=Failed to index WWF message artifact for keyword search."})
 
   77     private static void findWWFMessagesInDB(String DatabasePath, AbstractFile f) {
 
   78         Connection connection = null;
 
   79         ResultSet resultSet = null;
 
   80         Statement statement = null;
 
   82         if (DatabasePath == null || DatabasePath.isEmpty()) {
 
   86             Class.forName(
"org.sqlite.JDBC"); 
 
   87             connection = DriverManager.getConnection(
"jdbc:sqlite:" + DatabasePath); 
 
   88             statement = connection.createStatement();
 
   89         } 
catch (ClassNotFoundException | SQLException e) {
 
   90             logger.log(Level.SEVERE, 
"Error opening database", e); 
 
   95             resultSet = statement.executeQuery(
 
   96                     "SELECT message,strftime('%s' ,created_at) as datetime,user_id,game_id FROM chat_messages ORDER BY game_id DESC, created_at DESC;"); 
 
  102             while (resultSet.next()) {
 
  103                 message = resultSet.getString(
"message"); 
 
  104                 Long created_at = resultSet.getLong(
"datetime"); 
 
  105                 user_id = resultSet.getString(
"user_id"); 
 
  106                 game_id = resultSet.getString(
"game_id"); 
 
  108                 BlackboardArtifact bba = f.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE); 
 
  109                 bba.addAttribute(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, moduleName, created_at));
 
  110                 bba.addAttribute(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME, moduleName, user_id));
 
  111                 bba.addAttribute(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_MSG_ID, moduleName, game_id));
 
  112                 bba.addAttribute(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT, moduleName, message));
 
  113                 bba.addAttribute(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_MESSAGE_TYPE, moduleName,
 
  114                         NbBundle.getMessage(WWFMessageAnalyzer.class,
 
  115                                 "WWFMessageAnalyzer.bbAttribute.wordsWithFriendsMsg")));
 
  119                     blackboard.indexArtifact(bba);
 
  120                 } 
catch (Blackboard.BlackboardException ex) {
 
  121                     logger.log(Level.SEVERE, 
"Unable to index blackboard artifact " + bba.getArtifactID(), ex); 
 
  122                     MessageNotifyUtil.Notify.error(
 
  123                             Bundle.WWFMessageAnalyzer_indexError_message(), bba.getDisplayName());
 
  126         } 
catch (Exception e) {
 
  127             logger.log(Level.SEVERE, 
"Error parsing WWF messages to the Blackboard", e); 
 
  130                 if (resultSet != null) {
 
  135             } 
catch (Exception e) {
 
  136                 logger.log(Level.SEVERE, 
"Error closing database", e);