#include "func.h" #include "glob.h" Pass* find_password(Buffer* buff, char* label) { Pass* passwords = (Pass*)buff->buffer; for (int i = 0; i < buff->taken / sizeof(Pass); i++) { if (glob(label, passwords[i].label) == Glob_Result::MATCHED) { return &passwords[i]; } } return nullptr; } void generate_password(char* password) { srand(time(NULL)); char characters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_-+={[}]|:;<,>.?"; for (int i = 0; i < MAX_STRING_SIZE; i++) { password[i] = characters[rand() % (sizeof(characters) - 1)]; } password[MAX_STRING_SIZE - 1] = '\0'; } bool save_buffer_to_file(Buffer* buffer) { std::ofstream file("passwords.bin", std::ios::binary); if (!file.is_open()) { printf_s("Error saving file\n"); return false; } file.write((char*)buffer->buffer, buffer->taken); file.close(); return true; } bool load_buffer_from_file(Buffer* buffer) { std::ifstream file("passwords.bin", std::ios::binary); if (!file.is_open()) return false; file.seekg(0, std::ios::end); buffer->resize(file.tellg()); file.seekg(0, std::ios::beg); file.read((char*)buffer->buffer, buffer->size); if (file) buffer->taken = buffer->size; else buffer->taken = file.gcount(); file.close(); return true; } void print_usage() { printf_s(" Usage:\n\n"); printf_s(" password_manager.exe [flags]\n\n"); printf_s(" Note: <label> max len %d char\n\n", MAX_STRING_SIZE); printf_s(" Flags:\n\n"); printf_s(" -h \t print this message\n"); printf_s(" <label> \t get password of this label can use GLOB\n"); printf_s(" -g <label> \t generate or update password of this label\n"); printf_s(" -d <label> \t delete password of this label\n"); printf_s(" -i <label> \t input password for this label max %d char\n", MAX_STRING_SIZE); printf_s(" -s <label> \t show password for this label\n"); printf_s(" -l \t list all labels\n"); printf_s(" -p \t print all passwords\n"); printf_s(" -c \t change master password\n"); } Args get_args(int argc, char** argv, char** label) { if (argc < 2) { print_usage(); return Args::Error; } if (!strcmp("-h", argv[1])) { print_usage(); return Args::Error; } if (!strcmp("-l", argv[1])) return Args::List; if (!strcmp("-p", argv[1])) return Args::Print_all_p; if (!strcmp("-c", argv[1])) return Args::Change; if (argc < 3) { *label = argv[1]; return Args::Get; } *label = argv[2]; if (!strcmp("-g", argv[1])) return Args::Generate; if (!strcmp("-d", argv[1])) return Args::Delete; if (!strcmp("-i", argv[1])) return Args::Input; if (!strcmp("-s", argv[1])) return Args::Show; return Args::Error; }