2025-01-29 16:42:37 +01:00
|
|
|
#ifndef RNPJOB_H
|
|
|
|
#define RNPJOB_H
|
|
|
|
|
|
|
|
#include <QThread>
|
|
|
|
#include <QDir>
|
|
|
|
extern "C" {
|
|
|
|
#include <rnp/rnp.h>
|
|
|
|
}
|
|
|
|
#include <variant>
|
|
|
|
|
|
|
|
|
2025-01-30 16:25:29 +01:00
|
|
|
#define terminateOnError(ret) \
|
2025-01-29 16:42:37 +01:00
|
|
|
if(ret != RNP_SUCCESS) { \
|
2025-01-30 16:25:29 +01:00
|
|
|
qDebug() << "[RnpJob] Err : " << ret; \
|
|
|
|
qDebug() << "[RnpJob] Err Msg : " << rnp_result_to_string(ret); \
|
2025-01-29 16:42:37 +01:00
|
|
|
emit resultError(ret); \
|
|
|
|
return; \
|
|
|
|
} \
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @class RmpJob
|
|
|
|
* @brief A class that manages Git-related tasks using libgit2.
|
|
|
|
*
|
|
|
|
* The GitJob class is used abstraction class to perform rnp (opengpg) operations,
|
|
|
|
* such as decrypt, encrypt, key managments operations
|
|
|
|
*/
|
|
|
|
class RnpJob : public QThread
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void resultError(const rnp_result_t err);
|
|
|
|
|
|
|
|
private:
|
|
|
|
static bool passProvider(rnp_ffi_t ffi,
|
2025-01-30 16:25:29 +01:00
|
|
|
void *app_ctx,
|
|
|
|
rnp_key_handle_t key,
|
|
|
|
const char *pgp_context,
|
|
|
|
char buf[],
|
|
|
|
size_t buf_len);
|
2025-01-29 16:42:37 +01:00
|
|
|
QDir m_rnp_homedir; ///< rmp ffi.
|
2025-01-30 16:25:29 +01:00
|
|
|
void load_key_file(QSet<QString> *fingerprints, const QString path, const uint32_t flags);
|
2025-01-29 16:42:37 +01:00
|
|
|
|
|
|
|
protected:
|
|
|
|
rnp_ffi_t m_ffi; ///< rmp ffi.
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Get the path to public keys keyring.
|
|
|
|
*
|
|
|
|
* @return The path to public keys keyring
|
|
|
|
*/
|
2025-01-30 16:25:29 +01:00
|
|
|
QString pubringPath()
|
|
|
|
{
|
2025-01-29 16:42:37 +01:00
|
|
|
return this->m_rnp_homedir.filePath("pubring.pgp");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Get the path to secret keys keyring.
|
|
|
|
*
|
|
|
|
* @return The path to secret keys keyring
|
|
|
|
*/
|
2025-01-30 16:25:29 +01:00
|
|
|
QString secringPath()
|
|
|
|
{
|
2025-01-29 16:42:37 +01:00
|
|
|
return this->m_rnp_homedir.filePath("secring.pgp");
|
|
|
|
}
|
|
|
|
|
2025-01-30 16:25:29 +01:00
|
|
|
void load_sec_keyring(QSet<QString> *fingerprints);
|
|
|
|
void load_pub_keyring(QSet<QString> *fingerprints);
|
|
|
|
void load_full_keyring(QSet<QString> *fingerprints);
|
2025-01-29 16:42:37 +01:00
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* @brief Constructor for the RnpJob class.
|
|
|
|
*
|
|
|
|
* Initializes the RnpJob instance.
|
2025-01-30 16:25:29 +01:00
|
|
|
*
|
|
|
|
* @param rnp_homedir Rnp home dir that contains the keyrings.
|
2025-01-29 16:42:37 +01:00
|
|
|
*/
|
|
|
|
RnpJob(QDir rnp_homedir);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Destructor for the RnpJob class.
|
|
|
|
*
|
|
|
|
* Cleans up any resources used by the RnpJob.
|
|
|
|
*/
|
|
|
|
~RnpJob();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // RNPJOB_H
|