diff --git a/src/org/kde/kdeconnect/Device.java b/src/org/kde/kdeconnect/Device.java index e77e3d2e..ceccb748 100644 --- a/src/org/kde/kdeconnect/Device.java +++ b/src/org/kde/kdeconnect/Device.java @@ -36,6 +36,7 @@ import org.kde.kdeconnect_tp.R; import java.io.IOException; import java.security.cert.Certificate; +import java.security.cert.CertificateException; import java.util.Collection; import java.util.List; import java.util.Vector; @@ -77,7 +78,7 @@ public class Device implements BaseLink.PacketReceiver { * Constructor for remembered, already-trusted devices. * Given the deviceId, it will load the other properties from SharedPreferences. */ - Device(@NonNull Context context, @NonNull String deviceId) { + Device(@NonNull Context context, @NonNull String deviceId) throws CertificateException { this.context = context; this.settings = context.getSharedPreferences(deviceId, Context.MODE_PRIVATE); this.deviceInfo = DeviceInfo.loadFromSettings(context, deviceId, settings); diff --git a/src/org/kde/kdeconnect/DeviceInfo.kt b/src/org/kde/kdeconnect/DeviceInfo.kt index b03b1f4c..5fe45dca 100644 --- a/src/org/kde/kdeconnect/DeviceInfo.kt +++ b/src/org/kde/kdeconnect/DeviceInfo.kt @@ -15,6 +15,7 @@ import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper import org.kde.kdeconnect_tp.R import java.security.cert.Certificate import java.security.cert.CertificateEncodingException +import java.security.cert.CertificateException /** * DeviceInfo contains all the properties needed to instantiate a Device. @@ -70,6 +71,7 @@ class DeviceInfo( * Recreates a DeviceInfo object that was persisted using saveInSettings() */ @JvmStatic + @Throws(CertificateException::class) fun loadFromSettings(context : Context, deviceId: String, settings: SharedPreferences): DeviceInfo { val deviceName = settings.getString("deviceName", "unknown")!! val deviceType = DeviceType.fromString(settings.getString("deviceType", "desktop")!!) diff --git a/src/org/kde/kdeconnect/KdeConnect.java b/src/org/kde/kdeconnect/KdeConnect.java index 3b13b5b7..6abc44f7 100644 --- a/src/org/kde/kdeconnect/KdeConnect.java +++ b/src/org/kde/kdeconnect/KdeConnect.java @@ -24,6 +24,7 @@ import org.kde.kdeconnect.Plugins.Plugin; import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.ThemeUtil; +import java.security.cert.CertificateException; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -113,9 +114,15 @@ public class KdeConnect extends Application { for (String deviceId : trustedDevices) { //Log.e("BackgroundService", "Loading device "+deviceId); if (preferences.getBoolean(deviceId, false)) { - Device device = new Device(this, deviceId); - devices.put(deviceId, device); - device.addPairingCallback(devicePairingCallback); + try { + Device device = new Device(this, deviceId); + devices.put(deviceId, device); + device.addPairingCallback(devicePairingCallback); + } catch (CertificateException e) { + Log.w("KdeConnect", "Couldn't load the certificate for a remembered device. Removing from trusted list."); + e.printStackTrace(); + preferences.edit().remove(deviceId).apply(); + } } } }