Added Home Screen & Password Generator
This commit is contained in:
parent
c136b491e4
commit
a902cdd0ae
4 changed files with 136 additions and 10 deletions
|
@ -5,4 +5,5 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
|
rand = "0.8.5"
|
||||||
ring = "0.17.8"
|
ring = "0.17.8"
|
||||||
|
|
|
@ -42,3 +42,60 @@ pub fn int_reg() -> (String, String) {
|
||||||
return (username, password);
|
return (username, password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn int_welcome(username: &String) -> String {
|
||||||
|
// Variables
|
||||||
|
let mut user_input: String = String::new();
|
||||||
|
|
||||||
|
// Welcome message
|
||||||
|
println!("\n - RUSTYPASS - ");
|
||||||
|
println!("Welcome, {}!", username);
|
||||||
|
println!("Please select one of the following options: ");
|
||||||
|
println!("\n1) View a Password");
|
||||||
|
println!("2) Create a Password");
|
||||||
|
println!("3) Generate a Password");
|
||||||
|
println!("4) Quit");
|
||||||
|
io::stdin().read_line(&mut user_input).expect("Failed to read line");
|
||||||
|
|
||||||
|
// Returning what the user said
|
||||||
|
return String::from(user_input.trim());
|
||||||
|
}
|
||||||
|
pub fn int_gen() -> (u32, bool, bool) {
|
||||||
|
// Variables
|
||||||
|
let mut raw_pass_len: String = String::new();
|
||||||
|
let mut raw_pass_num: String = String::new();
|
||||||
|
let mut raw_pass_spe: String = String::new();
|
||||||
|
|
||||||
|
// Asking the user the big questions
|
||||||
|
println!(" - Password Generator - ");
|
||||||
|
println!("Before we give you a password, just a few questions!");
|
||||||
|
println!("How long should your password be?");
|
||||||
|
println!("Select size[number]: ");
|
||||||
|
io::stdin().read_line(&mut raw_pass_len).expect("Failed to read line.");
|
||||||
|
println!("Would you like numbers to be included in your password?");
|
||||||
|
println!("Select option[y/n]: ");
|
||||||
|
io::stdin().read_line(&mut raw_pass_num).expect("Failed to read line.");
|
||||||
|
println!("Would you like special characters to be included in your password?");
|
||||||
|
println!("Select option[y/n]: ");
|
||||||
|
io::stdin().read_line(&mut raw_pass_spe).expect("Failed to read line.");
|
||||||
|
|
||||||
|
// Converting the stuff
|
||||||
|
let pass_len: u32 = raw_pass_len.trim().parse().unwrap();
|
||||||
|
let str_pass_num: String = String::from(raw_pass_num.to_lowercase().trim());
|
||||||
|
let str_pass_spe: String = String::from(raw_pass_spe.to_lowercase().trim());
|
||||||
|
|
||||||
|
// Y/N to bool:
|
||||||
|
let pass_num: bool = if str_pass_num == "y" {
|
||||||
|
true
|
||||||
|
} else{
|
||||||
|
false
|
||||||
|
};
|
||||||
|
let pass_spe: bool = if str_pass_spe == "y" {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returning all of the values
|
||||||
|
return (pass_len, pass_num, pass_spe);
|
||||||
|
}
|
52
src/main.rs
52
src/main.rs
|
@ -1,31 +1,63 @@
|
||||||
// Libraries
|
// Libraries
|
||||||
mod interface;
|
mod interface;
|
||||||
mod resource;
|
mod resource;
|
||||||
|
mod manager;
|
||||||
mod secure;
|
mod secure;
|
||||||
mod auth;
|
mod auth;
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
|
fn stage_authorize(auth_profile: &mut auth::Auth) {
|
||||||
// Entry-Point
|
|
||||||
fn main() {
|
|
||||||
// Variables
|
|
||||||
let auth_profile: auth::Auth;
|
|
||||||
|
|
||||||
// Checking if we need to register or log in
|
// Checking if we need to register or log in
|
||||||
if auth::Auth::exists() {
|
if auth::Auth::exists() {
|
||||||
// Asking user for login credentials
|
// Asking user for login credentials
|
||||||
let (username, password) = interface::int_auth();
|
let (username, password) = interface::int_auth();
|
||||||
|
|
||||||
// Verify the user
|
// Verify the user
|
||||||
auth_profile = auth::Auth::authenticate(username, password);
|
*auth_profile = auth::Auth::authenticate(username, password);
|
||||||
} else {
|
} else {
|
||||||
// Asking user for register credentials
|
// Asking user for register credentials
|
||||||
let (username, password) = interface::int_reg();
|
let (username, password) = interface::int_reg();
|
||||||
|
|
||||||
// Creating the user
|
// Creating the user
|
||||||
auth_profile = auth::Auth::create(username, password);
|
*auth_profile = auth::Auth::create(username, password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn stage_manager(auth_profile: &mut auth::Auth) {
|
||||||
|
// Loop
|
||||||
|
loop {
|
||||||
|
// What page shall we go to?
|
||||||
|
let page: String = interface::int_welcome(&auth_profile.username);
|
||||||
|
|
||||||
|
// New line
|
||||||
|
println!("\n");
|
||||||
|
|
||||||
|
// Deciding what page we are on
|
||||||
|
if page == "4" {
|
||||||
|
println!("Goodbye, {}!", auth_profile.username);
|
||||||
|
break;
|
||||||
|
} else if page == "3" {
|
||||||
|
let (pass_len, pass_num, pass_spe) = interface::int_gen();
|
||||||
|
let gen_pass: String = manager::Manager::password_generate(pass_len, pass_num, pass_spe);
|
||||||
|
println!("Your password is: {}", gen_pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry-Point
|
||||||
|
fn main() {
|
||||||
|
// Authorizing User
|
||||||
|
let mut auth_profile: auth::Auth = auth::Auth{verified: false, username: String::from("ERROR")};
|
||||||
|
while !auth_profile.verified {
|
||||||
|
stage_authorize(&mut auth_profile);
|
||||||
|
|
||||||
|
// Before going to the accounts page, check if the auth failed
|
||||||
|
if !auth_profile.verified {
|
||||||
|
println!("\nPlease try again!\n");
|
||||||
|
} else {break;}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG: Testing if the user is authenticated
|
println!("");
|
||||||
println!("Authenticated Status: {}", auth_profile.verified);
|
|
||||||
|
// Passwords interface
|
||||||
|
stage_manager(&mut auth_profile);
|
||||||
}
|
}
|
36
src/manager.rs
Normal file
36
src/manager.rs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
// Libraries
|
||||||
|
use rand::Rng;
|
||||||
|
|
||||||
|
// Structs
|
||||||
|
pub struct Manager{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implementations
|
||||||
|
impl Manager {
|
||||||
|
pub fn password_generate(length: u32, numbers: bool, special: bool) -> String {
|
||||||
|
// Variables
|
||||||
|
let mut result: String = String::new();
|
||||||
|
let mut possible_characters: String = String::new();
|
||||||
|
|
||||||
|
// Making lists of possibilities
|
||||||
|
let ascii_letters: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
let ascii_numbers: &str = "1234567890";
|
||||||
|
let ascii_special: &str = "!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~";
|
||||||
|
|
||||||
|
// Putting everything together!
|
||||||
|
possible_characters += ascii_letters;
|
||||||
|
if numbers {possible_characters += ascii_numbers;}
|
||||||
|
if special {possible_characters += ascii_special;}
|
||||||
|
|
||||||
|
// Creating the password!
|
||||||
|
for _ in 0..length {
|
||||||
|
let rand_index: usize = rand::thread_rng().gen_range(0..=possible_characters.len());
|
||||||
|
let rand_character: char = possible_characters.chars().nth(rand_index).unwrap();
|
||||||
|
result += &rand_character.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Giving back the result
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue