Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,528 changes: 632 additions & 896 deletions packages/relayer/src/abis/account_handler.rs

Large diffs are not rendered by default.

593 changes: 258 additions & 335 deletions packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs

Large diffs are not rendered by default.

2,018 changes: 849 additions & 1,169 deletions packages/relayer/src/abis/email_wallet_core.rs

Large diffs are not rendered by default.

830 changes: 357 additions & 473 deletions packages/relayer/src/abis/erc20.rs

Large diffs are not rendered by default.

880 changes: 376 additions & 504 deletions packages/relayer/src/abis/erc_721.rs

Large diffs are not rendered by default.

921 changes: 388 additions & 533 deletions packages/relayer/src/abis/events.rs

Large diffs are not rendered by default.

1,341 changes: 568 additions & 773 deletions packages/relayer/src/abis/extension_handler.rs

Large diffs are not rendered by default.

1,024 changes: 454 additions & 570 deletions packages/relayer/src/abis/ioauth.rs

Large diffs are not rendered by default.

1,269 changes: 542 additions & 727 deletions packages/relayer/src/abis/nft_extension.rs

Large diffs are not rendered by default.

1,920 changes: 818 additions & 1,102 deletions packages/relayer/src/abis/oauth_core.rs

Large diffs are not rendered by default.

865 changes: 361 additions & 504 deletions packages/relayer/src/abis/relayer_handler.rs

Large diffs are not rendered by default.

886 changes: 378 additions & 508 deletions packages/relayer/src/abis/test_erc20.rs

Large diffs are not rendered by default.

1,313 changes: 555 additions & 758 deletions packages/relayer/src/abis/token_registry.rs

Large diffs are not rendered by default.

2,851 changes: 1,206 additions & 1,645 deletions packages/relayer/src/abis/unclaims_handler.rs

Large diffs are not rendered by default.

1,364 changes: 588 additions & 776 deletions packages/relayer/src/abis/wallet.rs

Large diffs are not rendered by default.

61 changes: 38 additions & 23 deletions packages/relayer/src/modules/web_server/rest_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,22 @@ use crate::{
error, handle_email, handle_email_event, render_html, trace, wallet::EphemeralTx, EmailMessage,
EmailWalletEvent, RELAYER_EMAIL_ADDRESS,
};
use crate::{CHAIN_RPC_EXPLORER, CLIENT, DB, WEB_SERVER_ADDRESS};
use ethers::{
etherscan::account, types::{Address, Bytes, Signature, U256}, utils::{hash_message, keccak256, to_checksum}
etherscan::account,
types::{Address, Bytes, Signature, U256},
utils::{hash_message, keccak256, to_checksum},
};
use hex::encode;
use rand::Rng;
use relayer_utils::{
converters::{field2hex, hex2field},
cryptos::{AccountCode, AccountSalt, PaddedEmailAddr},
ParsedEmail, LOG,
};
use crate::{CHAIN_RPC_EXPLORER, WEB_SERVER_ADDRESS,CLIENT, DB};
use hex::encode;
use rand::Rng;
use serde::{Deserialize, Serialize};
use serde_json::{from_str, Number};
use serde_json::Value;
use serde_json::{from_str, Number};
use std::str::FromStr;

#[derive(Serialize, Deserialize)]
Expand Down Expand Up @@ -138,7 +140,6 @@ pub struct EpheAddrStatusResponse {
pub nonce: Option<String>,
}


#[derive(Serialize, Deserialize, Debug)]
pub struct ExecuteEphemeralTxRequest {
pub wallet_addr: String,
Expand Down Expand Up @@ -487,7 +488,11 @@ pub async fn receive_email_api_fn(email: String) -> Result<()> {

pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)> {
let mut request_id: u32 = rand::thread_rng().gen();
while DB.get_ephe_addr_info(&request_id.to_string()).await?.is_some() {
while DB
.get_ephe_addr_info(&request_id.to_string())
.await?
.is_some()
{
request_id = rand::thread_rng().gen();
}
let request = serde_json::from_str::<SignupOrInRequest>(&payload)
Expand All @@ -513,7 +518,7 @@ pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)>
let registered_username = CLIENT.get_username_from_wallet(&account_salt).await?;
trace!(LOG, "Registered Username: {:?}", registered_username);
let is_signup = registered_username.len() == 0;

if is_signup && request.username.is_none() {
let subject = "Email Wallet Error: No username in the sign-up request".to_string();
let error_msg = "Please specify a username when you sign-up".to_string();
Expand Down Expand Up @@ -565,11 +570,16 @@ pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)>
request
);
nonce = Some(got_nonce);
println!("request_id int: {}",request_id);
println!("request_id string: {}",request_id.to_string());
DB.insert_ephe_addr_info(&request_id.to_string(), &encode(&wallet_addr.0),&ephe_addr_str, &got_nonce.to_string()).await?;
println!("request_id int: {}", request_id);
println!("request_id string: {}", request_id.to_string());
DB.insert_ephe_addr_info(
&request_id.to_string(),
&encode(&wallet_addr.0),
&ephe_addr_str,
&got_nonce.to_string(),
)
.await?;
}


