diff options
author | Yigit Sever | 2021-04-26 22:28:17 +0300 |
---|---|---|
committer | Yigit Sever | 2021-04-26 22:28:17 +0300 |
commit | 19f52705f18ad2a72e999e5038f30b479ca90035 (patch) | |
tree | a802f2a4e7ab87eb7605c364f714da2db6b86d11 /src/handlers.rs | |
parent | ba9bebf02ac4b847e41178281d29d4b9fd3f574d (diff) | |
download | gradecoin-19f52705f18ad2a72e999e5038f30b479ca90035.tar.gz gradecoin-19f52705f18ad2a72e999e5038f30b479ca90035.tar.bz2 gradecoin-19f52705f18ad2a72e999e5038f30b479ca90035.zip |
Write guys to file
Diffstat (limited to 'src/handlers.rs')
-rw-r--r-- | src/handlers.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index 349d03b..2dcdafb 100644 --- a/src/handlers.rs +++ b/src/handlers.rs | |||
@@ -400,7 +400,7 @@ pub async fn propose_block( | |||
400 | let res_json = warp::reply::json(&GradeCoinResponse { | 400 | let res_json = warp::reply::json(&GradeCoinResponse { |
401 | res: ResponseType::Error, | 401 | res: ResponseType::Error, |
402 | message: format!( | 402 | message: format!( |
403 | "There should be at least {} transaction in the block", | 403 | "There should be at least {} transactions in the block", |
404 | BLOCK_TRANSACTION_COUNT | 404 | BLOCK_TRANSACTION_COUNT |
405 | ), | 405 | ), |
406 | }); | 406 | }); |
@@ -411,17 +411,18 @@ pub async fn propose_block( | |||
411 | // proposer (first transaction fingerprint) checks | 411 | // proposer (first transaction fingerprint) checks |
412 | let pending_transactions = db.pending_transactions.upgradable_read(); | 412 | let pending_transactions = db.pending_transactions.upgradable_read(); |
413 | 413 | ||
414 | // we get the proposers fingerprint by finding the transaction (id) then extracting the source | ||
414 | let internal_user_fingerprint = match pending_transactions.get(&new_block.transaction_list[0]) { | 415 | let internal_user_fingerprint = match pending_transactions.get(&new_block.transaction_list[0]) { |
415 | Some(coinbase) => &coinbase.source, | 416 | Some(coinbase) => &coinbase.source, |
416 | None => { | 417 | None => { |
417 | debug!( | 418 | debug!( |
418 | "Block proposer with public key signature {:?} is not found in the database", | 419 | "Transaction with id {} is not found in the pending_transactions", |
419 | new_block.transaction_list[0] | 420 | new_block.transaction_list[0] |
420 | ); | 421 | ); |
421 | 422 | ||
422 | let res_json = warp::reply::json(&GradeCoinResponse { | 423 | let res_json = warp::reply::json(&GradeCoinResponse { |
423 | res: ResponseType::Error, | 424 | res: ResponseType::Error, |
424 | message: "Proposer of the first transaction is not found in the system".to_owned(), | 425 | message: "First transaction in the block is not found in the system".to_owned(), |
425 | }); | 426 | }); |
426 | 427 | ||
427 | return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST)); | 428 | return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST)); |
@@ -584,6 +585,23 @@ pub async fn propose_block( | |||
584 | } | 585 | } |
585 | } | 586 | } |
586 | } | 587 | } |
588 | |||
589 | // just update everyone's .guy file | ||
590 | for (fp, guy) in users_store.iter() { | ||
591 | if !guy.is_bot { | ||
592 | let user_at_rest_json = serde_json::to_string(&UserAtRest { | ||
593 | fingerprint: fp.clone(), | ||
594 | user: User { | ||
595 | user_id: guy.user_id.clone(), | ||
596 | public_key: guy.public_key.clone(), | ||
597 | balance: guy.balance, | ||
598 | is_bot: false, | ||
599 | }, | ||
600 | }) | ||
601 | .unwrap(); | ||
602 | fs::write(format!("users/{}.guy", guy.user_id), user_at_rest_json).unwrap(); | ||
603 | } | ||
604 | } | ||
587 | } | 605 | } |
588 | 606 | ||
589 | let block_json = serde_json::to_string(&new_block).unwrap(); | 607 | let block_json = serde_json::to_string(&new_block).unwrap(); |
@@ -658,7 +676,7 @@ pub async fn propose_transaction( | |||
658 | )); | 676 | )); |
659 | } | 677 | } |
660 | 678 | ||
661 | // `internal_user` is an authenticated student, can propose | 679 | // `internal_user` is an authenticated student and not a bot, can propose |
662 | 680 | ||
663 | // This public key was already written to the database, we can panic if it's not valid at | 681 | // This public key was already written to the database, we can panic if it's not valid at |
664 | // *this* point | 682 | // *this* point |
@@ -827,8 +845,8 @@ fn authorize_proposer(jwt_token: String, user_pem: &str) -> Result<TokenData<Cla | |||
827 | Ok(key) => key, | 845 | Ok(key) => key, |
828 | Err(j) => { | 846 | Err(j) => { |
829 | warn!( | 847 | warn!( |
830 | "user has invalid RSA key we should crash and burn here {:?}", | 848 | "given RSA key {} is invalid, we should crash and burn here {:?}", |
831 | j | 849 | user_pem, j |
832 | ); | 850 | ); |
833 | return Err(String::from("This User's RSA key is invalid")); | 851 | return Err(String::from("This User's RSA key is invalid")); |
834 | } | 852 | } |
@@ -852,7 +870,7 @@ fn authorize_proposer(jwt_token: String, user_pem: &str) -> Result<TokenData<Cla | |||
852 | return Err(String::from("This token has expired")); | 870 | return Err(String::from("This token has expired")); |
853 | } | 871 | } |
854 | _ => { | 872 | _ => { |
855 | warn!("AN UNSPECIFIED ERROR: {:?}", err); | 873 | warn!("AN UNSPECIFIED ERROR: {:?} key was {}", err, user_pem); |
856 | return Err(format!("JWT Error: {}", err)); | 874 | return Err(format!("JWT Error: {}", err)); |
857 | } | 875 | } |
858 | }, | 876 | }, |