Changeset View
Changeset View
Standalone View
Standalone View
services/identity/src/service.rs
Show First 20 Lines • Show All 329 Lines • ▼ Show 20 Lines | match client | ||||
Err(e) => Err(handle_db_error(e)), | Err(e) => Err(handle_db_error(e)), | ||||
} | } | ||||
} | } | ||||
fn parse_and_verify_siwe_message( | fn parse_and_verify_siwe_message( | ||||
user_id: &str, | user_id: &str, | ||||
signing_public_key: &str, | signing_public_key: &str, | ||||
siwe_message: &str, | siwe_message: &str, | ||||
siwe_signature: Vec<u8>, | siwe_signature: &str, | ||||
) -> Result<(), Status> { | ) -> Result<(), Status> { | ||||
if user_id.is_empty() || signing_public_key.is_empty() { | if user_id.is_empty() || signing_public_key.is_empty() { | ||||
error!( | error!( | ||||
"Incomplete data: user ID {}, signing public key {}", | "Incomplete data: user ID {}, signing public key {}", | ||||
user_id, signing_public_key | user_id, signing_public_key | ||||
); | ); | ||||
return Err(Status::aborted("user not found")); | return Err(Status::aborted("user not found")); | ||||
} | } | ||||
let siwe_message: Message = match siwe_message.parse() { | let siwe_message: Message = match siwe_message.parse() { | ||||
Ok(m) => m, | Ok(m) => m, | ||||
Err(e) => { | Err(e) => { | ||||
error!("Failed to parse SIWE message: {}", e); | error!("Failed to parse SIWE message: {}", e); | ||||
return Err(Status::invalid_argument("invalid message")); | return Err(Status::invalid_argument("invalid message")); | ||||
} | } | ||||
}; | }; | ||||
match siwe_message.verify( | match siwe_message.verify( | ||||
match siwe_signature.try_into() { | match siwe_signature.as_bytes().try_into() { | ||||
Ok(s) => s, | Ok(s) => s, | ||||
Err(e) => { | Err(e) => { | ||||
error!("Conversion to SIWE signature failed: {:?}", e); | error!("Conversion to SIWE signature failed: {:?}", e); | ||||
return Err(Status::invalid_argument("invalid message")); | return Err(Status::invalid_argument("invalid message")); | ||||
} | } | ||||
}, | }, | ||||
None, | None, | ||||
None, | None, | ||||
Show All 14 Lines | async fn wallet_login_helper( | ||||
client: &DatabaseClient, | client: &DatabaseClient, | ||||
wallet_login_request: WalletLoginRequestStruct, | wallet_login_request: WalletLoginRequestStruct, | ||||
rng: &mut (impl Rng + CryptoRng), | rng: &mut (impl Rng + CryptoRng), | ||||
) -> Result<LoginResponse, Status> { | ) -> Result<LoginResponse, Status> { | ||||
parse_and_verify_siwe_message( | parse_and_verify_siwe_message( | ||||
&wallet_login_request.user_id, | &wallet_login_request.user_id, | ||||
&wallet_login_request.signing_public_key, | &wallet_login_request.signing_public_key, | ||||
&wallet_login_request.siwe_message, | &wallet_login_request.siwe_message, | ||||
wallet_login_request.siwe_signature, | &wallet_login_request.siwe_signature, | ||||
)?; | )?; | ||||
client | client | ||||
.update_users_table( | .update_users_table( | ||||
wallet_login_request.user_id.clone(), | wallet_login_request.user_id.clone(), | ||||
Some(wallet_login_request.signing_public_key.clone()), | Some(wallet_login_request.signing_public_key.clone()), | ||||
None, | None, | ||||
None, | None, | ||||
Some( | Some( | ||||
▲ Show 20 Lines • Show All 235 Lines • Show Last 20 Lines |