let prefix = if is_signup { "Sign-up" } else { "Sign-in" };
let used_username = if is_signup {
Expand All @@ -580,20 +590,17 @@ pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)>
let mut subject = _construct_sign_up_in_subject(
prefix,
used_username,
nonce.map(|s| {
s.to_string()
}),
nonce.map(|s| s.to_string()),
request.expiry_time,
request.token_allowances,
);
if let Some(code) = code_in_email {
subject = format!("{} Code {}", subject, code);
}


let body_plain = format!(
"Hi {}! Please reply to this email to {} {}.\nYou don't have to add any message in the reply 😄.\nYour wallet address: {}/address/{}.",
request.email_addr,
request.email_addr
if is_signup { "sign-up" } else { "sign-in" },
used_username, CHAIN_RPC_EXPLORER.get().unwrap(), wallet_addr,
);
Expand All @@ -611,8 +618,6 @@ pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)>
Ok((request_id, email))
}



// pub async fn signin_api_fn(payload: String) -> Result<(u64, EmailMessage)> {
// let request_id = rand::thread_rng().gen();
// let request = serde_json::from_str::<SigninRequest>(&payload)
Expand Down Expand Up @@ -688,7 +693,9 @@ pub async fn signup_or_in_api_fn(payload: String) -> Result<(u32, EmailMessage)>
pub async fn ephe_addr_status_api_fn(payload: String) -> Result<EpheAddrStatusResponse> {
let request = serde_json::from_str::<EpheAddrStatusRequest>(&payload)
.map_err(|_| anyhow!("Invalid payload json".to_string()))?;
let ephe_addr_info = DB.get_ephe_addr_info(&request.request_id.to_string()).await?;
let ephe_addr_info = DB
.get_ephe_addr_info(&request.request_id.to_string())
.await?;
if ephe_addr_info.is_none() {
error!(LOG, "Ephe addr info not found");
return Ok(EpheAddrStatusResponse {
Expand All @@ -705,7 +712,11 @@ pub async fn ephe_addr_status_api_fn(payload: String) -> Result<EpheAddrStatusRe
let ephe_addr = Address::from_str(&ephe_addr_str)?;
trace!(LOG, "Ephe addr: {}", ephe_addr);
// verify if request.signature
let signed_msg = format!("{}:/api/epheAddrStatus/{}", RELAYER_EMAIL_ADDRESS.get().unwrap(),request.request_id);
let signed_msg = format!(
"{}:/api/epheAddrStatus/{}",
RELAYER_EMAIL_ADDRESS.get().unwrap(),
request.request_id
);
trace!(LOG, "Signed msg: {}", signed_msg);
let signed_msg_hash = hash_message(&signed_msg);
let signature = Signature::from_str(&request.signature)?;
Expand All @@ -720,15 +731,19 @@ pub async fn ephe_addr_status_api_fn(payload: String) -> Result<EpheAddrStatusRe
nonce: None,
});
}
if CLIENT.validate_ephe_addr(wallet_addr, ephe_addr, U256::from_str_radix(&nonce,10)?).await.is_err() {
if CLIENT
.validate_ephe_addr(wallet_addr, ephe_addr, U256::from_str_radix(&nonce, 10)?)
.await
.is_err()
{
trace!(LOG, "Ephe addr not activated");
return Ok(EpheAddrStatusResponse {
is_activated: false,
wallet_addr: None,
nonce: None,
});
}

let wallet_addr_checksumed = to_checksum(&wallet_addr, None);
Ok(EpheAddrStatusResponse {
is_activated: true,
Expand Down
Loading