#pragma once #ifndef MESSMER_CRYFSCLI_CLI_H #define MESSMER_CRYFSCLI_CLI_H #include #include "program_options/ProgramOptions.h" #include #include #include #include #include #include #include #include #include #include "CallAfterTimeout.h" #include #include namespace cryfs_cli { class Cli final { public: struct Credentials { boost::optional password; SizedData givenHash; SizedData* returnedHash; }; Cli(cpputils::RandomGenerator &keyGenerator, const cpputils::SCryptSettings& scryptSettings); fspp::fuse::Fuse* initFilesystem(const program_options::ProgramOptions &options, Credentials credentials); private: cryfs::CryConfigLoader::ConfigLoadResult _loadOrCreateConfig(const program_options::ProgramOptions &options, const cryfs::LocalStateDir& localStateDir, Credentials credentials); void _checkConfigIntegrity(const boost::filesystem::path& basedir, const cryfs::LocalStateDir& localStateDir, const cryfs::CryConfigFile& config, bool allowReplacedFilesystem); cpputils::unique_ref _createKeyProvider(Credentials credentials); cpputils::either _loadOrCreateConfigFile(boost::filesystem::path configFilePath, cryfs::LocalStateDir localStateDir, Credentials credentials, const boost::optional &cipher, const boost::optional &blocksizeBytes, bool allowFilesystemUpgrade, const boost::optional &missingBlockIsIntegrityViolation, bool allowReplacedFilesystem); boost::filesystem::path _determineConfigFile(const program_options::ProgramOptions &options); void _sanityChecks(const program_options::ProgramOptions &options); void _checkDirAccessible(const boost::filesystem::path &dir, const std::string &name, bool createMissingDir, cryfs::ErrorCode errorCode); void _sanityCheckFilesystem(cryfs::CryDevice *device); cpputils::RandomGenerator &_keyGenerator; cpputils::SCryptSettings _scryptSettings; boost::optional> _idleUnmounter; boost::optional> _device; DISALLOW_COPY_AND_ASSIGN(Cli); }; } #endif