using System.Collections.Generic; using System.Linq; using Android.Content; using Android.Preferences; using keepass2android; using Kp2aAutofillParser; namespace keepass2android.services.AutofillBase { internal class Kp2aDigitalAssetLinksDataSource : IKp2aDigitalAssetLinksDataSource { private const string Autofilltrustedapps = "AutoFillTrustedApps"; private readonly Context _ctx; public Kp2aDigitalAssetLinksDataSource(Context ctx) { _ctx = ctx; } public bool IsTrustedApp(string packageName) { if (_trustedBrowsers.Contains(packageName)) return true; var prefs = PreferenceManager.GetDefaultSharedPreferences(_ctx); var trustedApps = prefs.GetStringSet(Autofilltrustedapps, new List()).ToHashSet(); return trustedApps.Contains(packageName); } public bool IsTrustedLink(string domain, string targetPackage) { //we can fill everything into trusted apps (aka browsers) if (IsTrustedApp(targetPackage)) return true; //see if the user explicitly allows to fill credentials for domain into targetPackage: var prefs = PreferenceManager.GetDefaultSharedPreferences(_ctx); var trustedLinks = prefs.GetStringSet("AutoFillTrustedLinks", new List()).ToHashSet(); return trustedLinks.Contains(BuildLink(domain, targetPackage)); } public bool IsEnabled() { return !PreferenceManager.GetDefaultSharedPreferences(_ctx).GetBoolean(_ctx.GetString(Resource.String.NoDalVerification_key), false); } public void RememberAsTrustedApp(string packageName) { var prefs = PreferenceManager.GetDefaultSharedPreferences(_ctx); var trustedApps = prefs.GetStringSet(Autofilltrustedapps, new List()).ToHashSet(); trustedApps.Add(packageName); prefs.Edit().PutStringSet(Autofilltrustedapps, trustedApps).Commit(); } public void RememberTrustedLink(string domain, string package) { var prefs = PreferenceManager.GetDefaultSharedPreferences(_ctx); var trustedLinks = prefs.GetStringSet("AutoFillTrustedLinks", new List()).ToHashSet(); trustedLinks.Add(BuildLink(domain, package)); prefs.Edit().PutStringSet("AutoFillTrustedLinks", trustedLinks).Commit(); } private static string BuildLink(string domain, string package) { return domain + " + " + package; } static readonly HashSet _trustedBrowsers = new HashSet { "org.mozilla.firefox","org.mozilla.firefox_beta","org.mozilla.klar","org.mozilla.focus", "org.mozilla.fenix","org.mozilla.reference.browser", "com.android.browser","com.android.chrome","com.chrome.beta","com.chrome.dev","com.chrome.canary", "com.google.android.apps.chrome","com.google.android.apps.chrome_dev", "com.opera.browser","com.opera.browser.beta","com.opera.mini.native","com.opera.mini.native.beta","com.opera.touch", "com.brave.browser","com.yandex.browser","com.microsoft.emmx","com.amazon.cloud9", "com.sec.android.app.sbrowser","com.sec.android.app.sbrowser.beta","org.codeaurora.swe.browser", "mark.via.gp","org.bromite.bromite", "org.mozilla.fennec_fdroid", "com.vivaldi.browser","com.kiwibrowser.browser", "acr.browser.lightning", "acr.browser.barebones", "jp.hazuki.yuzubrowser" }; } }