@@ -147,6 +147,9 @@ public async void setOptions(Web3AuthOptions web3AuthOptions)
147147 if ( this . web3AuthOptions . sessionTime != null )
148148 this . initParams [ "sessionTime" ] = this . web3AuthOptions . sessionTime ;
149149
150+ if ( this . web3AuthOptions . dashboardUrl != null )
151+ this . initParams [ "dashboardUrl" ] = this . web3AuthOptions . dashboardUrl ;
152+
150153 }
151154 }
152155
@@ -281,23 +284,41 @@ private async void processRequest(string path, LoginParams loginParams = null)
281284
282285 loginParams . redirectUrl = loginParams . redirectUrl ?? new Uri ( this . initParams [ "redirectUrl" ] . ToString ( ) ) ;
283286 //Debug.Log("loginParams.redirectUrl: =>" + loginParams.redirectUrl);
287+ var sessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
288+ if ( path == "manage_mfa" ) {
289+ loginParams . dappUrl = this . initParams [ "dashboardUrl" ] . ToString ( ) ;
290+ loginParams . redirectUrl = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
291+ this . initParams [ "redirectUrl" ] = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
292+ var loginIdObject = new Dictionary < string , string >
293+ {
294+ { "loginId" , sessionId } ,
295+ { "platform" , "unity" } ,
296+ } ;
297+ string loginIdBase64 = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( loginIdObject , Formatting . None ,
298+ new JsonSerializerSettings
299+ {
300+ NullValueHandling = NullValueHandling . Ignore
301+ } ) ) ) ;
302+ loginParams . appState = loginIdBase64 ;
303+ }
304+
284305 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
285306 paramMap [ "options" ] = this . initParams ;
286307 paramMap [ "params" ] = loginParams == null ? ( object ) new Dictionary < string , object > ( ) : ( object ) loginParams ;
287308 paramMap [ "actionType" ] = path ;
288309
289- if ( path == "enable_mfa" )
310+ if ( path == "enable_mfa" || path == "manage_mfa" )
290311 {
291- string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
292- paramMap [ "sessionId" ] = sessionId ;
312+ string savedSessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
313+ paramMap [ "sessionId" ] = savedSessionId ;
293314 }
294315
295316 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
296317 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
297318 new JsonSerializerSettings
298319 {
299320 NullValueHandling = NullValueHandling . Ignore
300- } ) , 600 , "*" ) ;
321+ } ) , 600 , "*" , sessionId ) ;
301322
302323 if ( ! string . IsNullOrEmpty ( loginId ) )
303324 {
@@ -353,11 +374,12 @@ public async void launchWalletServices(ChainConfig chainConfig, string path = "w
353374 paramMap [ "options" ] = this . initParams ;
354375
355376 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
377+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
356378 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
357379 new JsonSerializerSettings
358380 {
359381 NullValueHandling = NullValueHandling . Ignore
360- } ) , 600 , "*" ) ;
382+ } ) , 600 , "*" , newSessionId ) ;
361383
362384 if ( ! string . IsNullOrEmpty ( loginId ) )
363385 {
@@ -417,6 +439,10 @@ public void setResultUrl(Uri uri)
417439 Uri newUri = new Uri ( newUriString ) ;
418440 string b64Params = getQueryParamValue ( newUri , "b64Params" ) ;
419441 string decodedString = decodeBase64Params ( b64Params ) ;
442+ if ( decodedString . Contains ( "actionType" ) )
443+ {
444+ return ;
445+ }
420446 if ( isRequestResponse ) {
421447 try
422448 {
@@ -549,6 +575,32 @@ public void enableMFA(LoginParams loginParams)
549575 }
550576 }
551577
578+ public void manageMFA ( LoginParams loginParams )
579+ {
580+ if ( web3AuthResponse . userInfo . isMfaEnabled == false )
581+ {
582+ throw new Exception ( "MFA is not enabled. Please enable MFA first." ) ;
583+ }
584+ string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
585+ if ( ! string . IsNullOrEmpty ( sessionId ) )
586+ {
587+ if ( web3AuthOptions . loginConfig != null )
588+ {
589+ var loginConfigItem = web3AuthOptions . loginConfig ? . Values . First ( ) ;
590+ var share = KeyStoreManagerUtils . getPreferencesData ( loginConfigItem ? . verifier ) ;
591+ if ( ! string . IsNullOrEmpty ( share ) )
592+ {
593+ loginParams . dappShare = share ;
594+ }
595+ }
596+ processRequest ( "manage_mfa" , loginParams ) ;
597+ }
598+ else
599+ {
600+ throw new Exception ( "SessionId not found. Please login first." ) ;
601+ }
602+ }
603+
552604 public async void request ( ChainConfig chainConfig , string method , JArray requestParams , string path = "wallet/request" ) {
553605 string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
554606 if ( ! string . IsNullOrEmpty ( sessionId ) )
@@ -569,11 +621,12 @@ public async void request(ChainConfig chainConfig, string method, JArray request
569621 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
570622 paramMap [ "options" ] = this . initParams ;
571623
624+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
572625 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
573626 new JsonSerializerSettings
574627 {
575628 NullValueHandling = NullValueHandling . Ignore
576- } ) , 600 , "*" ) ;
629+ } ) , 600 , "*" , newSessionId ) ;
577630
578631 if ( ! string . IsNullOrEmpty ( loginId ) )
579632 {
@@ -627,7 +680,7 @@ private void authorizeSession(string newSessionId, string origin)
627680 if ( string . IsNullOrEmpty ( newSessionId ) )
628681 {
629682 sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
630- // Debug.Log("sessionId during authorizeSession in if part =>" + sessionId);
683+ Debug . Log ( "sessionId during authorizeSession in if part =>" + sessionId ) ;
631684 }
632685 else
633686 {
@@ -750,10 +803,10 @@ private void sessionTimeOutAPI()
750803 }
751804 }
752805
753- private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin )
806+ private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin , string sessionId )
754807 {
755808 TaskCompletionSource < string > createSessionResponse = new TaskCompletionSource < string > ( ) ;
756- var newSessionKey = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
809+ var newSessionKey = sessionId ;
757810 // Debug.Log("newSessionKey =>" + newSessionKey);
758811 var ephemKey = KeyStoreManagerUtils . getPubKey ( newSessionKey ) ;
759812 var ivKey = KeyStoreManagerUtils . generateRandomBytes ( ) ;
0 commit comments