예제 #1
0
        private void CurrentBrowser_YouTubeDownloadComplete(object sender, EventArgs e)
        {
            Invoke((MethodInvoker) delegate
            {
                uiDownloadProgressBar.Visible = false;
                DialogResult dialogRes;
                string fileName;
                string dateAndtime;

                using (VideoPreviewer vidPreviewer = new VideoPreviewer(Enums.Actions.Video))
                {
                    dialogRes   = vidPreviewer.ShowDialog();
                    fileName    = vidPreviewer.FileName + vidPreviewer.FileExtension;;
                    dateAndtime = vidPreviewer.DateAndTime;
                }

                if (dialogRes != DialogResult.OK)
                {
                    return;
                }

                DisplaySavedLabel(fileName, dateAndtime);
                ImageDiskCache.RemoveSpecificItemFromCache(Constants.TempVideoFile);
            });
        }
예제 #2
0
        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            string caseClosed = "[Case closed";

            caseClosed += UserSettings.Load().HashContainerOnClose ? "- Hash exported]" : "]";

            if (!isInAuditViewMode) //Still getting logged due to this logic also exisitng in the MainForm close method
            {
                Logger.Log(new OsirtActionsLog(Enums.Actions.CaseClosed, caseClosed, Constants.CaseContainerName));
            }

            (sender as BackgroundWorker).ReportProgress(10, "Archiving Case... Please Wait");
            ZipContainer(password);
            if (UserSettings.Load().ExportHashOnClose)
            {
                HashCase();
            }
            (sender as BackgroundWorker).ReportProgress(10, "Performing Clean Up Operations... Please Wait");
            //StopCapture();
            DeleteImageMagickFiles();
            ImageDiskCache.RemoveItemsInCache();
            ImageDiskCache.RemoveSpecificItemFromCache(Constants.TempVideoFile);
            TorCleanUp();
            WriteFavourites();
            int attempts = 0;

            while (CleanUpDirectories())
            {
                if (++attempts > 10)
                {
                    break;
                }
            }
        }
예제 #3
0
        private void Dialog_VideoDownloadComplete(object sender, EventArgs e)
        {
            //show video previewer

            using (VideoPreviewer vidPreviewer = new VideoPreviewer(Enums.Actions.Video, Path.Combine(Constants.VideoCacheLocation, "temp_facebook_vid.mp4")))
            {
                vidPreviewer.ShowDialog();
            }

            ImageDiskCache.RemoveSpecificItemFromCache(Path.Combine(Constants.VideoCacheLocation, "temp_facebook_vid.mp4"));
        }
예제 #4
0
 private void Vd_VideoDownloadComplete(object sender, EventArgs e)
 {
     Invoke((Action) delegate
     {
         using (VideoPreviewer vidPreviewer = new VideoPreviewer(Actions.Video, Path.Combine(Constants.VideoCacheLocation, "temp_video_download.mp4")))
         {
             vidPreviewer.ShowDialog();
         }
         ImageDiskCache.RemoveSpecificItemFromCache(Path.Combine(Constants.VideoCacheLocation, "temp_video_download.mp4"));
     });
 }
예제 #5
0
        private void osirtVideoCapture_VideoCaptureComplete(object sender, EventArgs e)
        {
            if (markerWindow != null && markerWindow.Visible)
            {
                markerWindow.Close();
                markerWindow.Dispose();
            }

            using (VideoPreviewer vidPreviewer = new VideoPreviewer(Enums.Actions.Video))
            {
                vidPreviewer.ShowDialog();
            }

            ImageDiskCache.RemoveSpecificItemFromCache(Constants.TempVideoFile);
        }
예제 #6
0
        private void CopyPageSaveToCase(string folder, WaitWindowEventArgs e)
        {
            using (ZipFile zip = new ZipFile())
            {
                zip.AddDirectory(folder);
                zip.Save(folder + ".zip");
                e.Window.Message = "Zipping...Please Wait";
            }

            string copyTo = Path.Combine(Constants.ContainerLocation, Constants.Directories.GetSpecifiedCaseDirectory(Enums.Actions.Download), Path.GetFileNameWithoutExtension(folder) + ".zip");

            File.Copy(folder + ".zip", copyTo);
            e.Window.Message = "Logging...Please Wait";
            Logger.Log(new WebpageActionsLog(uiTabbedBrowserControl.CurrentTab.Browser.URL, Enums.Actions.Download, OsirtHelper.GetFileHash(copyTo), Path.GetFileNameWithoutExtension(folder) + ".zip", "Webpage downloaded"));
            Thread.Sleep(2000);
            File.Delete(folder + ".zip");
            ImageDiskCache.RemoveItemsInCache();
        }
