Browse Source

working data store

master
Jørgen Sverre Lien Sellæg 5 years ago
parent
commit
b86696cdd7
  1. 14
      include/data.hpp
  2. 2
      include/store.hpp
  3. 43
      src/data.cpp

14
include/data.hpp

@ -0,0 +1,14 @@
#pragma once
#include <experimental/filesystem>
#include <json.hpp>
namespace fs = std::experimental::filesystem;
class data : public json {
fs::path &get_data_path();
void create_data_directory();
fs::path get_store_path();
public:
data();
};

2
include/store.hpp

@ -1,9 +1,11 @@
#pragma once #pragma once
#include <data.hpp>
#include <json.hpp> #include <json.hpp>
#include <web_server.hpp> #include <web_server.hpp>
class Application { class Application {
HttpServer http_server; HttpServer http_server;
data dat;
static void web_server_started(std::size_t port); static void web_server_started(std::size_t port);
static void secure_web_server_started(std::size_t port); static void secure_web_server_started(std::size_t port);

43
src/data.cpp

@ -0,0 +1,43 @@
#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"; }
Loading…
Cancel
Save