@@ -147,6 +147,8 @@ 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 ;
150152 }
151153 }
152154
@@ -281,23 +283,40 @@ private async void processRequest(string path, LoginParams loginParams = null)
281283
282284 loginParams . redirectUrl = loginParams . redirectUrl ?? new Uri ( this . initParams [ "redirectUrl" ] . ToString ( ) ) ;
283285 //Debug.Log("loginParams.redirectUrl: =>" + loginParams.redirectUrl);
286+ //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(this.initParams));
287+ var sessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
288+ if ( path == "manage_mfa" ) {
289+ loginParams . redirectUrl = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
290+ this . initParams [ "redirectUrl" ] = new Uri ( this . initParams [ "dashboardUrl" ] . ToString ( ) ) ;
291+ var loginIdObject = new Dictionary < string , string >
292+ {
293+ { "loginId" , sessionId }
294+ } ;
295+ string loginIdBase64 = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( loginIdObject , Formatting . None ,
296+ new JsonSerializerSettings
297+ {
298+ NullValueHandling = NullValueHandling . Ignore
299+ } ) ) ) ;
300+ loginParams . appState = loginIdBase64 ;
301+ }
302+
284303 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
285304 paramMap [ "options" ] = this . initParams ;
286305 paramMap [ "params" ] = loginParams == null ? ( object ) new Dictionary < string , object > ( ) : ( object ) loginParams ;
287306 paramMap [ "actionType" ] = path ;
288307
289- if ( path == "enable_mfa" )
308+ if ( path == "enable_mfa" || path == "manage_mfa" )
290309 {
291- string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
292- paramMap [ "sessionId" ] = sessionId ;
310+ string savedSessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
311+ paramMap [ "sessionId" ] = savedSessionId ;
293312 }
294313
295314 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
296315 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
297316 new JsonSerializerSettings
298317 {
299318 NullValueHandling = NullValueHandling . Ignore
300- } ) , 600 , "*" ) ;
319+ } ) , 600 , "*" , sessionId ) ;
301320
302321 if ( ! string . IsNullOrEmpty ( loginId ) )
303322 {
@@ -353,11 +372,12 @@ public async void launchWalletServices(ChainConfig chainConfig, string path = "w
353372 paramMap [ "options" ] = this . initParams ;
354373
355374 //Debug.Log("paramMap: =>" + JsonConvert.SerializeObject(paramMap));
375+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
356376 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
357377 new JsonSerializerSettings
358378 {
359379 NullValueHandling = NullValueHandling . Ignore
360- } ) , 600 , "*" ) ;
380+ } ) , 600 , "*" , newSessionId ) ;
361381
362382 if ( ! string . IsNullOrEmpty ( loginId ) )
363383 {
@@ -549,6 +569,32 @@ public void enableMFA(LoginParams loginParams)
549569 }
550570 }
551571
572+ public void manageMFA ( LoginParams loginParams )
573+ {
574+ if ( web3AuthResponse . userInfo . isMfaEnabled == false )
575+ {
576+ throw new Exception ( "MFA is not enabled. Please enable MFA first." ) ;
577+ }
578+ string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
579+ if ( ! string . IsNullOrEmpty ( sessionId ) )
580+ {
581+ if ( web3AuthOptions . loginConfig != null )
582+ {
583+ var loginConfigItem = web3AuthOptions . loginConfig ? . Values . First ( ) ;
584+ var share = KeyStoreManagerUtils . getPreferencesData ( loginConfigItem ? . verifier ) ;
585+ if ( ! string . IsNullOrEmpty ( share ) )
586+ {
587+ loginParams . dappShare = share ;
588+ }
589+ }
590+ processRequest ( "manage_mfa" , loginParams ) ;
591+ }
592+ else
593+ {
594+ throw new Exception ( "SessionId not found. Please login first." ) ;
595+ }
596+ }
597+
552598 public async void request ( ChainConfig chainConfig , string method , JArray requestParams , string path = "wallet/request" ) {
553599 string sessionId = KeyStoreManagerUtils . getPreferencesData ( KeyStoreManagerUtils . SESSION_ID ) ;
554600 if ( ! string . IsNullOrEmpty ( sessionId ) )
@@ -569,11 +615,12 @@ public async void request(ChainConfig chainConfig, string method, JArray request
569615 Dictionary < string , object > paramMap = new Dictionary < string , object > ( ) ;
570616 paramMap [ "options" ] = this . initParams ;
571617
618+ var newSessionId = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
572619 string loginId = await createSession ( JsonConvert . SerializeObject ( paramMap , Formatting . None ,
573620 new JsonSerializerSettings
574621 {
575622 NullValueHandling = NullValueHandling . Ignore
576- } ) , 600 , "*" ) ;
623+ } ) , 600 , "*" , newSessionId ) ;
577624
578625 if ( ! string . IsNullOrEmpty ( loginId ) )
579626 {
@@ -750,10 +797,10 @@ private void sessionTimeOutAPI()
750797 }
751798 }
752799
753- private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin )
800+ private async Task < string > createSession ( string data , long sessionTime , string allowedOrigin , string sessionId )
754801 {
755802 TaskCompletionSource < string > createSessionResponse = new TaskCompletionSource < string > ( ) ;
756- var newSessionKey = KeyStoreManagerUtils . generateRandomSessionKey ( ) ;
803+ var newSessionKey = sessionId ;
757804 // Debug.Log("newSessionKey =>" + newSessionKey);
758805 var ephemKey = KeyStoreManagerUtils . getPubKey ( newSessionKey ) ;
759806 var ivKey = KeyStoreManagerUtils . generateRandomBytes ( ) ;
0 commit comments