API
parent
a03ce26fa9
commit
338e1e1990
@ -0,0 +1,84 @@
|
||||
# this file is under GNU GPL 3.0, see LICENSE.txt
|
||||
# see LICENSE.txt
|
||||
|
||||
PREFIX=$(HOME)
|
||||
|
||||
BOOST_INCLUDE?=$(PREFIX)/include
|
||||
BOOST_LIB?=$(PREFIX)/lib
|
||||
|
||||
CRYPTOPP_INCLUDE?=$(PREFIX)/include
|
||||
CRYPTOPP_LIB?=$(PREFIX)/lib
|
||||
|
||||
OPENSSL_INCLUDE?=$(HOME)/include
|
||||
OPENSSL_LIB?=$(HOME)/lib
|
||||
|
||||
LIBZ_INCLUDE?=$(HOME)/include
|
||||
LIBZ_LIB?=$(HOME)/lib
|
||||
|
||||
ifeq ($(wildcard ../local.conf),../local.conf)
|
||||
-include ../local.conf
|
||||
endif
|
||||
|
||||
CXXFLAGS += -std=c++17 -O0 -g
|
||||
CXXFLAGS += -I$(BOOST_INCLUDE) -I$(CRYPTOPP_INCLUDE) -I$(OPENSSL_INCLUDE) -I$(LIBZ_INCLUDE)
|
||||
|
||||
LDFLAGS+=$(BOOST_LIB)/libboost_regex.a $(BOOST_LIB)/libboost_iostreams.a $(BOOST_LIB)/libboost_system.a
|
||||
LDFLAGS+=$(CRYPTOPP_LIB)/libcryptopp.a
|
||||
LDFLAGS+=$(OPENSSL_LIB)/libssl.a $(OPENSSL_LIB)/libcrypto.a
|
||||
LDFLAGS+=$(LIBZ_LIB)/libz.a
|
||||
|
||||
TARGET=libsignedpkg.a
|
||||
|
||||
SOURCE=$(wildcard *.cc)
|
||||
HEADERS=$(wildcard *.hh *.hxx)
|
||||
OBJECTS=$(subst .cc,.o,$(SOURCE))
|
||||
|
||||
WITHOUT_TESTS=$(patsubst test_%.o,,$(OBJECTS))
|
||||
|
||||
TESTSOURCE=$(wildcard test_*.cc)
|
||||
TESTOBJECTS=$(subst .cc,.o,$(TESTSOURCE))
|
||||
TESTS=$(subst .cc,,$(TESTSOURCE))
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
%.o: %.cc %.hh
|
||||
$(CXX) $(CXXFLAGS) -c $<
|
||||
|
||||
$(TARGET): $(WITHOUT_TESTS)
|
||||
ar -rc $@ $^
|
||||
|
||||
.PHONY: clean install uninstall test
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET) *.o *.a
|
||||
rm -f $(TESTS)
|
||||
|
||||
install: $(TARGET)
|
||||
-mkdir -p $(PREFIX)/include/pEp
|
||||
cp $(HEADERS) $(PREFIX)/include/pEp/
|
||||
cp $(TARGET) $(PREFIX)/lib/
|
||||
|
||||
uninstall:
|
||||
cd $(PREFIX)/include && rm -f $(HEADERS)
|
||||
cd $(PREFIX)/lib && rm -f $(TARGET)
|
||||
|
||||
test_%: test_%.o $(TARGET)
|
||||
$(CXX) $(LDFLAGS) $< $(TARGET) -o $@
|
||||
|
||||
test: $(TESTS)
|
||||
. run_tests.sh $(TESTS)
|
||||
|
||||
tags: $(SOURCE) $(HEADERS)
|
||||
ctags $(SOURCE) $(HEADERS)
|
||||
|
||||
local.conf:
|
||||
@echo PREFIX=$(PREFIX) > local.conf
|
||||
@echo >> local.conf
|
||||
@echo BOOST_INCLUDE=$(BOOST_INCLUDE) >> local.conf
|
||||
@echo BOOST_LIB=$(BOOST_LIB) >> local.conf
|
||||
@echo >> local.conf
|
||||
@echo CRYPTOPP_INCLUDE=$(CRYPTOPP_INCLUDE) >> local.conf
|
||||
@echo CRYPTOPP_LIB=$(CRYPTOPP_LIB) >> local.conf
|
||||
@echo >> local.conf
|
||||
@echo OPENSSL_INCLUDE=$(OPENSSL_INCLUDE) >> local.conf
|
||||
@echo OPENSSL_LIB=$(OPENSSL_LIB) >> local.conf
|
@ -0,0 +1,44 @@
|
||||
#include "unpack.hh"
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
namespace SignedPackage {
|
||||
static bool path_empty(std::string path)
|
||||
{
|
||||
if (!std::filesystem::exists(path))
|
||||
return true;
|
||||
return std::filesystem::is_empty(path);
|
||||
}
|
||||
|
||||
static void ensure_user_path(std::string path)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void install_if_location_empty(
|
||||
CryptoPP::PublicKey& deployment_key,
|
||||
CryptoPP::PrivateKey& provisioning_key,
|
||||
std::string pkg_path
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
void provision_system(
|
||||
pEp::UpdateClient::product p,
|
||||
pEp::UpdateClient::PublicKey update_key,
|
||||
CryptoPP::PublicKey& deployment_key,
|
||||
CryptoPP::PrivateKey& provisioning_key,
|
||||
pEp::notifyRead_t notifyRead,
|
||||
locations loc
|
||||
)
|
||||
{
|
||||
std::string path = loc["PER_USER_DIRECTORY"];
|
||||
|
||||
// do not provision systems, which formerly were used
|
||||
if (!path_empty(path))
|
||||
return;
|
||||
|
||||
std::string pkg_path = pEp::UpdateClient::update(p, update_key, notifyRead);
|
||||
install_if_location_empty(deployment_key, provisioning_key, pkg_path);
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
#ifndef SP_UNPACK
|
||||
#define SP_UNPACK
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
#include <pEp/pEpEngine.h>
|
||||
#include <pEp/downloadclient.hh>
|
||||
|
||||
namespace SignedPackage {
|
||||
// locations maps installation location name to actual POSIX path
|
||||
typedef std::map< std::string, std::string > locations;
|
||||
|
||||
const locations pEp_locations = {
|
||||
{ "PER_USER_DIRECTORY", ::per_user_directory() },
|
||||
{ "PER_MACHINE_DIRECTORY", ::per_machine_directory() }
|
||||
};
|
||||
|
||||
void install_if_location_empty(
|
||||
CryptoPP::PublicKey& deployment_key,
|
||||
CryptoPP::PrivateKey& provisioning_key,
|
||||
std::string pkg_path
|
||||
);
|
||||
|
||||
void provision_system(
|
||||
pEp::UpdateClient::product p,
|
||||
pEp::UpdateClient::PublicKey update_key,
|
||||
CryptoPP::PublicKey& deployment_key,
|
||||
CryptoPP::PrivateKey& provisioning_key,
|
||||
pEp::notifyRead_t notifyRead = nullptr,
|
||||
locations loc = pEp_locations
|
||||
);
|
||||
}
|
||||
|
||||
#endif // SP_UNPACK
|
Loading…
Reference in New Issue