#pragma once #include "crypto.hh" #include "store-api.hh" #include "pool.hh" #include namespace nix { struct NarInfo; class BinaryCacheStore : public Store { public: const Setting compression{this, "xz", "compression", "NAR compression method ('xz', 'bzip2', or 'none')"}; const Setting writeNARListing{this, false, "write-nar-listing", "whether to write a JSON file listing the files in each NAR"}; const Setting secretKeyFile{this, "", "secret-key", "path to secret key used to sign the binary cache"}; private: std::unique_ptr secretKey; protected: BinaryCacheStore(const Params & params); public: virtual bool fileExists(const std::string & path) = 0; virtual void upsertFile(const std::string & path, const std::string & data, const std::string & mimeType) = 0; /* Return the contents of the specified file, or null if it doesn't exist. */ virtual void getFile(const std::string & path, std::function)> success, std::function failure) = 0; std::shared_ptr getFile(const std::string & path); protected: bool wantMassQuery_ = false; int priority = 50; public: virtual void init(); private: std::string narMagic; std::string narInfoFileFor(const Path & storePath); public: bool isValidPathUncached(const Path & path) override; PathSet queryAllValidPaths() override { unsupported(); } void queryPathInfoUncached(const Path & path, std::function)> success, std::function failure) override; void queryReferrers(const Path & path, PathSet & referrers) override { unsupported(); } PathSet queryDerivationOutputs(const Path & path) override { unsupported(); } StringSet queryDerivationOutputNames(const Path & path) override { unsupported(); } Path queryPathFromHashPart(const string & hashPart) override { unsupported(); } bool wantMassQuery() override { return wantMassQuery_; } void addToStore(const ValidPathInfo & info, const ref & nar, bool repair, bool dontCheckSigs, std::shared_ptr accessor) override; Path addToStore(const string & name, const Path & srcPath, bool recursive, HashType hashAlgo, PathFilter & filter, bool repair) override; Path addTextToStore(const string & name, const string & s, const PathSet & references, bool repair) override; void narFromPath(const Path & path, Sink & sink) override; BuildResult buildDerivation(const Path & drvPath, const BasicDerivation & drv, BuildMode buildMode) override { unsupported(); } void ensurePath(const Path & path) override { unsupported(); } void addTempRoot(const Path & path) override { unsupported(); } void addIndirectRoot(const Path & path) override { unsupported(); } Roots findRoots() override { unsupported(); } void collectGarbage(const GCOptions & options, GCResults & results) override { unsupported(); } ref getFSAccessor() override; void addSignatures(const Path & storePath, const StringSet & sigs) override { unsupported(); } std::shared_ptr getBuildLog(const Path & path) override; }; }