implement flags -h -g -d -i -l p

This commit is contained in:
Nikola Petrov
2023-08-14 14:14:44 +02:00
parent 07cabde693
commit 17d1a27640
9 changed files with 376 additions and 143 deletions

View File

@@ -1,49 +1,28 @@
#pragma once
#include <cstdint>
class Buffer
{
public:
unsigned char* buffer = nullptr;
int taken = 0;
int size = 0;
Buffer(int size)
{
this->size = size;
this->buffer = new unsigned char[size];
}
uint8_t* buffer = nullptr;
size_t taken = 0;
size_t size = 0;
Buffer() {
size = 0;
buffer = nullptr;
}
Buffer(size_t size);
Buffer();
~Buffer();
bool resize(size_t new_size);
void add(uint8_t* data, size_t data_size);
~Buffer()
{
if (buffer) delete[] buffer;
}
// Removes data from buffer without checking if it's in the buffer
void remove_fast(uint8_t* data, size_t data_size);
void resize(int new_size)
{
unsigned char* new_buffer = (unsigned char*)realloc(buffer, new_size);
if (!new_buffer)
{
printf_s("Error resizing buffer\n");
return;
}
void remove(size_t index, size_t data_size);
buffer = new_buffer;
size = new_size;
}
size_t find(uint8_t* data, size_t data_size);
void add(void* data, int data_size)
{
if (taken + data_size > size)
{
resize(size + data_size);
}
memcpy_s(buffer + taken, size - taken, data, data_size);
taken += data_size;
}
void remove(uint8_t* data, size_t data_size);
void clear() { taken = 0; }
};

View File

@@ -5,87 +5,31 @@
struct Pass
{
char label[20];
char password[20];
char label[21];
char password[21];
Pass()
{
memset(label, 0, 20);
memset(password, 0, 20);
};
Pass() = default;
};
bool find_password(Buffer* buff, char* label, char* password)
enum class Args
{
Pass* passwords = (Pass*)buff->buffer;
Get, // get password for label
Generate, // generate password for label
List, // list all labels
Delete, // delete password for label
Print_all_p, // print all passwords
Input, // input password for label
Error // error
};
for (int i = 0; i < buff->taken / sizeof(Pass); i++)
{
if (!strcmp(passwords[i].label, label))
{
strcpy_s(password, 20, passwords[i].password);
return true;
}
}
return false;
}
Pass* find_password(Buffer* buff, char* label);
void generate_password(char* password)
{
srand(time(NULL));
char characters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_-+={[}]|:;<,>.?";
for (int i = 0; i < 15; i++)
{
password[i] = characters[rand() % (sizeof(characters) - 1)];
}
password[15] = '\0';
}
void generate_password(char* password);
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 save_buffer_to_file(Buffer* buffer);
bool load_buffer_from_file(Buffer* buffer)
{
bool load_buffer_from_file(Buffer* buffer);
std::ifstream file("passwords.bin", std::ios::binary);
if (!file.is_open()) return false;
void print_usage();
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(" Flags:\n\n");
printf_s(" -h\t\t\tprint this message WIP\n");
printf_s(" <label>\t\tget password of this label\n");
printf_s(" -g <label>\t\tgenerate or update password of this label WIP [update]\n");
printf_s(" -l\t\t\tlist all labels WIP\n");
printf_s(" -d <label>\t\tdelete password of this label WIP \n");
printf_s(" -c\t\t\tclear all passwords WIP\n");
printf_s(" -p\t\t\tprint all passwords WIP\n");
}
Args get_args(int argc, char** argv, char** label);