import 'types.dart'; import 'package:flutter/services.dart'; /// class HttpAuthCredentialDatabase { static HttpAuthCredentialDatabase _instance; static const MethodChannel _channel = const MethodChannel('com.pichillilorenzo/flutter_inappbrowser_credential_database'); /// static HttpAuthCredentialDatabase instance() { return (_instance != null) ? _instance : _init(); } static HttpAuthCredentialDatabase _init() { _channel.setMethodCallHandler(_handleMethod); _instance = new HttpAuthCredentialDatabase(); return _instance; } static Future _handleMethod(MethodCall call) async { } /// Future>> getAllAuthCredentials() async { Map args = {}; List allCredentials = await _channel.invokeMethod('getAllAuthCredentials', args); List> result = []; for (Map map in allCredentials) { Map protectionSpace = map["protectionSpace"]; List credentials = map["credentials"]; result.add({ "protectionSpace": ProtectionSpace(host: protectionSpace["host"], protocol: protectionSpace["protocol"], realm: protectionSpace["realm"], port: protectionSpace["port"]), "credentials": credentials.map((credential) => HttpAuthCredential(username: credential["username"], password: credential["password"])).toList() }); } return result; } /// Future> getHttpAuthCredentials(ProtectionSpace protectionSpace) async { Map args = {}; args.putIfAbsent("host", () => protectionSpace.host); args.putIfAbsent("protocol", () => protectionSpace.protocol); args.putIfAbsent("realm", () => protectionSpace.realm); args.putIfAbsent("port", () => protectionSpace.port); List credentialList = await _channel.invokeMethod('getHttpAuthCredentials', args); List credentials = []; for (Map credential in credentialList) { credentials.add(HttpAuthCredential(username: credential["username"], password: credential["password"])); } return credentials; } /// Future setHttpAuthCredential(ProtectionSpace protectionSpace, HttpAuthCredential credential) async { Map args = {}; args.putIfAbsent("host", () => protectionSpace.host); args.putIfAbsent("protocol", () => protectionSpace.protocol); args.putIfAbsent("realm", () => protectionSpace.realm); args.putIfAbsent("port", () => protectionSpace.port); args.putIfAbsent("username", () => credential.username); args.putIfAbsent("password", () => credential.password); await _channel.invokeMethod('setHttpAuthCredential', args); } /// Future removeHttpAuthCredential(ProtectionSpace protectionSpace, HttpAuthCredential credential) async { Map args = {}; args.putIfAbsent("host", () => protectionSpace.host); args.putIfAbsent("protocol", () => protectionSpace.protocol); args.putIfAbsent("realm", () => protectionSpace.realm); args.putIfAbsent("port", () => protectionSpace.port); args.putIfAbsent("username", () => credential.username); args.putIfAbsent("password", () => credential.password); await _channel.invokeMethod('removeHttpAuthCredential', args); } /// Future removeHttpAuthCredentials(ProtectionSpace protectionSpace) async { Map args = {}; args.putIfAbsent("host", () => protectionSpace.host); args.putIfAbsent("protocol", () => protectionSpace.protocol); args.putIfAbsent("realm", () => protectionSpace.realm); args.putIfAbsent("port", () => protectionSpace.port); await _channel.invokeMethod('removeHttpAuthCredentials', args); } /// Future clearAllAuthCredentials() async { Map args = {}; await _channel.invokeMethod('clearAllAuthCredentials', args); } }