@@ -47,6 +47,7 @@ public enum Language
4747 public event Action < Web3AuthResponse > onLogin ;
4848 public event Action onLogout ;
4949 public event Action < bool > onMFASetup ;
50+ public event Action < bool > onManageMFA ;
5051 public event Action < SignResponse > onSignResponse ;
5152
5253 private static SignResponse signResponse = null ;
@@ -147,6 +148,9 @@ public async void setOptions(Web3AuthOptions web3AuthOptions)
147148 if ( this . web3AuthOptions . sessionTime != null )
148149 this . initParams [ "sessionTime" ] = this . web3AuthOptions . sessionTime ;
149150
151+ if ( this . web3AuthOptions . dashboardUrl != null )
152+ this . initParams [ "dashboardUrl" ] = this . web3AuthOptions . dashboardUrl ;
153+
150154 }
151155 }
152156
@@ -281,23 +285,41 @@ private async void processRequest(string path, LoginParams loginParams = null)
281285
282286 loginParams . redirectUrl = loginParams . redirectUrl ?? new Uri ( this . initParams [ "redirectUrl" ] . ToString ( ) ) ;
283287 //Debug.Log("loginParams.redirectUrl: =>" + loginParams.redirectUrl);
288+ var sessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
289+ if ( path == "manage_mfa" ) {
290+ loginParams . dappUrl = this . initParams [ "redirectUrl" ] . ToString ( ) ;
291+ loginParams . redirectUrl = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
292+ this . initParams [ "redirectUrl" ] = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
293+ var loginIdObject = new Dictionary < string , string >
294+ {
295+ { "loginId" , sessionId } ,
296+ { "platform" , "unity" } ,
297+ } ;
298+ string loginIdBase64 = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( loginIdObject , Formatting . None ,
299+ new JsonSerializerSettings
300+ {
301+ NullValueHandling = NullValueHandling . Ignore
302+ } ) ) ) ;
303+ loginParams . appState = loginIdBase64 ;
304+ }
305+
284306 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
285307 paramMap [ "options" ] = this . initParams ;
286308 paramMap [ "params" ] = loginParams == null ? ( object ) new Dictionary < string , object > ( ) : ( object ) loginParams ;
287309 paramMap [ "actionType" ] = path ;
288310
289- if ( path == "enable_mfa" )
311+ if ( path == "enable_mfa" || path == "manage_mfa" )
290312 {
291- string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
292- paramMap [ "sessionId" ] = sessionId ;
313+ string savedSessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
314+ paramMap [ "sessionId" ] = savedSessionId ;
293315 }
294316
295317 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
296318 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
297319 new JsonSerializerSettings
298320 {
299321 NullValueHandling = NullValueHandling . Ignore
300- } ) , 600 , "*" ) ;
322+ } ) , 600 , "*" , sessionId ) ;
301323
302324 if ( ! string . IsNullOrEmpty ( loginId ) )
303325 {
@@ -353,11 +375,12 @@ public async void launchWalletServices(ChainConfig chainConfig, string path = "w
353375 paramMap [ "options" ] = this . initParams ;
354376
355377 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
378+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
356379 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
357380 new JsonSerializerSettings
358381 {
359382 NullValueHandling = NullValueHandling . Ignore
360- } ) , 600 , "*" ) ;
383+ } ) , 600 , "*" , newSessionId ) ;
361384
362385 if ( ! string . IsNullOrEmpty ( loginId ) )
363386 {
@@ -417,6 +440,15 @@ public void setResultUrl(Uri uri)
417440 Uri newUri = new Uri ( newUriString ) ;
418441 string b64Params = getQueryParamValue ( newUri , "b64Params" ) ;
419442 string decodedString = decodeBase64Params ( b64Params ) ;
443+ if ( decodedString . Contains ( "actionType" ) )
444+ {
445+ RedirectResponse response = JsonUtility . FromJson < RedirectResponse > ( decodedString ) ;
446+ if ( response . actionType == "manage_mfa" )
447+ {
448+ this . Enqueue ( ( ) => this . onManageMFA ? . Invoke ( true ) ) ;
449+ return ;
450+ }
451+ }
420452 if ( isRequestResponse ) {
421453 try
422454 {
@@ -549,6 +581,32 @@ public void enableMFA(LoginParams loginParams)
549581 }
550582 }
551583
584+ public void manageMFA ( LoginParams loginParams )
585+ {
586+ if ( web3AuthResponse . userInfo . isMfaEnabled == false )
587+ {
588+ throw new Exception ( "MFA is not enabled. Please enable MFA first." ) ;
589+ }
590+ string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
591+ if ( ! string . IsNullOrEmpty ( sessionId ) )
592+ {
593+ if ( web3AuthOptions . loginConfig != null )
594+ {
595+ var loginConfigItem = web3AuthOptions . loginConfig ? . Values . First ( ) ;
596+ var share = KeyStoreManagerUtils . getPreferencesData ( loginConfigItem ? . verifier ) ;
597+ if ( ! string . IsNullOrEmpty ( share ) )
598+ {
599+ loginParams . dappShare = share ;
600+ }
601+ }
602+ processRequest ( "manage_mfa" , loginParams ) ;
603+ }
604+ else
605+ {
606+ throw new Exception ( "SessionId not found. Please login first." ) ;
607+ }
608+ }
609+
552610 public async void request ( ChainConfig chainConfig , string method , JArray requestParams , string path = "wallet/request" ) {
553611 string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
554612 if ( ! string . IsNullOrEmpty ( sessionId ) )
@@ -569,11 +627,12 @@ public async void request(ChainConfig chainConfig, string method, JArray request
569627 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
570628 paramMap [ "options" ] = this . initParams ;
571629
630+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
572631 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
573632 new JsonSerializerSettings
574633 {
575634 NullValueHandling = NullValueHandling . Ignore
576- } ) , 600 , "*" ) ;
635+ } ) , 600 , "*" , newSessionId ) ;
577636
578637 if ( ! string . IsNullOrEmpty ( loginId ) )
579638 {
@@ -627,7 +686,7 @@ private void authorizeSession(string newSessionId, string origin)
627686 if ( string . IsNullOrEmpty ( newSessionId ) )
628687 {
629688 sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
630- // Debug.Log("sessionId during authorizeSession in if part =>" + sessionId);
689+ Debug . Log ( "sessionId during authorizeSession in if part =>" + sessionId ) ;
631690 }
632691 else
633692 {
@@ -750,10 +809,10 @@ private void sessionTimeOutAPI()
750809 }
751810 }
752811
753- private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin )
812+ private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin , string sessionId )
754813 {
755814 TaskCompletionSource < string > createSessionResponse = new TaskCompletionSource < string > ( ) ;
756- var newSessionKey = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
815+ var newSessionKey = sessionId ;
757816 // Debug.Log("newSessionKey =>" + newSessionKey);
758817 var ephemKey = KeyStoreManagerUtils . getPubKey ( newSessionKey ) ;
759818 var ivKey = KeyStoreManagerUtils . generateRandomBytes ( ) ;
0 commit comments