From 839f60724d8d19ef7d6e5271a7ae06ff87dce8fa Mon Sep 17 00:00:00 2001 From: Erin Nova Date: Fri, 16 Jul 2021 14:13:21 -0400 Subject: [PATCH] Check if new name is already taken before changing --- src/main.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6597119..6d8c766 100644 --- a/src/main.rs +++ b/src/main.rs @@ -152,7 +152,7 @@ fn check_pin(name: &str, pin: i32) -> String { return format!("User {} does not exist.", name.to_string()); } -// Change a users pin +// Change a users pin/name #[post("/api/users/change////")] fn change(name: &str, pin: i32, new_name: &str, new_pin: i32) -> String { let mut users: Vec = read_json(); @@ -162,10 +162,24 @@ fn change(name: &str, pin: i32, new_name: &str, new_pin: i32) -> String { for i in 0..users.len() { if users[i].name == name { // make sure name exists if users[i].pin_hashed == hashed_pin_input { // check if pin is correct - users[i].name = new_name.to_string(); - users[i].pin_hashed = sha1::Sha1::from(&new_pin.to_string()).digest().to_string(); - write_json(&users); - return format!("User previously known as {} is now called {}. New pin hash is {}.", name.to_string(), users[i].name.to_string(), users[i].pin_hashed); + // Check wether to change name or name+pin + if users[i].name == new_name { + users[i].pin_hashed = sha1::Sha1::from(&new_pin.to_string()).digest().to_string(); + write_json(&users); + return format!("User {}'s new pin hash is {}.", name.to_string(), users[i].pin_hashed); + } else { + // check if new name already exists + for n in &users { + if n.name == new_name { + return format!("New name {} is already taken!", new_name); + } else { + users[i].name = new_name.to_string(); + users[i].pin_hashed = sha1::Sha1::from(&new_pin.to_string()).digest().to_string(); + write_json(&users); + return format!("User previously known as {} is now {}. Pin hash, if different, is {}", name.to_string(), users[i].name.to_string(), users[i].pin_hashed.to_string()); + } + } + } } else { return format!("Incorrect pin for user {}!", name.to_string()); }