Skip to content

Commit 1ed5d48

Browse files
committed
feat: manageMFA functionality added.
Signed-off-by: Gaurav Goel <[email protected]>
1 parent 0ad683d commit 1ed5d48

File tree

4 files changed

+90
-10
lines changed

4 files changed

+90
-10
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: ManageMFA
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: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)