Skip to content

Commit 137c2ab

Browse files
committed
feat: manageMFA initial vcommit
Signed-off-by: Gaurav Goel <[email protected]>
1 parent d710f21 commit 137c2ab

File tree

4 files changed

+97
-11
lines changed

4 files changed

+97
-11
lines changed

Assets/Plugins/Web3AuthSDK/Samples/Web3AuthSample.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ void Start()
117117
mfaSetupButton.onClick.AddListener(enableMFA);
118118
launchWalletServicesButton.onClick.AddListener(launchWalletServices);
119119
signMessageButton.onClick.AddListener(request);
120+
signResponseButton.onClick.AddListener(manageMFA);
120121

121122
verifierDropdown.AddOptions(verifierList.Select(x => x.name).ToList());
122123
verifierDropdown.onValueChanged.AddListener(onVerifierDropDownChange);
@@ -220,6 +221,26 @@ private void enableMFA()
220221
web3Auth.enableMFA(options);
221222
}
222223

224+
private void manageMFA()
225+
{
226+
var selectedProvider = verifierList[verifierDropdown.value].loginProvider;
227+
228+
var options = new LoginParams()
229+
{
230+
loginProvider = selectedProvider,
231+
mfaLevel = MFALevel.MANDATORY
232+
};
233+
234+
if (selectedProvider == Provider.EMAIL_PASSWORDLESS)
235+
{
236+
options.extraLoginOptions = new ExtraLoginOptions()
237+
{
238+
login_hint = emailAddressField.text
239+
};
240+
}
241+
web3Auth.manageMFA(options);
242+
}
243+
223244
private void launchWalletServices() {
224245
var selectedProvider = verifierList[verifierDropdown.value].loginProvider;
225246

Assets/Plugins/Web3AuthSDK/Samples/Web3AuthSample.unity

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ GameObject:
642642
- component: {fileID: 311891818}
643643
- component: {fileID: 311891817}
644644
m_Layer: 5
645-
m_Name: Sign Response
645+
m_Name: Mange MFA
646646
m_TagString: Untagged
647647
m_Icon: {fileID: 0}
648648
m_NavMeshLayer: 0
@@ -1389,7 +1389,7 @@ MonoBehaviour:
13891389
m_HorizontalOverflow: 0
13901390
m_VerticalOverflow: 0
13911391
m_LineSpacing: 1
1392-
m_Text: Get Sign response
1392+
m_Text: Manage MFA
13931393
--- !u!222 &537563201
13941394
CanvasRenderer:
13951395
m_ObjectHideFlags: 0

Assets/Plugins/Web3AuthSDK/Types/Web3AuthOptions.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,16 @@ public string walletSdkUrl {
3939
public int sessionTime { get; set; } = 86400;
4040
public ChainConfig? chainConfig { get; set; }
4141
public Dictionary<string, string> originData { get; set; } = null;
42+
43+
public string dashboardUrl {
44+
get {
45+
if (buildEnv == Web3Auth.BuildEnv.STAGING)
46+
return "https://staging-account.web3auth.io/wallet/account";
47+
else if (buildEnv == Web3Auth.BuildEnv.TESTING)
48+
return "https://develop-account.web3auth.io/wallet/account";
49+
else
50+
return "https://account.web3auth.io/wallet/account";
51+
}
52+
set { }
53+
}
4254
}

Assets/Plugins/Web3AuthSDK/Web3Auth.cs

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)