diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountDataPanel.java b/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountDataPanel.java index a1077e3e82..2a78256565 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountDataPanel.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountDataPanel.java @@ -82,6 +82,24 @@ public class OsAccountDataPanel extends JPanel { * @param account OsAccount to display, if null is passed the panel will * appear blank. */ +// void setOsAccount(OsAccount account) { + void setOsAccountId(Long osAccountId) { + removeAll(); + revalidate(); + + if (osAccountId != null) { + setLayout(new BorderLayout()); + add(new JLabel("Loading OsAccount Data..."), BorderLayout.NORTH); + + if (dataFetcher != null && !dataFetcher.isDone()) { + dataFetcher.cancel(true); + } + + dataFetcher = new PanelDataFetcher(osAccountId); + dataFetcher.execute(); + } + } + void setOsAccount(OsAccount account) { removeAll(); revalidate(); @@ -319,15 +337,22 @@ public class OsAccountDataPanel extends JPanel { */ private class PanelDataFetcher extends SwingWorker { - private final OsAccount account; + private final Long accountId; + private OsAccount account; /** * Construct a new worker for the given account. * * @param account */ + PanelDataFetcher(Long accountId) { + this.accountId = accountId; + this.account = null; + } + PanelDataFetcher(OsAccount account) { this.account = account; + this.accountId = null; } @Override @@ -335,6 +360,11 @@ public class OsAccountDataPanel extends JPanel { Map> hostMap = new HashMap<>(); Map instanceMap = new HashMap<>(); OsAccountManager osAccountManager = Case.getCurrentCase().getSleuthkitCase().getOsAccountManager(); + + if(account == null) { + account = osAccountManager.getOsAccount(accountId); + } + List hosts = osAccountManager.getHosts(account); List attributeList = account.getOsAccountAttributes(); diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountViewer.java index a56e4de8c3..dd43d1f531 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/osaccount/OsAccountViewer.java @@ -53,26 +53,29 @@ public class OsAccountViewer extends javax.swing.JPanel implements DataContentVi @Override public void setNode(Node node) { - OsAccount osAccount = null; + Long osAccountId = null; try { - osAccount = node.getLookup().lookup(OsAccount.class); - if (osAccount == null) { - Optional optional; - AbstractFile file = node.getLookup().lookup(AbstractFile.class); - if (file != null) { - optional = file.getOsAccount(); - if (optional.isPresent()) { - osAccount = optional.get(); - } + OsAccount osAccount = node.getLookup().lookup(OsAccount.class); + if (osAccount != null) { + dataPanel.setOsAccount(osAccount); + return; + } + + Optional optional; + AbstractFile file = node.getLookup().lookup(AbstractFile.class); + if (file != null) { + optional = file.getOsAccountObjectId(); + if (optional.isPresent()) { + osAccountId = optional.get(); } } - if (osAccount == null) { + if (osAccountId == null) { DataArtifact dataArtifact = node.getLookup().lookup(DataArtifact.class); if (dataArtifact != null) { - Optional optional = dataArtifact.getOsAccount(); + optional = dataArtifact.getOsAccountObjectId(); if (optional.isPresent()) { - osAccount = optional.get(); + osAccountId = optional.get(); } } @@ -81,8 +84,8 @@ public class OsAccountViewer extends javax.swing.JPanel implements DataContentVi logger.log(Level.SEVERE, String.format("Failed to get OsAccount for node %s", node.getDisplayName()), ex); } - if (osAccount != null) { - dataPanel.setOsAccount(osAccount); + if (osAccountId != null) { + dataPanel.setOsAccountId(osAccountId); } } @@ -125,8 +128,8 @@ public class OsAccountViewer extends javax.swing.JPanel implements DataContentVi try { return osAccount != null - || (file != null && file.getOsAccount().isPresent()) - || (dataArtifact != null && dataArtifact.getOsAccount().isPresent()); + || (file != null && file.getOsAccountObjectId().isPresent()) + || (dataArtifact != null && dataArtifact.getOsAccountObjectId().isPresent()); } catch (TskCoreException ex) { logger.log(Level.SEVERE, String.format("Failed to determine if node %s is Supported for OsAccountViewer", node.getDisplayName()), ex); return false; diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java index 8b13eda7d1..ce60d94d7a 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java @@ -538,8 +538,12 @@ final class ChromeCacheExtractor { webAttr.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, moduleName, cachedItemFile.getId())); - Optional optional = cacheEntryFile.getOsAccount(); - BlackboardArtifact webCacheArtifact = cacheEntryFile.newDataArtifact(new BlackboardArtifact.Type(ARTIFACT_TYPE.TSK_WEB_CACHE), webAttr, optional.isPresent() ? optional.get() : null); + Optional optional = cacheEntryFile.getOsAccountObjectId(); + OsAccount account = null; + if(optional.isPresent()) { + account = currentCase.getSleuthkitCase().getOsAccountManager().getOsAccount(optional.get()); + } + BlackboardArtifact webCacheArtifact = cacheEntryFile.newDataArtifact(new BlackboardArtifact.Type(ARTIFACT_TYPE.TSK_WEB_CACHE), webAttr, account); artifactsAdded.add(webCacheArtifact); // Create a TSK_ASSOCIATED_OBJECT on the f_XXX or derived file file back to the CACHE entry diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java index 97c17b58dc..d7b4bb20a2 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java @@ -533,7 +533,11 @@ abstract class Extract { Optional getOsAccount(Content content) throws TskCoreException { if(content instanceof AbstractFile) { if(osAccountCache == null) { - return ((AbstractFile)content).getOsAccount(); + Optional accountId = ((AbstractFile)content).getOsAccountObjectId(); + if(accountId.isPresent()) { + return Optional.ofNullable(tskCase.getOsAccountManager().getOsAccount(accountId.get())); + } + return Optional.empty(); } return osAccountCache.getOsAccount(((AbstractFile)content)); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAOsAccountCache.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAOsAccountCache.java index f5208807af..54a34196ed 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAOsAccountCache.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAOsAccountCache.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Host; @@ -71,18 +72,18 @@ final class RAOsAccountCache { * @throws TskCoreException */ Optional getOsAccount(AbstractFile file) throws TskCoreException { - Optional optional = file.getOsAccount(); + Optional optional = file.getOsAccountObjectId(); if (!optional.isPresent()) { return getAccountForPath(file.getParentPath()); } - OsAccount osAccount = optional.get(); + OsAccount osAccount = Case.getCurrentCase().getSleuthkitCase().getOsAccountManager().getOsAccount(optional.get()); if (osAccount.getName().equals("S-1-5-32-544")) { return getAccountForPath(file.getParentPath()); } - return optional; + return Optional.ofNullable(osAccount); } /**