Skip to content

Commit 2cf66c3

Browse files
committed
Update Wallet.Authenticate LoginPayload serialization to match Web Auth payload
1 parent d5bbde3 commit 2cf66c3

File tree

2 files changed

+101
-51
lines changed

2 files changed

+101
-51
lines changed

Assets/Thirdweb/Core/Scripts/Types.cs

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -422,39 +422,62 @@ public override readonly string ToString()
422422
[System.Serializable]
423423
public class LoginPayloadData
424424
{
425-
public string type;
426-
public string domain;
427-
public string address;
428-
public string statement;
429-
public string uri;
430-
public string version;
431-
public string chain_id;
432-
public string nonce;
433-
public string issued_at;
434-
public string expiration_time;
435-
public string invalid_before;
436-
public List<string> resources;
425+
[JsonProperty("type")]
426+
public string Type { get; set; }
427+
428+
[JsonProperty("domain")]
429+
public string Domain { get; set; }
430+
431+
[JsonProperty("address")]
432+
public string Address { get; set; }
433+
434+
[JsonProperty("statement")]
435+
public string Statement { get; set; }
436+
437+
[JsonProperty("uri", NullValueHandling = NullValueHandling.Ignore)]
438+
public string Uri { get; set; }
439+
440+
[JsonProperty("version", NullValueHandling = NullValueHandling.Ignore)]
441+
public string Version { get; set; }
442+
443+
[JsonProperty("chain_id", NullValueHandling = NullValueHandling.Ignore)]
444+
public string ChainId { get; set; }
445+
446+
[JsonProperty("nonce", NullValueHandling = NullValueHandling.Ignore)]
447+
public string Nonce { get; set; }
448+
449+
[JsonProperty("issued_at", NullValueHandling = NullValueHandling.Ignore)]
450+
public string IssuedAt { get; set; }
451+
452+
[JsonProperty("expiration_time", NullValueHandling = NullValueHandling.Ignore)]
453+
public string ExpirationTime { get; set; }
454+
455+
[JsonProperty("invalid_before", NullValueHandling = NullValueHandling.Ignore)]
456+
public string InvalidBefore { get; set; }
457+
458+
[JsonProperty("resources", NullValueHandling = NullValueHandling.Ignore)]
459+
public List<string> Resources { get; set; }
437460

438461
public LoginPayloadData()
439462
{
440-
type = "evm";
463+
Type = "evm";
441464
}
442465

443466
public override string ToString()
444467
{
445468
return $"LoginPayloadData:"
446-
+ $"\n>type: {type}"
447-
+ $"\n>domain: {domain}"
448-
+ $"\n>address: {address}"
449-
+ $"\n>statement: {statement}"
450-
+ $"\n>uri: {uri}"
451-
+ $"\n>version: {version}"
452-
+ $"\n>chain_id: {chain_id}"
453-
+ $"\n>nonce: {nonce}"
454-
+ $"\n>issued_at: {issued_at}"
455-
+ $"\n>expiration_time: {expiration_time}"
456-
+ $"\n>invalid_before: {invalid_before}"
457-
+ $"\n>resources: {resources}";
469+
+ $"\n>type: {Type}"
470+
+ $"\n>domain: {Domain}"
471+
+ $"\n>address: {Address}"
472+
+ $"\n>statement: {Statement}"
473+
+ $"\n>uri: {Uri}"
474+
+ $"\n>version: {Version}"
475+
+ $"\n>chain_id: {ChainId}"
476+
+ $"\n>nonce: {Nonce}"
477+
+ $"\n>issued_at: {IssuedAt}"
478+
+ $"\n>expiration_time: {ExpirationTime}"
479+
+ $"\n>invalid_before: {InvalidBefore}"
480+
+ $"\n>resources: {Resources}";
458481
}
459482
}
460483

Assets/Thirdweb/Core/Scripts/Wallet.cs

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Newtonsoft.Json.Linq;
1212
using Nethereum.Hex.HexTypes;
1313
using Newtonsoft.Json;
14+
using System.Linq;
1415

