From cf3998942fcb44741c7539020f5322734bf5194b Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 22 Jun 2017 15:33:37 -0400 Subject: [PATCH] save crash file to external storage instead --- src/Android/MainApplication.cs | 3 +- .../Services/AndroidKeyStoreStorageService.cs | 9 ++-- src/Android/Utilities.cs | 44 ++++++++++++++----- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/Android/MainApplication.cs b/src/Android/MainApplication.cs index ecd2ae54d..9659d7cc8 100644 --- a/src/Android/MainApplication.cs +++ b/src/Android/MainApplication.cs @@ -49,7 +49,8 @@ namespace Bit.Android private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e) { var message = AppendExceptionToMessage("", e.Exception); - Utilities.SendCrashEmail(message, false); + Utilities.SaveCrashFile(message, true); + //Utilities.SendCrashEmail(message, false); } private string AppendExceptionToMessage(string message, Exception ex) diff --git a/src/Android/Services/AndroidKeyStoreStorageService.cs b/src/Android/Services/AndroidKeyStoreStorageService.cs index 2e6feb120..e628e9fef 100644 --- a/src/Android/Services/AndroidKeyStoreStorageService.cs +++ b/src/Android/Services/AndroidKeyStoreStorageService.cs @@ -96,7 +96,8 @@ namespace Bit.Android.Services { Console.WriteLine("Failed to decrypt from secure storage."); _settings.Remove(formattedKey); - Utilities.SendCrashEmail(e); + //Utilities.SendCrashEmail(e); + Utilities.SaveCrashFile(e); return null; } } @@ -125,7 +126,8 @@ namespace Bit.Android.Services catch(Exception e) { Console.WriteLine("Failed to encrypt to secure storage."); - Utilities.SendCrashEmail(e); + //Utilities.SendCrashEmail(e); + Utilities.SaveCrashFile(e); } } @@ -232,7 +234,8 @@ namespace Bit.Android.Services _settings.Remove(AesKey); if(!v1) { - Utilities.SendCrashEmail(e); + //Utilities.SendCrashEmail(e); + Utilities.SaveCrashFile(e); } return null; } diff --git a/src/Android/Utilities.cs b/src/Android/Utilities.cs index 8f1af7a47..0aa865d93 100644 --- a/src/Android/Utilities.cs +++ b/src/Android/Utilities.cs @@ -1,8 +1,8 @@ using System; - using Android.App; using Android.Content; using Java.Security; +using System.IO; namespace Bit.Android { @@ -13,7 +13,39 @@ namespace Bit.Android SendCrashEmail(e.Message + "\n\n" + e.StackTrace, includeSecurityProviders); } + public static void SaveCrashFile(Exception e, bool includeSecurityProviders = true) + { + SaveCrashFile(e.Message + "\n\n" + e.StackTrace, includeSecurityProviders); + } + public static void SendCrashEmail(string text, bool includeSecurityProviders = true) + { + var emailIntent = new Intent(Intent.ActionSend); + + emailIntent.SetType("plain/text"); + emailIntent.PutExtra(Intent.ExtraEmail, new String[] { "hello@bitwarden.com" }); + emailIntent.PutExtra(Intent.ExtraSubject, "bitwarden Crash Report"); + emailIntent.PutExtra(Intent.ExtraText, FormatText(text, includeSecurityProviders)); + + Application.Context.StartActivity(Intent.CreateChooser(emailIntent, "Send mail...")); + } + + public static void SaveCrashFile(string text, bool includeSecurityProviders = true) + { + var path = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; + var dir = Path.Combine(path, "bitwarden"); + if(!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + var filename = Path.Combine(dir, $"crash-{Java.Lang.JavaSystem.CurrentTimeMillis()}.txt"); + using(var streamWriter = new StreamWriter(filename, true)) + { + streamWriter.WriteLine(FormatText(text, includeSecurityProviders)); + } + } + + private static string FormatText(string text, bool includeSecurityProviders = true) { var crashMessage = "bitwarden has crashed. Please send this email to our support team so that we can help " + "resolve the problem for you. Thank you."; @@ -36,15 +68,7 @@ namespace Bit.Android } text += "\n\n ==================================================== \n\n" + crashMessage; - - var emailIntent = new Intent(Intent.ActionSend); - - emailIntent.SetType("plain/text"); - emailIntent.PutExtra(Intent.ExtraEmail, new String[] { "hello@bitwarden.com" }); - emailIntent.PutExtra(Intent.ExtraSubject, "bitwarden Crash Report"); - emailIntent.PutExtra(Intent.ExtraText, text); - - Application.Context.StartActivity(Intent.CreateChooser(emailIntent, "Send mail...")); + return text; } } } \ No newline at end of file