diff --git a/Cargo.lock b/Cargo.lock index 34dcddf..1c042b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -959,7 +959,7 @@ checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "nex-account" -version = "0.2.2" +version = "0.2.3" dependencies = [ "base64", "bytemuck", diff --git a/Cargo.toml b/Cargo.toml index 282b8b5..7bdbfaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nex-account" -version = "0.2.2" +version = "0.2.3" edition = "2024" publish = ["spbr"] diff --git a/src/lib.rs b/src/lib.rs index df88594..ebcb442 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,8 +12,12 @@ use spbr_common::crypto::encsign::{ self, EncSignKeypair, decrypt_and_check, encrypt_and_gen_signature_blocks, }; use thiserror::Error; +use tonic::transport::Channel; -use crate::Error::{FutureToken, KeypairUnset, PaddingNonzero, TokenExpired}; +use crate::{ + Error::{FutureToken, GrpcUrlNotSet, KeypairUnset, PaddingNonzero, TokenExpired}, + grpc::nex_account_service_client::NexAccountServiceClient, +}; pub mod grpc; @@ -62,6 +66,10 @@ pub enum Error { FutureToken, #[error("token expired")] TokenExpired, + #[error("NEX_ACCOUNT_GRPC_URL has not been set")] + GrpcUrlNotSet, + #[error("tonic transport error occurred: {0}")] + GrpcTonicTransportError(#[from] tonic::transport::Error), } type Result = result::Result; @@ -131,6 +139,18 @@ pub fn decode_nexact_token(data: &str) -> Result<(PID, NexKey)> { Ok((token_data.pid, token_data.nex_key)) } +static GRPC_URL: LazyLock> = + LazyLock::new(|| env::var("NEX_ACCOUNT_GRPC_URL").ok()?.parse().ok()); + +pub async fn grpc_client() -> Result> { + Ok( + grpc::nex_account_service_client::NexAccountServiceClient::connect( + GRPC_URL.as_ref().ok_or(GrpcUrlNotSet)?.as_str(), + ) + .await?, + ) +} + #[cfg(test)] mod test { use std::env::set_var; diff --git a/src/main.rs b/src/main.rs index 6a59a7a..1e074d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,15 +3,15 @@ use std::{ net::{Ipv4Addr, SocketAddr, SocketAddrV4}, }; +use crate::grpc::{ + ActCreateInfo, ActStageInfo, ActStageReturn, NexKey, Pid, + nex_account_service_server::{NexAccountService, NexAccountServiceServer}, +}; use log::error; +use md5::{Digest, Md5}; use simplelog::{Config, TerminalMode}; use sqlx::{PgPool, query}; use tonic::{Response, transport::Server}; -use crate::grpc::{ - ActCreateInfo, NexKey, Pid, ActStageInfo, ActStageReturn, - nex_account_service_server::{NexAccountService, NexAccountServiceServer}, -}; -use md5::{Digest, Md5}; pub mod grpc; @@ -84,8 +84,8 @@ impl NexAccountService for NexAccountServer { "#, request.pid ) - .fetch_optional(&self.pool) - .await; + .fetch_optional(&self.pool) + .await; match staged { Ok(Some(row)) => { @@ -103,15 +103,12 @@ impl NexAccountService for NexAccountServer { request.email, row.nex_key ) - .execute(&self.pool) - .await - .map_err(db_neverfail)?; + .execute(&self.pool) + .await + .map_err(db_neverfail)?; // deletion query - query!( - "delete from staged_nex_accounts where pid = $1", - pid - ) + query!("delete from staged_nex_accounts where pid = $1", pid) .execute(&self.pool) .await .map_err(db_neverfail)?; @@ -130,11 +127,11 @@ impl NexAccountService for NexAccountServer { "SELECT nex_key FROM nex_accounts WHERE pid = $1", request.pid ) - .fetch_one(&self.pool) - .await - .map_err(db_neverfail)?; + .fetch_one(&self.pool) + .await + .map_err(db_neverfail)?; - Ok(Response::new(NexKey { key: row.nex_key})) + Ok(Response::new(NexKey { key: row.nex_key })) } async fn get_nex_key_by_pid( @@ -179,11 +176,14 @@ impl NexAccountService for NexAccountServer { next_pid, &nex_key ) - .execute(&self.pool) - .await - .map_err(db_neverfail)?; + .execute(&self.pool) + .await + .map_err(db_neverfail)?; - Ok(Response::new(ActStageReturn{ pid: next_pid, nex_key: nex_key.into() })) + Ok(Response::new(ActStageReturn { + pid: next_pid, + nex_key: nex_key.into(), + })) } }