11package com.macif.plugin.sslpinningplugin
22
3- import io.flutter.plugin.common.MethodChannel
4- import io.flutter.plugin.common.MethodChannel.MethodCallHandler
5- import io.flutter.plugin.common.MethodChannel.Result
6- import io.flutter.plugin.common.MethodCall
7- import io.flutter.plugin.common.PluginRegistry.Registrar
3+ import android.os.Build
4+ import io.flutter.embedding.engine.plugins.FlutterPlugin;
5+ import io.flutter.plugin.common.MethodCall;
6+ import io.flutter.plugin.common.MethodChannel;
7+ import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
8+ import io.flutter.plugin.common.MethodChannel.Result;
9+ import io.flutter.plugin.common.PluginRegistry.Registrar;
810
911import javax.net.ssl.HttpsURLConnection
1012import javax.security.cert.CertificateException
@@ -18,21 +20,24 @@ import java.security.cert.Certificate
1820import java.security.cert.CertificateEncodingException
1921
2022import android.os.StrictMode
23+ import androidx.annotation.RequiresApi
2124
22- class SslPinningPlugin () : MethodCallHandler {
25+ class SslPinningPlugin () : MethodCallHandler, FlutterPlugin {
2326
2427 companion object {
2528 @JvmStatic
2629 fun registerWith (registrar : Registrar ): Unit {
2730
31+ val instance = SslPinningPlugin ()
2832 val policy = StrictMode .ThreadPolicy .Builder ().permitAll().build()
2933 StrictMode .setThreadPolicy(policy)
3034
3135 val channel = MethodChannel (registrar.messenger(), " ssl_pinning_plugin" )
32- channel.setMethodCallHandler(SslPinningPlugin () )
36+ channel.setMethodCallHandler(instance )
3337 }
3438 }
3539
40+ @RequiresApi(Build .VERSION_CODES .N )
3641 override fun onMethodCall (call : MethodCall , result : Result ): Unit {
3742 try {
3843 when (call.method) {
@@ -45,6 +50,7 @@ class SslPinningPlugin() : MethodCallHandler {
4550
4651 }
4752
53+ @RequiresApi(Build .VERSION_CODES .N )
4854 @Throws(ParseException ::class )
4955 private fun handleCheckEvent (call : MethodCall , result : Result ) {
5056
@@ -63,11 +69,13 @@ class SslPinningPlugin() : MethodCallHandler {
6369
6470 }
6571
72+ @RequiresApi(Build .VERSION_CODES .N )
6673 fun checkConnexion (serverURL : String , allowedFingerprints : List <String >, httpHeaderArgs : Map <String , String >, timeout : Int , type : String ): Boolean {
6774 val sha: String = this .getFingerprint(serverURL, timeout, httpHeaderArgs, type)
6875 return allowedFingerprints.map { fp -> fp.toUpperCase().replace(" \\ s" .toRegex(), " " ) }.contains(sha)
6976 }
7077
78+ @RequiresApi(Build .VERSION_CODES .N )
7179 @Throws(IOException ::class , NoSuchAlgorithmException ::class , CertificateException ::class , CertificateEncodingException ::class )
7280 private fun getFingerprint (httpsURL : String , connectTimeout : Int , httpHeaderArgs : Map <String , String >, type : String ): String {
7381
@@ -89,4 +97,8 @@ class SslPinningPlugin() : MethodCallHandler {
8997 .digest(input)
9098 .map { String .format(" %02X" , it) }
9199 .joinToString(separator = " " )
100+
101+ override fun onAttachedToEngine (binding : FlutterPlugin .FlutterPluginBinding ) {}
102+
103+ override fun onDetachedFromEngine (binding : FlutterPlugin .FlutterPluginBinding ) {}
92104}
0 commit comments