Validate wallet address when logging in

This commit is contained in:
silverpill 2022-02-01 23:37:29 +00:00
parent 7e5917a821
commit 9f1f950aa3
3 changed files with 16 additions and 6 deletions

View file

@ -8,6 +8,7 @@ use crate::models::users::queries::{
get_user_by_name, get_user_by_name,
get_user_by_wallet_address, get_user_by_wallet_address,
}; };
use crate::models::users::types::validate_wallet_address;
use crate::utils::crypto::verify_password; use crate::utils::crypto::verify_password;
use super::types::{TokenRequest, TokenResponse}; use super::types::{TokenRequest, TokenResponse};
use super::utils::generate_access_token; use super::utils::generate_access_token;
@ -31,7 +32,7 @@ async fn token_view(
"ethereum" => { "ethereum" => {
let wallet_address = request_data.wallet_address.as_ref() let wallet_address = request_data.wallet_address.as_ref()
.ok_or(ValidationError("wallet address is required"))?; .ok_or(ValidationError("wallet address is required"))?;
// Wallet address must be in lowercase validate_wallet_address(wallet_address)?;
get_user_by_wallet_address(db_client, wallet_address).await? get_user_by_wallet_address(db_client, wallet_address).await?
}, },
_ => { _ => {

View file

@ -15,7 +15,10 @@ use crate::models::profiles::queries::{
search_profile_by_wallet_address, search_profile_by_wallet_address,
}; };
use crate::models::profiles::types::DbActorProfile; use crate::models::profiles::types::DbActorProfile;
use crate::models::users::types::validate_wallet_address; use crate::models::users::types::{
validate_wallet_address,
WALLET_CURRENCY_CODE,
};
use super::types::SearchResults; use super::types::SearchResults;
enum SearchQuery { enum SearchQuery {
@ -49,12 +52,12 @@ fn parse_search_query(search_query: &str) -> SearchQuery {
}; };
match parse_profile_query(search_query) { match parse_profile_query(search_query) {
Ok((username, instance)) => { Ok((username, instance)) => {
return SearchQuery::ProfileQuery(username, instance); SearchQuery::ProfileQuery(username, instance)
}, },
Err(_) => { Err(_) => {
return SearchQuery::Unknown; SearchQuery::Unknown
}, },
}; }
} }
async fn search_profiles( async fn search_profiles(
@ -132,7 +135,11 @@ pub async fn search(
}, },
SearchQuery::WalletAddress(address) => { SearchQuery::WalletAddress(address) => {
// Search is case insensitive // Search is case insensitive
profiles = search_profile_by_wallet_address(db_client, "ETH", &address).await?; profiles = search_profile_by_wallet_address(
db_client,
WALLET_CURRENCY_CODE,
&address,
).await?;
}, },
SearchQuery::Unknown => (), // ignore SearchQuery::Unknown => (), // ignore
}; };

View file

@ -62,6 +62,8 @@ pub fn validate_local_username(username: &str) -> Result<(), ValidationError> {
Ok(()) Ok(())
} }
pub const WALLET_CURRENCY_CODE: &str = "ETH";
/// Verifies that wallet address is valid ethereum address /// Verifies that wallet address is valid ethereum address
pub fn validate_wallet_address(wallet_address: &str) -> Result<(), ValidationError> { pub fn validate_wallet_address(wallet_address: &str) -> Result<(), ValidationError> {
// Address should be lowercase // Address should be lowercase