94 lines
3.4 KiB
C
94 lines
3.4 KiB
C
|
#ifndef LIBPKG_DATA_SIGLEVEL_H
|
||
|
#define LIBPKG_DATA_SIGLEVEL_H
|
||
|
|
||
|
#include "../global.h"
|
||
|
|
||
|
#include <reflective_rapidjson/binary/serializable.h>
|
||
|
#include <reflective_rapidjson/json/serializable.h>
|
||
|
|
||
|
#include <c++utilities/misc/flagenumclass.h>
|
||
|
|
||
|
#include <string>
|
||
|
#include <string_view>
|
||
|
|
||
|
namespace LibPkg {
|
||
|
|
||
|
enum class SignatueScope {
|
||
|
Package,
|
||
|
Database,
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* \brief The DatabaseSignatureLevel enum represents a database's "SigLevel".
|
||
|
* \sa https://www.archlinux.org/pacman/pacman.conf.5.html#SC
|
||
|
*/
|
||
|
enum class SignatureLevel {
|
||
|
Invalid = 0, /*! Indicates that the signature level could not be parsed by signatureLevelToString(). */
|
||
|
Never = (1 << 0), /*! All signature checking is suppressed, even if signatures are present. */
|
||
|
Optional = (1
|
||
|
<< 1), /*! Signatures are checked if present; absence of a signature is not an error. An invalid signature is a fatal error, as is a signature from a key not in the keyring. */
|
||
|
Required = (1
|
||
|
<< 2), /*! Signatures are required; absence of a signature or an invalid signature is a fatal error, as is a signature from a key not in the keyring. */
|
||
|
TrustedOnly = (1 << 3), /*! If a signature is checked, it must be in the keyring and fully trusted; marginal trust does not meet this criteria. */
|
||
|
TrustAll = (1
|
||
|
<< 4), /*! If a signature is checked, it must be in the keyring, but is not required to be assigned a trust level (e.g., unknown or marginal trust). */
|
||
|
Default = SignatureLevel::Optional | SignatureLevel::TrustedOnly, /*! The default signature level. */
|
||
|
};
|
||
|
|
||
|
LIBPKG_EXPORT std::string signatureLevelToString(SignatureLevel sigLevel, std::string_view prefix = std::string_view());
|
||
|
|
||
|
} // namespace LibPkg
|
||
|
|
||
|
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibPkg, LibPkg::SignatureLevel)
|
||
|
|
||
|
namespace LibPkg {
|
||
|
|
||
|
struct LIBPKG_EXPORT SignatureLevelConfig : public ReflectiveRapidJSON::JsonSerializable<SignatureLevelConfig>,
|
||
|
public ReflectiveRapidJSON::BinarySerializable<SignatureLevelConfig> {
|
||
|
explicit SignatureLevelConfig();
|
||
|
explicit SignatureLevelConfig(SignatureLevel levelForAllScopes);
|
||
|
explicit SignatureLevelConfig(SignatureLevel levelForDbScope, SignatureLevel levelForPackageScope);
|
||
|
static SignatureLevelConfig fromString(std::string_view str);
|
||
|
std::string toString() const;
|
||
|
bool isValid() const;
|
||
|
bool operator==(const SignatureLevelConfig &other) const;
|
||
|
|
||
|
SignatureLevel databaseScope = SignatureLevel::Default;
|
||
|
SignatureLevel packageScope = SignatureLevel::Default;
|
||
|
};
|
||
|
|
||
|
inline SignatureLevelConfig::SignatureLevelConfig()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
inline SignatureLevelConfig::SignatureLevelConfig(SignatureLevel levelForAllScopes)
|
||
|
: databaseScope(levelForAllScopes)
|
||
|
, packageScope(levelForAllScopes)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
inline SignatureLevelConfig::SignatureLevelConfig(SignatureLevel levelForDbScope, SignatureLevel levelForPackageScope)
|
||
|
: databaseScope(levelForDbScope)
|
||
|
, packageScope(levelForPackageScope)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
inline bool SignatureLevelConfig::isValid() const
|
||
|
{
|
||
|
return databaseScope != SignatureLevel::Invalid && packageScope != SignatureLevel::Invalid;
|
||
|
}
|
||
|
|
||
|
inline bool SignatureLevelConfig::operator==(const SignatureLevelConfig &other) const
|
||
|
{
|
||
|
return databaseScope == other.databaseScope && packageScope == other.packageScope;
|
||
|
}
|
||
|
|
||
|
inline std::ostream &operator<<(std::ostream &o, const SignatureLevelConfig &signatureLevelConfig)
|
||
|
{
|
||
|
return o << signatureLevelConfig.toString();
|
||
|
}
|
||
|
|
||
|
} // namespace LibPkg
|
||
|
|
||
|
#endif // LIBPKG_DATA_LOCKABLE_H
|