예제 #7
0
        private void snippetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (!SnippingTool.Snip())
                {
                    return;
                }
            }
            catch
            {
                MessageBox.Show("Unable to use snipping tool. Try closing some tabs. If this continues, restart OSIRT.", "Unable to use snippet tool", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            using (Previewer imagePreviewer = new ImagePreviewer(Enums.Actions.Snippet, uiTabbedBrowserControl.CurrentTab.Browser.URL))
            {
                imagePreviewer.ShowDialog();
            }
            ImageDiskCache.RemoveItemsInCache();
        }
예제 #8
0
 private void uiScreenshotButton_Click(object sender, EventArgs e)
 {
     try
     {
         ImageDiskCache.RemoveItemsInCache(); //may be old items in cache, don't want them getting appended to screenshot
         //ImageDiskCache.RemoveSpecificItemFromCache(Constants.TempVideoFile);
         uiBrowserToolStrip.Enabled = false;
         uiTabbedBrowserControl.FullPageScreenshot();
     }
     catch (ImageMagick.MagickDelegateErrorException mdee)
     {
         MessageBox.Show("There has been an error combining the screenshot (MagickDelegateErrorException). Try taking the screenshot again.", "Error combining screenshot", MessageBoxButtons.OK, MessageBoxIcon.Error);
         ImageDiskCache.RemoveItemsInCache();
         ImageDiskCache.RemoveSpecificItemFromCache("temp.mp4");
         UiTabbedBrowserControl_ScreenshotComplete(sender, e);
     }
     finally
     {
         //uiBrowserToolStrip.Enabled = true;
     }
 }
 private void SaveAs()
 {
     try
     {
         pathToSave = Path.Combine(Constants.ContainerLocation, Constants.Directories.GetSpecifiedCaseDirectory(action), FileName);
         string sourceFile = Path.Combine(filePath);
         File.Copy(sourceFile, pathToSave); //Will need to delete this from the cache
         ImageDiskCache.RemoveSpecificItemFromCache(filePath);
         successful = true;
     }
     catch (IOException ioe)
     {
         MessageBox.Show($"Can't move file to container due to an IOExcpetion... {ioe}");
     }
     catch (UnauthorizedAccessException uae)
     {
         MessageBox.Show($"Can't move file to container due to an Unauthorised Access Attempt... {uae}");
     }
     catch (Exception e)
     {
         MessageBox.Show($"General... {e}");
     }
 }
예제 #10
0
        private void ShowImagePreviewer(Actions action, string imagePath)
        {
            Invoke((MethodInvoker) delegate
            {
                ScreenshotDetails details = new ScreenshotDetails(CurrentBrowser.URL);
                DialogResult dialogRes;
                string fileName;
                string dateAndtime;

                using (Previewer previewForm = new ImagePreviewer(action, CurrentBrowser.URL, imagePath))
                {
                    dialogRes   = previewForm.ShowDialog();
                    fileName    = previewForm.FileName + previewForm.FileExtension;
                    dateAndtime = previewForm.DateAndTime;
                }
                ImageDiskCache.RemoveItemsInCache();
                if (dialogRes != DialogResult.OK)
                {
                    return;
                }

                DisplaySavedLabel(fileName, dateAndtime);
            });
        }
예제 #11
0
        private async void FullpageScreenshotByScrolling()
        {
            int scrollHeight = GetDocHeight();

            if (scrollHeight == 0)
            {
                FireScreenshotCompleteEvent(false);
                return;
            }

            Debug.WriteLine("Client rect height: " + ClientRectangle.Size.Height);
            Debug.WriteLine("Control height: " + Height);
            Debug.WriteLine("Display Rect height: " + DisplayRectangle.Height);
            Debug.WriteLine("Client size height: " + ClientSize.Height);



            Enabled = false;
            int viewportHeight = ClientRectangle.Size.Height;
            int viewportWidth  = ClientRectangle.Size.Width;

            await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { document.documentElement.style.overflow = 'hidden'; })();");

            int  count    = 0;
            int  pageLeft = scrollHeight;
            bool atBottom = false;

            Debug.WriteLine($"OUTSIDE --- PAGE LEFT: {pageLeft}. VIEWPORT HEIGHT: {viewportHeight}");
            ImageDiskCache cache = new ImageDiskCache();

            while (!atBottom)
            {
                if (pageLeft > viewportHeight)
                {
                    await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { window.scroll(0," + (count * viewportHeight) + "); })();");

                    count++;
                    await PutTaskDelay();  //we do need these delays. Some pages, like facebook, may need to load viewport content.

                    using (Bitmap image = GetCurrentViewScreenshot())
                    {
                        cache.AddImage(count, image);
                    }

                    if (!OsirtHelper.IsOnGoogle(URL))
                    {
                        await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { var elements = document.querySelectorAll('*'); for (var i = 0; i < elements.length; i++) { var position = window.getComputedStyle(elements[i]).position; if (position === 'fixed') { elements[i].style.visibility = 'hidden'; } } })(); ");
                    }
                }
                else
                {
                    //find out what's left of the page to scroll, then take screenshot
                    //if it's the last image, we're going to need to crop what we need, as it'll take
                    //a capture of the entire viewport.


                    await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { window.scrollBy(0," + pageLeft + "); })();");

                    atBottom = true;
                    count++;

                    await PutTaskDelay();

                    Rectangle cropRect = new Rectangle(new Point(0, viewportHeight - pageLeft), new Size(viewportWidth, pageLeft));

                    using (Bitmap src = GetCurrentViewScreenshot())
                        using (Bitmap target = new Bitmap(cropRect.Width, cropRect.Height))
                            using (Graphics g = Graphics.FromImage(target))
                            {
                                g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height), cropRect, GraphicsUnit.Pixel);
                                cache.AddImage(count, target);
                            }
                }

                pageLeft = pageLeft - viewportHeight;
                Debug.WriteLine($"IN WHILE --- PAGE LEFT: {pageLeft}. VIEWPORT HEIGHT: {viewportHeight}");
            }//end while
            await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { document.documentElement.style.overflow = 'auto'; })();");
            await GetBrowser().MainFrame.EvaluateScriptAsync("javascript:var s = function() { document.body.scrollTop = document.documentElement.scrollTop = 0;}; s();");

            if (!OsirtHelper.IsOnGoogle(URL))
            {
                await GetBrowser().MainFrame.EvaluateScriptAsync("(function() { var elements = document.querySelectorAll('*'); for (var i = 0; i < elements.length; i++) { var position = window.getComputedStyle(elements[i]).position; if (position === 'fixed') { elements[i].style.visibility = 'visible'; } } })(); ");
            }
            Enabled = true;
            WaitWindow.Show(GetScreenshot, Resources.strings.CombineScreenshots);
            FireScreenshotCompleteEvent(true);
        }
        public async void Download(List <RequestWrapper> requests)
        {
            directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), DateTime.Now.ToString("ddMMyyyyHHmmss"));
            Directory.CreateDirectory(directory);
            //requests = RequestHandler.requestList.ToList(); //Could this list actually be an istance so it can work over multiple tabs?

            //requests = uiTabbedBrowserControl.CurrentTab.Browser.Requests().ToList();


            //TODO: Set this to OSIRT's UA?
            client.DefaultRequestHeaders.UserAgent.ParseAdd(@"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36");

            foreach (var r in requests)
            {
                try
                {
                    using (HttpResponseMessage response = await client.GetAsync(r.RequestUrl))
                    {
                        output += "=================================================================================\r\n";
                        output += "Request URL: " + r.RequestUrl + "\r\n";
                        output += "Resource Type: " + r.ResourceType + "\r\n";
                        output += "Mime Type: " + r.MimeType + "\r\n";

                        if (response.IsSuccessStatusCode)
                        {
                            using (HttpContent content = response.Content)
                            {
                                var file = await content.ReadAsByteArrayAsync();

                                if (file.Length > 0 && r.FileName().Length > 0)
                                {
                                    using (FileStream fs = new FileStream($@"{directory}\{r.FileName()}", FileMode.Create, FileAccess.Write))
                                    {
                                        progress.Report("Downloaded: " + $@"{directory}\{r.FileName()}");
                                        try
                                        {
                                            fs.Write(file, 0, file.Length);

                                            //causing IOException as it has not finished writing
                                            //string hash = OsirtHelper.GetFileHash($@"{directory}\{r.FileName()}");


                                            output += "File saved as: " + r.FileName() + "\r\n";
                                            //output += "Hash [" + UserSettings.Load().Hash + "]" + hash;
                                            output += "Download completed at: " + DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss.fffffff") + "\r\n";
                                            output += "=================================================================================\r\n";
                                        }
                                        catch
                                        {
                                            output += "Unabled to save this file \r\n";
                                            output += "=================================================================================\r\n";
                                        }
                                    }
                                }
                                else
                                {
                                    output += "Unable to save this file as the Content-Length is 0\r\n";
                                    output += "=================================================================================\r\n";
                                }
                            }
                        }
                        else
                        {
                            output += $"Unable to save this file, HTTP Status Code returned {response.StatusCode.ToString()}  \r\n";
                            output += "=================================================================================\r\n";
                        }
                    }
                }
                catch { }
            }
            ImageDiskCache.RemoveItemsInCache();
        }