From b3fa74d2155273e133923d3b1c98c490b4235185 Mon Sep 17 00:00:00 2001 From: Michael Gerullis Date: Fri, 2 Aug 2024 20:43:52 +0200 Subject: [PATCH] add comments, migrate deprecated methods --- .../certificatechecker/SSLCertificateChecker.java | 9 +++++++-- .../certificatechecker/SSLCertificateCheckerPlugin.java | 1 + .../SSLCertificateChecker.swift | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateChecker.java b/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateChecker.java index b5bcfe2..969b7ea 100644 --- a/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateChecker.java +++ b/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateChecker.java @@ -21,6 +21,8 @@ @CapacitorPlugin(name = "SSLCertificateChecker") public class SSLCertificateChecker extends Plugin { + // pluginCall is basically the wrapper for the JS code that calls the plugin + // it's wrapper than gives us getters for the options passed in from JS as well as resolve and reject methods to send back to JS @PluginMethod public void checkCertificate(PluginCall call) { String url = call.getString("url"); @@ -38,8 +40,8 @@ public void checkCertificate(PluginCall call) { JSObject result = new JSObject(); if (cert instanceof X509Certificate) { X509Certificate x509cert = (X509Certificate) cert; - result.put("subject", x509cert.getSubjectDN().getName()); - result.put("issuer", x509cert.getIssuerDN().getName()); + result.put("subject", x509cert.getSubjectX500Principal().getName()); + result.put("issuer", x509cert.getIssuerX500Principal().getName()); result.put("validFrom", x509cert.getNotBefore().toString()); result.put("validTo", x509cert.getNotAfter().toString()); result.put("fingerprint", actualFingerprint); @@ -51,6 +53,7 @@ public void checkCertificate(PluginCall call) { } } + // getCertificate is a private method that gets the certificate from the server private Certificate getCertificate(String urlString) throws Exception { URL url = new URL(urlString); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); @@ -78,6 +81,7 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) throws return cert; } + // getFingerprint is a private method that gets the fingerprint of the certificate private String getFingerprint(Certificate cert) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] der = cert.getEncoded(); @@ -86,6 +90,7 @@ private String getFingerprint(Certificate cert) throws Exception { return bytesToHex(digest); } + // bytesToHex is a private method that converts the byte array to a hex string private String bytesToHex(byte[] bytes) { StringBuilder result = new StringBuilder(); for (byte b : bytes) { diff --git a/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateCheckerPlugin.java b/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateCheckerPlugin.java index afa1a0a..fa300de 100644 --- a/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateCheckerPlugin.java +++ b/android/src/main/java/com/tonybluckdruck/certificatechecker/SSLCertificateCheckerPlugin.java @@ -6,6 +6,7 @@ import com.getcapacitor.PluginMethod; import com.getcapacitor.annotation.CapacitorPlugin; +// Plugin annotation is used to register the plugin with the Capacitor framework @CapacitorPlugin(name = "SSLCertificateChecker") public class SSLCertificateCheckerPlugin extends Plugin { diff --git a/ios/Sources/SSLCertificateCheckerPlugin/SSLCertificateChecker.swift b/ios/Sources/SSLCertificateCheckerPlugin/SSLCertificateChecker.swift index a512e8d..33d2aa7 100644 --- a/ios/Sources/SSLCertificateCheckerPlugin/SSLCertificateChecker.swift +++ b/ios/Sources/SSLCertificateCheckerPlugin/SSLCertificateChecker.swift @@ -31,11 +31,13 @@ class CertificateCheckDelegate: NSObject, URLSessionDelegate { private let expectedFingerprint: String private let completion: (Bool) -> Void + // init is the initializer for the class init(expectedFingerprint: String, completion: @escaping (Bool) -> Void) { self.expectedFingerprint = expectedFingerprint self.completion = completion } + // urlSession is the method that is called when a URLSession receives a challenge func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { guard let serverTrust = challenge.protectionSpace.serverTrust, let certificate = SecTrustGetCertificateAtIndex(serverTrust, 0) else { @@ -58,6 +60,7 @@ class CertificateCheckDelegate: NSObject, URLSessionDelegate { } } + // certificateFingerprint is the method that gets the fingerprint of the certificate private func certificateFingerprint(_ certificate: SecCertificate) -> String { if let data = SecCertificateCopyData(certificate) as Data? { let hash = SHA256.hash(data: data)