1516
namespace Thirdweb
1617
{
@@ -91,8 +92,8 @@ public async Task<LoginPayload> Authenticate(string domain)
9192
var siwe = ThirdwebManager.Instance.SDK.session.SiweSession;
9293
var siweMsg = new SiweMessage()
9394
{
94-
Resources = new List<string>(),
95-
Uri = $"https://{domain}",
95+
Resources = null,
96+
Uri = null,
9697
Statement = "Please ensure that the domain above matches the URL of the current website.",
9798
Address = await GetAddress(),
9899
Domain = domain,
@@ -109,25 +110,38 @@ public async Task<LoginPayload> Authenticate(string domain)
109110
siweMsg.SetNotBefore(DateTime.UtcNow);
110111
siweMsg = siwe.AssignNewNonce(siweMsg);
111112

112-
var finalMsg = SiweMessageStringBuilder.BuildMessage(siweMsg);
113+
var resourcesString = siweMsg.Resources != null ? "\nResources:" + string.Join("", siweMsg.Resources.Select(r => $"\n- {r}")) : string.Empty;
114+
var finalMsg =
115+
$"{siweMsg.Domain} wants you to sign in with your Ethereum account:"
116+
+ $"\n{siweMsg.Address}\n\n"
117+
+ $"{(string.IsNullOrEmpty(siweMsg.Statement) ? "" : $"{siweMsg.Statement}\n")}"
118+
+ $"{(string.IsNullOrEmpty(siweMsg.Uri) ? "" : $"\nURI: {siweMsg.Uri}")}"
119+
+ $"\nVersion: {siweMsg.Version}"
120+
+ $"\nChain ID: {siweMsg.ChainId}"
121+
+ $"\nNonce: {siweMsg.Nonce}"
122+
+ $"\nIssued At: {siweMsg.IssuedAt}"
123+
+ $"{(string.IsNullOrEmpty(siweMsg.ExpirationTime) ? "" : $"\nExpiration Time: {siweMsg.ExpirationTime}")}"
124+
+ $"{(string.IsNullOrEmpty(siweMsg.NotBefore) ? "" : $"\nNot Before: {siweMsg.NotBefore}")}"
125+
+ $"{(string.IsNullOrEmpty(siweMsg.RequestId) ? "" : $"\nRequest ID: {siweMsg.RequestId}")}"
126+
+ resourcesString;
113127
var signature = await Sign(finalMsg);
114128

115129
return new LoginPayload()
116130
{
117131
signature = signature,
118132
payload = new LoginPayloadData()
119133
{
120-
domain = siweMsg.Domain,
121-
address = siweMsg.Address,
122-
statement = siweMsg.Statement,
123-
uri = siweMsg.Uri,
124-
version = siweMsg.Version,
125-
chain_id = siweMsg.ChainId,
126-
nonce = siweMsg.Nonce,
127-
issued_at = siweMsg.IssuedAt,
128-
expiration_time = siweMsg.ExpirationTime,
129-
invalid_before = siweMsg.NotBefore,
130-
resources = siweMsg.Resources,
134+
Domain = siweMsg.Domain,
135+
Address = siweMsg.Address,
136+
Statement = siweMsg.Statement,
137+
Uri = siweMsg.Uri,
138+
Version = siweMsg.Version,
139+
ChainId = siweMsg.ChainId,
140+
Nonce = siweMsg.Nonce,
141+
IssuedAt = siweMsg.IssuedAt,
142+
ExpirationTime = siweMsg.ExpirationTime,
143+
InvalidBefore = siweMsg.NotBefore,
144+
Resources = siweMsg.Resources,
131145
}
132146
};
133147
}
@@ -149,22 +163,35 @@ public async Task<string> Verify(LoginPayload payload)
149163
var siwe = ThirdwebManager.Instance.SDK.session.SiweSession;
150164
var siweMessage = new SiweMessage()
151165
{
152-
Domain = payload.payload.domain,
153-
Address = payload.payload.address,
154-
Statement = payload.payload.statement,
155-
Uri = payload.payload.uri,
156-
Version = payload.payload.version,
157-
ChainId = payload.payload.chain_id,
158-
Nonce = payload.payload.nonce,
159-
IssuedAt = payload.payload.issued_at,
160-
ExpirationTime = payload.payload.expiration_time,
161-
NotBefore = payload.payload.invalid_before,
162-
Resources = payload.payload.resources,
166+
Domain = payload.payload.Domain,
167+
Address = payload.payload.Address,
168+
Statement = payload.payload.Statement,
169+
Uri = payload.payload.Uri,
170+
Version = payload.payload.Version,
171+
ChainId = payload.payload.ChainId,
172+
Nonce = payload.payload.Nonce,
173+
IssuedAt = payload.payload.IssuedAt,
174+
ExpirationTime = payload.payload.ExpirationTime,
175+
NotBefore = payload.payload.InvalidBefore,
176+
Resources = payload.payload.Resources,
163177
RequestId = null
164178
};
165179
var signature = payload.signature;
166180
var validUser = await siwe.IsUserAddressRegistered(siweMessage);
167-
var msg = SiweMessageStringBuilder.BuildMessage(siweMessage);
181+
var resourcesString = siweMessage.Resources != null ? "\nResources:" + string.Join("", siweMessage.Resources.Select(r => $"\n- {r}")) : string.Empty;
182+
var msg =
183+
$"{siweMessage.Domain} wants you to sign in with your Ethereum account:"
184+
+ $"\n{siweMessage.Address}\n\n"
185+
+ $"{(string.IsNullOrEmpty(siweMessage.Statement) ? "" : $"{siweMessage.Statement}\n")}"
186+
+ $"{(string.IsNullOrEmpty(siweMessage.Uri) ? "" : $"\nURI: {siweMessage.Uri}")}"
187+
+ $"\nVersion: {siweMessage.Version}"
188+
+ $"\nChain ID: {siweMessage.ChainId}"
189+
+ $"\nNonce: {siweMessage.Nonce}"
190+
+ $"\nIssued At: {siweMessage.IssuedAt}"
191+
+ $"{(string.IsNullOrEmpty(siweMessage.ExpirationTime) ? "" : $"\nExpiration Time: {siweMessage.ExpirationTime}")}"
192+
+ $"{(string.IsNullOrEmpty(siweMessage.NotBefore) ? "" : $"\nNot Before: {siweMessage.NotBefore}")}"
193+
+ $"{(string.IsNullOrEmpty(siweMessage.RequestId) ? "" : $"\nRequest ID: {siweMessage.RequestId}")}"
194+
+ resourcesString;
168195
if (validUser)
169196
{
170197
string recoveredAddress = await RecoverAddress(msg, signature);

0 commit comments

Comments
 (0)