2015-10-29 10:47:14 +01:00
|
|
|
#pragma once
|
2019-01-19 22:02:41 +01:00
|
|
|
#ifndef MESSMER_CRYFSCLI_CLI_H
|
|
|
|
#define MESSMER_CRYFSCLI_CLI_H
|
2015-10-29 10:47:14 +01:00
|
|
|
|
|
|
|
#include "program_options/ProgramOptions.h"
|
2016-02-23 21:07:23 +01:00
|
|
|
#include <cryfs/config/CryConfigFile.h>
|
2015-10-29 10:47:14 +01:00
|
|
|
#include <boost/filesystem/path.hpp>
|
2016-02-11 16:39:42 +01:00
|
|
|
#include <cpp-utils/tempfile/TempFile.h>
|
|
|
|
#include <cpp-utils/io/Console.h>
|
|
|
|
#include <cpp-utils/random/RandomGenerator.h>
|
|
|
|
#include <cpp-utils/network/HttpClient.h>
|
2016-02-19 02:10:10 +01:00
|
|
|
#include <cryfs/filesystem/CryDevice.h>
|
2015-11-13 00:06:53 +01:00
|
|
|
#include "CallAfterTimeout.h"
|
2016-06-27 01:53:10 +02:00
|
|
|
#include <cryfs/config/CryConfigLoader.h>
|
2018-02-02 01:08:01 +01:00
|
|
|
#include <cryfs/ErrorCodes.h>
|
2015-10-29 10:47:14 +01:00
|
|
|
|
2019-01-19 22:02:41 +01:00
|
|
|
namespace cryfs_cli {
|
2015-10-29 10:47:14 +01:00
|
|
|
class Cli final {
|
|
|
|
public:
|
2018-10-22 04:31:08 +02:00
|
|
|
Cli(cpputils::RandomGenerator &keyGenerator, const cpputils::SCryptSettings& scryptSettings, std::shared_ptr<cpputils::Console> console);
|
2018-12-09 18:27:53 +01:00
|
|
|
int main(int argc, const char *argv[], cpputils::unique_ref<cpputils::HttpClient> httpClient, std::function<void()> onMounted);
|
2015-10-29 10:47:14 +01:00
|
|
|
|
|
|
|
private:
|
2017-09-30 19:53:03 +02:00
|
|
|
void _checkForUpdates(cpputils::unique_ref<cpputils::HttpClient> httpClient);
|
2018-12-09 18:27:53 +01:00
|
|
|
void _runFilesystem(const program_options::ProgramOptions &options, std::function<void()> onMounted);
|
2019-01-19 22:02:41 +01:00
|
|
|
cryfs::CryConfigLoader::ConfigLoadResult _loadOrCreateConfig(const program_options::ProgramOptions &options, const cryfs::LocalStateDir& localStateDir);
|
|
|
|
void _checkConfigIntegrity(const boost::filesystem::path& basedir, const cryfs::LocalStateDir& localStateDir, const cryfs::CryConfigFile& config, bool allowReplacedFilesystem);
|
|
|
|
boost::optional<cryfs::CryConfigLoader::ConfigLoadResult> _loadOrCreateConfigFile(boost::filesystem::path configFilePath, cryfs::LocalStateDir localStateDir, const boost::optional<std::string> &cipher, const boost::optional<uint32_t> &blocksizeBytes, bool allowFilesystemUpgrade, const boost::optional<bool> &missingBlockIsIntegrityViolation, bool allowReplacedFilesystem);
|
2015-11-03 21:22:35 +01:00
|
|
|
boost::filesystem::path _determineConfigFile(const program_options::ProgramOptions &options);
|
2018-09-04 01:51:59 +02:00
|
|
|
static std::function<std::string()> _askPasswordForExistingFilesystem(std::shared_ptr<cpputils::Console> console);
|
|
|
|
static std::function<std::string()> _askPasswordForNewFilesystem(std::shared_ptr<cpputils::Console> console);
|
|
|
|
static std::function<std::string()> _askPasswordNoninteractive(std::shared_ptr<cpputils::Console> console);
|
|
|
|
static bool _confirmPassword(cpputils::Console* console, const std::string &password);
|
2015-11-19 10:08:09 +01:00
|
|
|
static bool _checkPassword(const std::string &password);
|
2017-09-30 19:53:03 +02:00
|
|
|
void _showVersion(cpputils::unique_ref<cpputils::HttpClient> httpClient);
|
2015-11-03 21:22:35 +01:00
|
|
|
void _initLogfile(const program_options::ProgramOptions &options);
|
|
|
|
void _sanityChecks(const program_options::ProgramOptions &options);
|
|
|
|
void _checkMountdirDoesntContainBasedir(const program_options::ProgramOptions &options);
|
|
|
|
bool _pathContains(const boost::filesystem::path &parent, const boost::filesystem::path &child);
|
2019-01-19 22:02:41 +01:00
|
|
|
void _checkDirAccessible(const boost::filesystem::path &dir, const std::string &name, cryfs::ErrorCode errorCode);
|
|
|
|
std::shared_ptr<cpputils::TempFile> _checkDirWriteable(const boost::filesystem::path &dir, const std::string &name, cryfs::ErrorCode errorCode);
|
|
|
|
void _checkDirReadable(const boost::filesystem::path &dir, std::shared_ptr<cpputils::TempFile> tempfile, const std::string &name, cryfs::ErrorCode errorCode);
|
2015-11-13 00:06:53 +01:00
|
|
|
boost::optional<cpputils::unique_ref<CallAfterTimeout>> _createIdleCallback(boost::optional<double> minutes, std::function<void()> callback);
|
2019-01-19 22:02:41 +01:00
|
|
|
void _sanityCheckFilesystem(cryfs::CryDevice *device);
|
2015-11-03 21:22:35 +01:00
|
|
|
|
2016-02-21 01:34:21 +01:00
|
|
|
|
2015-11-03 21:22:35 +01:00
|
|
|
cpputils::RandomGenerator &_keyGenerator;
|
2015-11-04 05:27:00 +01:00
|
|
|
cpputils::SCryptSettings _scryptSettings;
|
2016-01-25 15:01:34 +01:00
|
|
|
std::shared_ptr<cpputils::Console> _console;
|
2016-02-21 01:34:21 +01:00
|
|
|
bool _noninteractive;
|
2018-12-03 07:57:21 +01:00
|
|
|
boost::optional<cpputils::unique_ref<CallAfterTimeout>> _idleUnmounter;
|
2019-01-19 22:02:41 +01:00
|
|
|
boost::optional<cpputils::unique_ref<cryfs::CryDevice>> _device;
|
2015-11-27 14:06:17 +01:00
|
|
|
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Cli);
|
2015-10-29 10:47:14 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|