rename source file; fix argument parsing;

This commit is contained in:
Greg Gauthier 2020-11-07 09:52:46 +00:00
parent 8a342387f6
commit bde4be616f
2 changed files with 23 additions and 11 deletions

View File

@ -3,4 +3,4 @@ project(passwdgen)
set(CMAKE_CXX_STANDARD 20)
add_executable(passwdgen main.cpp)
add_executable(passwdgen passwdgen.cpp)

View File

@ -1,6 +1,12 @@
//
// passwdgen.cpp
// Created by Greg Gauthier on 2020.10.22.
//
#include <iostream>
#include <random>
std::string random_string(std::size_t length, bool punc) {
std::string CHARACTERS;
std::string ALPHANUM = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
@ -13,7 +19,7 @@ std::string random_string(std::size_t length, bool punc) {
}
std::random_device random_device;
std::mt19937 generator(random_device());
std::uniform_int_distribution<> distribution(0, CHARACTERS.size() - 1);
std::uniform_int_distribution<> distribution(0.0, CHARACTERS.size() - 1.0);
std::string random_string;
for (std::size_t i = 0; i < length; ++i) {
@ -25,15 +31,15 @@ std::string random_string(std::size_t length, bool punc) {
void show_usage(std::string binname) {
std::cerr << "Usage: " << binname << " [OPTIONS] " << std::endl
<< "Options:" << std::endl
<< "\t-h, --help \t\tShow this help message" << std::endl
<< "\t-l, --length \t\tThe length of the password (default: 32)" << std::endl
<< "\t-h, --help \t\tShow this help message" << std::endl
<< "\t-l, --length [n] \t\tThe length of the password (default: 32)" << std::endl
<< "\t-p, --punctuation \t\tToggle special characters (default: false)"
<< std::endl;
}
int main(int argc, char *argv[]) {
std::string passlenstr;
int passlen;
int passlen = 0;
bool punc = false;
if (argc < 1) {
@ -48,18 +54,24 @@ int main(int argc, char *argv[]) {
} else if (arg == "-p") {
punc = true;
} else if ((arg == "-l") || (arg == "--length")) {
passlenstr = argv[i + 1];
if (passlenstr.empty()) {
std::cerr << "--destination option requires one argument." << std::endl;
if (not argv[i +1]) {
std::cerr << "Specify a password length" << std::endl;
return 1;
} else {
passlenstr = argv[i + 1];
try {
passlen = std::stoi(passlenstr);
} catch (const std::invalid_argument& e){
std::cerr << "Length must be a valid integer" << std::endl;
return 1;
}
}
}
}
if (passlenstr.empty()) {
passlenstr = "32";
if (passlen == 0) {
passlen = 32;
}
passlen = std::stoi(passlenstr);
std::string password = random_string(passlen, punc);
std::cout << password << std::endl;
return 0;