Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ android {
}

defaultConfig {
minSdkVersion 24
minSdkVersion 26
}
}

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
implementation 'com.github.Web3Auth:single-factor-auth-android:0.4.0'
implementation 'com.github.Web3Auth:single-factor-auth-android:1.1.0'
implementation 'org.torusresearch:fetch-node-details-java:5.0.0'
implementation 'com.google.code.gson:gson:2.9.1'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.web3auth.single_factor_auth_flutter

data class SFAOptions(val network: String, var clientId: String, var sessionTime: Int = 86400)

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import androidx.annotation.NonNull
import com.google.gson.Gson
import com.web3auth.singlefactorauth.SingleFactorAuth
import com.web3auth.singlefactorauth.types.LoginParams
import com.web3auth.singlefactorauth.types.SingleFactorAuthArgs
import com.web3auth.singlefactorauth.types.TorusKey
import com.web3auth.singlefactorauth.types.SFAKey
import com.web3auth.singlefactorauth.types.SFAParams
import com.web3auth.singlefactorauth.types.TorusSubVerifierInfo
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
Expand All @@ -27,7 +27,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler {
private lateinit var channel: MethodChannel
private lateinit var context: Context
private lateinit var singleFactorAuth: SingleFactorAuth
private lateinit var singleFactorAuthArgs: SingleFactorAuthArgs
private lateinit var sfaParams: SFAParams
private lateinit var loginParams: LoginParams
private var gson: Gson = Gson()

Expand All @@ -48,6 +48,8 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler {
"aqua" -> Web3AuthNetwork.AQUA
"cyan" -> Web3AuthNetwork.CYAN
"celeste" -> Web3AuthNetwork.CELESTE
"sapphire_testnet" -> Web3AuthNetwork.SAPPHIRE_DEVNET
"sapphire_mainnet" -> Web3AuthNetwork.SAPPHIRE_MAINNET
else -> Web3AuthNetwork.MAINNET
}
}
Expand All @@ -73,19 +75,19 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler {

"init" -> {
val initArgs = call.arguments<String>()
val params = gson.fromJson(initArgs, SFAParams::class.java)
singleFactorAuthArgs = SingleFactorAuthArgs(getNetwork(params.network), params.clientid)
singleFactorAuth = SingleFactorAuth(singleFactorAuthArgs)
val params = gson.fromJson(initArgs, SFAOptions::class.java)
sfaParams =
SFAParams(getNetwork(params.network), params.clientId, params.sessionTime)
singleFactorAuth = SingleFactorAuth(sfaParams, context)
return null
}

"initialize" -> {
try {
val torusKeyCF = singleFactorAuth.initialize(context)
val sfaKey = singleFactorAuth.initialize(context)
Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#initialize")
return if (torusKeyCF.get() != null) {
val torusKey = torusKeyCF.get()
prepareResult(torusKey)
return if (sfaKey.get() != null) {
prepareResultFromSFAkey(sfaKey.get())
} else {
""
}
Expand All @@ -94,43 +96,44 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler {
}
}

"getTorusKey" -> {
"connect" -> {
try {
val initArgs = call.arguments<String>()
val params = gson.fromJson(initArgs, Web3AuthOptions::class.java)
loginParams = LoginParams(
params.verifier, params.verifierId,
params.idToken
)
val torusKeyCF = singleFactorAuth.getKey(loginParams, context)
Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#getTorusKey")
val torusKey = torusKeyCF.get()
return prepareResult(torusKey)
if (params.aggregateVerifier.isNullOrEmpty()) {
loginParams = LoginParams(
params.verifier, params.verifierId,
params.idToken
)
} else {
loginParams = LoginParams(
params.aggregateVerifier, params.verifierId,
params.idToken,
arrayOf(
TorusSubVerifierInfo(
params.verifier,
params.idToken
)
)
)
}
val sfaKeyCF = singleFactorAuth.connect(loginParams, context)
Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#connect")
val sfaKey = sfaKeyCF
return prepareResult(sfaKey)
} catch (e: Throwable) {
throw Error(e)
}
}

"getAggregateTorusKey" -> {
"isSessionIdExists" -> {
try {
val initArgs = call.arguments<String>()
val params = gson.fromJson(initArgs, Web3AuthOptions::class.java)
loginParams = LoginParams(
params.aggregateVerifier.toString(), params.verifierId,
params.idToken,
arrayOf(
TorusSubVerifierInfo(
params.verifier,
params.idToken
)
)
)
val torusKeyCF = singleFactorAuth.getKey(loginParams, context)
val result = singleFactorAuth.isSessionIdExists()
Log.d(
"${SingleFactorAuthFlutterPlugin::class.qualifiedName}",
"#getAggregateTorusKey"
"#isSessionIdExists"
)
return prepareResult(torusKeyCF.get())
return result
} catch (e: Throwable) {
throw Error(e)
}
Expand All @@ -139,10 +142,17 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler {
throw NotImplementedError()
}

private fun prepareResult(torusKey: TorusKey): String {
private fun prepareResult(sfaKey: SFAKey?): String {
val hashMap: HashMap<String, String> = HashMap<String, String>(2)
hashMap["privateKey"] = sfaKey?.getPrivateKey() as String
hashMap["publicAddress"] = sfaKey?.getPublicAddress() as String
return gson.toJson(hashMap)
}

private fun prepareResultFromSFAkey(sfaKey: SFAKey): String {
val hashMap: HashMap<String, String> = HashMap<String, String>(2)
hashMap["privateKey"] = torusKey.privateKey?.toString(16) as String
hashMap["publicAddress"] = torusKey.publicAddress as String
hashMap["privateKey"] = sfaKey.getPrivateKey() as String ?: ""
hashMap["publicAddress"] = sfaKey.getPublicAddress() as String ?: ""
return gson.toJson(hashMap)
}
}
2 changes: 1 addition & 1 deletion example/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ android {
applicationId "com.web3auth.single_factor_auth_flutter_example"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 24
minSdkVersion 26
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
Expand Down
30 changes: 13 additions & 17 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
PODS:
- AnyCodable-FlightSchool (0.6.7)
- BigInt (5.2.0)
- curvelib.swift (1.0.1)
- Flutter (1.0.0)
- KeychainSwift (20.0.0)
- single_factor_auth_flutter (0.0.1):
- Flutter
- SingleFactorAuth (= 6.0.0)
- SingleFactorAuth (6.0.0):
- SingleFactorAuth (= 8.0.0)
- SingleFactorAuth (8.0.0):
- curvelib.swift (~> 1.0.1)
- Torus-fetchNodeDetails (~> 6.0.1)
- Torus-utils (~> 8.1.0)
- TorusSessionManager (~> 4.0.2)
- Torus-fetchNodeDetails (~> 6.0.3)
- Torus-utils (~> 9.0.1)
- TorusSessionManager (~> 5.0.0)
- Torus-fetchNodeDetails (6.0.3):
- BigInt (~> 5.2.0)
- Torus-utils (8.1.0):
- AnyCodable-FlightSchool (~> 0.6.0)
- Torus-utils (9.0.1):
- curvelib.swift (~> 1.0.1)
- Torus-fetchNodeDetails (~> 6.0.1)
- TorusSessionManager (4.0.2):
- Torus-fetchNodeDetails (~> 6.0.3)
- TorusSessionManager (5.0.0):
- curvelib.swift (~> 1.0.1)
- KeychainSwift (~> 20.0.0)

Expand All @@ -28,7 +26,6 @@ DEPENDENCIES:

SPEC REPOS:
trunk:
- AnyCodable-FlightSchool
- BigInt
- curvelib.swift
- KeychainSwift
Expand All @@ -44,17 +41,16 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/single_factor_auth_flutter/ios"

SPEC CHECKSUMS:
AnyCodable-FlightSchool: 261cbe76757802b17d471b9059b21e6fa5edf57b
BigInt: f668a80089607f521586bbe29513d708491ef2f7
curvelib.swift: d0746ae82bee34016c06da3567a97e493b3c979f
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837
single_factor_auth_flutter: c15c7a7a225399326d38c85de60ba3e1d5c5f82a
SingleFactorAuth: 2c25b70f7faac954fc15fe8f9598f80b09ca450e
single_factor_auth_flutter: 9617e5ffce9c0251bddb19cbe49293f921c13b79
SingleFactorAuth: 2bfa8ad0fe8d0023fffdf1a5f0c9634ca3ee66d8
Torus-fetchNodeDetails: 6c349f47cbca36a4b3f276fe26d03c1b39b20949
Torus-utils: 3ec4dba5ea50935ab129077adef4207af5a00225
TorusSessionManager: 05a1a8f3265d0949a1a342c4ba2c52882445b614
Torus-utils: 1d23e6eedf9ee7df9ecc2605b765ad68eb194f71
TorusSessionManager: 42c21f100d895976fabe3806cb9c575392f6e424

PODFILE CHECKSUM: d5c402b2f74646de5c7f24c1231886362b49b38f

COCOAPODS: 1.14.3
COCOAPODS: 1.14.2
2 changes: 1 addition & 1 deletion example/ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import UIKit
import Flutter

@UIApplicationMain
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
Expand Down
55 changes: 24 additions & 31 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class _MyAppState extends State<MyApp> {
final _singleFactorAuthFlutterPlugin = SingleFactAuthFlutter();
String _result = '';
bool logoutVisible = false;
Web3AuthNetwork torusNetwork = Web3AuthNetwork.aqua;
Web3AuthNetwork web3AuthNetwork = Web3AuthNetwork.sapphire_mainnet;

@override
void initState() {
Expand All @@ -35,26 +35,31 @@ class _MyAppState extends State<MyApp> {
Future<void> initSdk() async {
if (Platform.isAndroid) {
await init();
initialize();
if (await _singleFactorAuthFlutterPlugin.isSessionIdExists()) {
initialize();
}
} else if (Platform.isIOS) {
await init();
initialize();
if (await _singleFactorAuthFlutterPlugin.isSessionIdExists()) {
initialize();
}
} else {}
}

Future<void> init() async {
await _singleFactorAuthFlutterPlugin
.init(SFAParams(network: torusNetwork, clientid: 'YOUR_CLIENT_ID'));
await _singleFactorAuthFlutterPlugin.init(SFAParams(
network: web3AuthNetwork,
clientId: 'YOUR_CLIENT_ID',
sessionTime: 86400));
}

Future<void> initialize() async {
log("initialize() called");
final TorusKey? torusKey =
await _singleFactorAuthFlutterPlugin.initialize();
if (torusKey != null) {
final SFAKey? sfaKey = await _singleFactorAuthFlutterPlugin.initialize();
if (sfaKey != null) {
setState(() {
_result =
"Public Add : ${torusKey.publicAddress} , Private Key : ${torusKey.privateKey}";
"Public Add : ${sfaKey.publicAddress} , Private Key : ${sfaKey.privateKey}";
});
}
}
Expand Down Expand Up @@ -106,15 +111,15 @@ class _MyAppState extends State<MyApp> {
height: 20,
),
const Text(
'Get TorusKey',
'Get SFAKey',
style: TextStyle(fontSize: 12),
),
const SizedBox(
height: 20,
),
ElevatedButton(
onPressed: _getKey(getKey),
child: const Text('GetTorusKey'),
child: const Text('Get SFAKey'),
),
ElevatedButton(
onPressed: () => _initialize(),
Expand All @@ -134,10 +139,10 @@ class _MyAppState extends State<MyApp> {
);
}

VoidCallback _getKey(Future<TorusKey> Function() method) {
VoidCallback _getKey(Future<SFAKey> Function() method) {
return () async {
try {
final TorusKey response = await method();
final SFAKey response = await method();
setState(() {
_result =
"Public Add : ${response.publicAddress} , Private Key : ${response.privateKey}";
Expand All @@ -155,10 +160,11 @@ class _MyAppState extends State<MyApp> {

Future<void> _initialize() async {
try {
final TorusKey? response =
final SFAKey? response =
await _singleFactorAuthFlutterPlugin.initialize();
setState(() {
_result = "Private Key : ${response?.privateKey}";
_result =
"Public Add : ${response?.publicAddress} , Private Key : ${response?.privateKey}";
log(response!.publicAddress);
});
} on PrivateKeyNotGeneratedException {
Expand All @@ -168,24 +174,11 @@ class _MyAppState extends State<MyApp> {
}
}

Future<TorusKey> getKey() {
return _singleFactorAuthFlutterPlugin.getKey(
LoginParams(
verifier: 'torus-test-health',
verifierId: 'hello@tor.us',
idToken: Utils().es256Token("hello@tor.us"),
),
);
}

Future<TorusKey> getAggregrateKey() {
return _singleFactorAuthFlutterPlugin.getAggregateKey(
LoginParams(
Future<SFAKey> getKey() {
return _singleFactorAuthFlutterPlugin.connect(LoginParams(
verifier: 'torus-test-health',
verifierId: 'hello@tor.us',
idToken: Utils().es256Token("hello@tor.us"),
aggregateVerifier: 'torus-test-health-aggregate',
),
);
));
}
}
Loading