You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.6 KiB

#include <data.hpp>
#include <fstream>
#include <iostream>
#include <unistd.h>
fs::path &data::get_data_path() {
static fs::path p("");
if (p.native().length() != 0) {
return p;
}
const int uid = getuid();
if (uid == 0) {
p = fs::path("/") / "var" / "lib" / "store";
} else if (const auto ptr = std::getenv("HOME")) {
p = fs::path(ptr) / ".local" / "lib" / "store";
}
return p;
}
data::data() : json(json::object()) {
if (!fs::exists(get_data_path())) {
create_data_directory();
}
const auto data_file = get_store_path();
if (!fs::exists(data_file)) {
try {
std::ofstream f(data_file);
f << json::object();
} catch (const std::exception &e) {
std::cerr << "Could not create config file:\n" << e.what() << std::endl;
}
}
}
void data::create_data_directory() {
std::error_code ec;
fs::create_directories(get_data_path(), ec);
if (ec) {
std::cerr << "Unable to create configuration directory:\n" << ec.message();
}
}
fs::path data::get_store_path() { return get_data_path() / "store.json"; }
5 years ago
json data::process(const json &input) {
if (!validate(input)) {
return nullptr;
}
return input;
5 years ago
}
bool data::validate(const json &input) {
const std::string name = input.value("name", "");
const std::string address = input.value("address", "");
const std::string phone = input.value("phone", "");
const std::string email = input.value("email", "");
const std::vector<std::string> strings{name, address, phone, email};
for (const auto &f : strings) {
if (f.size() == 0) {
return false;
}
}
return true;
}