mirror of
https://github.com/logos-co/logos-package-manager-module.git
synced 2026-08-31 04:21:18 +00:00
migrate to new api
This commit is contained in:
+93
-125
@@ -1,16 +1,13 @@
|
||||
#include "package_manager_impl.h"
|
||||
#include <package_manager_lib.h>
|
||||
#include <lgx.h>
|
||||
#include <QDebug>
|
||||
#include <QDateTime>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <QFileInfo>
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <iostream>
|
||||
|
||||
PackageManagerImpl::PackageManagerImpl()
|
||||
: m_lib(nullptr)
|
||||
{
|
||||
qDebug() << "PackageManagerImpl created (new provider API)";
|
||||
m_lib = new PackageManagerLib();
|
||||
}
|
||||
|
||||
@@ -20,228 +17,199 @@ PackageManagerImpl::~PackageManagerImpl()
|
||||
m_lib = nullptr;
|
||||
}
|
||||
|
||||
void PackageManagerImpl::onInit(LogosAPI* api)
|
||||
{
|
||||
qDebug() << "PackageManagerImpl: LogosAPI initialized (new provider API)";
|
||||
}
|
||||
|
||||
QVariantMap PackageManagerImpl::installPlugin(const QString& pluginPath, bool skipIfNotNewerVersion)
|
||||
LogosMap PackageManagerImpl::installPlugin(const std::string& pluginPath, bool skipIfNotNewerVersion)
|
||||
{
|
||||
std::string errorMsg;
|
||||
std::string installedPluginPath;
|
||||
bool isCoreModule = false;
|
||||
std::string result = m_lib->installPluginFile(
|
||||
pluginPath.toStdString(), errorMsg, skipIfNotNewerVersion,
|
||||
pluginPath, errorMsg, skipIfNotNewerVersion,
|
||||
&installedPluginPath, &isCoreModule
|
||||
);
|
||||
|
||||
bool success = !result.empty();
|
||||
|
||||
if (success && !installedPluginPath.empty()) {
|
||||
onPluginFileInstalled(QString::fromStdString(installedPluginPath), isCoreModule);
|
||||
if (success && !installedPluginPath.empty() && emitEvent) {
|
||||
if (isCoreModule) {
|
||||
emitEvent("corePluginFileInstalled", installedPluginPath);
|
||||
} else {
|
||||
emitEvent("uiPluginFileInstalled", installedPluginPath);
|
||||
}
|
||||
}
|
||||
|
||||
// Get signature info for the response
|
||||
auto sigResult = m_lib->verifyPackageSignature(pluginPath.toStdString());
|
||||
auto sigResult = m_lib->verifyPackageSignature(pluginPath);
|
||||
|
||||
QFileInfo fi(pluginPath);
|
||||
QVariantMap response;
|
||||
response["name"] = fi.completeBaseName();
|
||||
response["path"] = success ? QString::fromStdString(installedPluginPath) : QString();
|
||||
std::string stem = std::filesystem::path(pluginPath).stem().string();
|
||||
|
||||
LogosMap response;
|
||||
response["name"] = stem;
|
||||
response["path"] = success ? installedPluginPath : std::string();
|
||||
response["isCoreModule"] = isCoreModule;
|
||||
if (!success) {
|
||||
response["error"] = QString::fromStdString(errorMsg);
|
||||
response["error"] = errorMsg;
|
||||
}
|
||||
|
||||
// Add signature info
|
||||
if (sigResult.is_signed) {
|
||||
response["signatureStatus"] = sigResult.signature_valid && sigResult.package_valid
|
||||
? QString("signed") : QString("invalid");
|
||||
response["signerDid"] = QString::fromStdString(sigResult.signer_did);
|
||||
if (!sigResult.signer_name.empty()) {
|
||||
response["signerName"] = QString::fromStdString(sigResult.signer_name);
|
||||
}
|
||||
if (!sigResult.signer_url.empty()) {
|
||||
response["signerUrl"] = QString::fromStdString(sigResult.signer_url);
|
||||
}
|
||||
if (!sigResult.trusted_as.empty()) {
|
||||
response["trustedAs"] = QString::fromStdString(sigResult.trusted_as);
|
||||
}
|
||||
bool valid = sigResult.signature_valid && sigResult.package_valid;
|
||||
response["signatureStatus"] = valid ? std::string("signed") : std::string("invalid");
|
||||
response["signerDid"] = sigResult.signer_did;
|
||||
if (!sigResult.signer_name.empty())
|
||||
response["signerName"] = sigResult.signer_name;
|
||||
if (!sigResult.signer_url.empty())
|
||||
response["signerUrl"] = sigResult.signer_url;
|
||||
if (!sigResult.trusted_as.empty())
|
||||
response["trustedAs"] = sigResult.trusted_as;
|
||||
} else if (!sigResult.error.empty()) {
|
||||
response["signatureStatus"] = QString("error");
|
||||
response["signatureError"] = QString::fromStdString(sigResult.error);
|
||||
response["signatureStatus"] = std::string("error");
|
||||
response["signatureError"] = sigResult.error;
|
||||
} else {
|
||||
response["signatureStatus"] = QString("unsigned");
|
||||
response["signatureStatus"] = std::string("unsigned");
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
void PackageManagerImpl::onPluginFileInstalled(const QString& pluginPath, bool isCoreModule)
|
||||
LogosList PackageManagerImpl::getInstalledPackages()
|
||||
{
|
||||
QVariantList eventData;
|
||||
eventData << pluginPath;
|
||||
|
||||
if (isCoreModule) {
|
||||
qDebug() << "Emitting corePluginFileInstalled event for:" << pluginPath;
|
||||
emitEvent("corePluginFileInstalled", eventData);
|
||||
} else {
|
||||
qDebug() << "Emitting uiPluginFileInstalled event for:" << pluginPath;
|
||||
emitEvent("uiPluginFileInstalled", eventData);
|
||||
}
|
||||
return LogosList::parse(m_lib->getInstalledPackages());
|
||||
}
|
||||
|
||||
static QVariantList jsonStringToVariantList(const std::string& jsonStr)
|
||||
LogosList PackageManagerImpl::getInstalledModules()
|
||||
{
|
||||
QJsonDocument doc = QJsonDocument::fromJson(QByteArray::fromStdString(jsonStr));
|
||||
return doc.array().toVariantList();
|
||||
return LogosList::parse(m_lib->getInstalledModules());
|
||||
}
|
||||
|
||||
QVariantList PackageManagerImpl::getInstalledPackages()
|
||||
LogosList PackageManagerImpl::getInstalledUiPlugins()
|
||||
{
|
||||
return jsonStringToVariantList(m_lib->getInstalledPackages());
|
||||
return LogosList::parse(m_lib->getInstalledUiPlugins());
|
||||
}
|
||||
|
||||
QVariantList PackageManagerImpl::getInstalledModules()
|
||||
std::vector<std::string> PackageManagerImpl::getValidVariants()
|
||||
{
|
||||
return jsonStringToVariantList(m_lib->getInstalledModules());
|
||||
return PackageManagerLib::platformVariantsToTry();
|
||||
}
|
||||
|
||||
QVariantList PackageManagerImpl::getInstalledUiPlugins()
|
||||
void PackageManagerImpl::setEmbeddedModulesDirectory(const std::string& dir)
|
||||
{
|
||||
return jsonStringToVariantList(m_lib->getInstalledUiPlugins());
|
||||
m_lib->setEmbeddedModulesDirectory(dir);
|
||||
}
|
||||
|
||||
QStringList PackageManagerImpl::getValidVariants()
|
||||
void PackageManagerImpl::addEmbeddedModulesDirectory(const std::string& dir)
|
||||
{
|
||||
QStringList result;
|
||||
for (const auto& v : PackageManagerLib::platformVariantsToTry()) {
|
||||
result << QString::fromStdString(v);
|
||||
}
|
||||
return result;
|
||||
m_lib->addEmbeddedModulesDirectory(dir);
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setEmbeddedModulesDirectory(const QString& dir)
|
||||
void PackageManagerImpl::setEmbeddedUiPluginsDirectory(const std::string& dir)
|
||||
{
|
||||
m_lib->setEmbeddedModulesDirectory(dir.toStdString());
|
||||
m_lib->setEmbeddedUiPluginsDirectory(dir);
|
||||
}
|
||||
|
||||
void PackageManagerImpl::addEmbeddedModulesDirectory(const QString& dir)
|
||||
void PackageManagerImpl::addEmbeddedUiPluginsDirectory(const std::string& dir)
|
||||
{
|
||||
m_lib->addEmbeddedModulesDirectory(dir.toStdString());
|
||||
m_lib->addEmbeddedUiPluginsDirectory(dir);
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setEmbeddedUiPluginsDirectory(const QString& dir)
|
||||
void PackageManagerImpl::setUserModulesDirectory(const std::string& dir)
|
||||
{
|
||||
m_lib->setEmbeddedUiPluginsDirectory(dir.toStdString());
|
||||
m_lib->setUserModulesDirectory(dir);
|
||||
}
|
||||
|
||||
void PackageManagerImpl::addEmbeddedUiPluginsDirectory(const QString& dir)
|
||||
void PackageManagerImpl::setUserUiPluginsDirectory(const std::string& dir)
|
||||
{
|
||||
m_lib->addEmbeddedUiPluginsDirectory(dir.toStdString());
|
||||
m_lib->setUserUiPluginsDirectory(dir);
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setUserModulesDirectory(const QString& dir)
|
||||
void PackageManagerImpl::setSignaturePolicy(const std::string& policy)
|
||||
{
|
||||
m_lib->setUserModulesDirectory(dir.toStdString());
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setUserUiPluginsDirectory(const QString& dir)
|
||||
{
|
||||
m_lib->setUserUiPluginsDirectory(dir.toStdString());
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setSignaturePolicy(const QString& policy)
|
||||
{
|
||||
std::string p = policy.toLower().toStdString();
|
||||
std::string p = policy;
|
||||
std::transform(p.begin(), p.end(), p.begin(), ::tolower);
|
||||
if (p == "none") m_lib->setSignaturePolicy(SignaturePolicy::NONE);
|
||||
else if (p == "warn") m_lib->setSignaturePolicy(SignaturePolicy::WARN);
|
||||
else if (p == "require") m_lib->setSignaturePolicy(SignaturePolicy::REQUIRE);
|
||||
else {
|
||||
qWarning() << "PackageManagerImpl::setSignaturePolicy: invalid policy"
|
||||
<< policy << "- expected one of: none, warn, require";
|
||||
std::cerr << "PackageManagerImpl::setSignaturePolicy: invalid policy '"
|
||||
<< policy << "' - expected one of: none, warn, require\n";
|
||||
}
|
||||
}
|
||||
|
||||
void PackageManagerImpl::setKeyringDirectory(const QString& dir)
|
||||
void PackageManagerImpl::setKeyringDirectory(const std::string& dir)
|
||||
{
|
||||
m_lib->setKeyringDirectory(dir.toStdString());
|
||||
m_lib->setKeyringDirectory(dir);
|
||||
}
|
||||
|
||||
QVariantMap PackageManagerImpl::verifyPackage(const QString& lgxPath)
|
||||
LogosMap PackageManagerImpl::verifyPackage(const std::string& lgxPath)
|
||||
{
|
||||
auto result = m_lib->verifyPackageSignature(lgxPath.toStdString());
|
||||
auto result = m_lib->verifyPackageSignature(lgxPath);
|
||||
|
||||
QVariantMap response;
|
||||
LogosMap response;
|
||||
response["isSigned"] = result.is_signed;
|
||||
response["signatureValid"] = result.signature_valid;
|
||||
response["packageValid"] = result.package_valid;
|
||||
response["signerDid"] = QString::fromStdString(result.signer_did);
|
||||
response["signerName"] = QString::fromStdString(result.signer_name);
|
||||
response["signerUrl"] = QString::fromStdString(result.signer_url);
|
||||
response["trustedAs"] = QString::fromStdString(result.trusted_as);
|
||||
if (!result.error.empty()) {
|
||||
response["error"] = QString::fromStdString(result.error);
|
||||
}
|
||||
response["signerDid"] = result.signer_did;
|
||||
response["signerName"] = result.signer_name;
|
||||
response["signerUrl"] = result.signer_url;
|
||||
response["trustedAs"] = result.trusted_as;
|
||||
if (!result.error.empty())
|
||||
response["error"] = result.error;
|
||||
return response;
|
||||
}
|
||||
|
||||
QVariantMap PackageManagerImpl::addTrustedKey(const QString& name, const QString& did,
|
||||
const QString& displayName, const QString& url)
|
||||
LogosMap PackageManagerImpl::addTrustedKey(const std::string& name, const std::string& did,
|
||||
const std::string& displayName, const std::string& url)
|
||||
{
|
||||
std::string keyringDir = m_lib->keyringDirectory();
|
||||
const char* keyringDirPtr = keyringDir.empty() ? nullptr : keyringDir.c_str();
|
||||
|
||||
lgx_result_t result = lgx_keyring_add(
|
||||
lgx_result_t res = lgx_keyring_add(
|
||||
keyringDirPtr,
|
||||
name.toStdString().c_str(),
|
||||
did.toStdString().c_str(),
|
||||
displayName.isEmpty() ? nullptr : displayName.toStdString().c_str(),
|
||||
url.isEmpty() ? nullptr : url.toStdString().c_str()
|
||||
name.c_str(),
|
||||
did.c_str(),
|
||||
displayName.empty() ? nullptr : displayName.c_str(),
|
||||
url.empty() ? nullptr : url.c_str()
|
||||
);
|
||||
|
||||
QVariantMap response;
|
||||
response["success"] = result.success;
|
||||
if (!result.success && result.error) {
|
||||
response["error"] = QString::fromUtf8(result.error);
|
||||
}
|
||||
LogosMap response;
|
||||
response["success"] = static_cast<bool>(res.success);
|
||||
if (!res.success && res.error)
|
||||
response["error"] = std::string(res.error);
|
||||
return response;
|
||||
}
|
||||
|
||||
QVariantMap PackageManagerImpl::removeTrustedKey(const QString& name)
|
||||
LogosMap PackageManagerImpl::removeTrustedKey(const std::string& name)
|
||||
{
|
||||
std::string keyringDir = m_lib->keyringDirectory();
|
||||
const char* keyringDirPtr = keyringDir.empty() ? nullptr : keyringDir.c_str();
|
||||
|
||||
lgx_result_t result = lgx_keyring_remove(
|
||||
lgx_result_t res = lgx_keyring_remove(
|
||||
keyringDirPtr,
|
||||
name.toStdString().c_str()
|
||||
name.c_str()
|
||||
);
|
||||
|
||||
QVariantMap response;
|
||||
response["success"] = result.success;
|
||||
if (!result.success && result.error) {
|
||||
response["error"] = QString::fromUtf8(result.error);
|
||||
}
|
||||
LogosMap response;
|
||||
response["success"] = static_cast<bool>(res.success);
|
||||
if (!res.success && res.error)
|
||||
response["error"] = std::string(res.error);
|
||||
return response;
|
||||
}
|
||||
|
||||
QVariantList PackageManagerImpl::listTrustedKeys()
|
||||
LogosList PackageManagerImpl::listTrustedKeys()
|
||||
{
|
||||
std::string keyringDir = m_lib->keyringDirectory();
|
||||
const char* keyringDirPtr = keyringDir.empty() ? nullptr : keyringDir.c_str();
|
||||
|
||||
lgx_keyring_list_t list = lgx_keyring_list(keyringDirPtr);
|
||||
|
||||
QVariantList result;
|
||||
LogosList result = LogosList::array();
|
||||
for (size_t i = 0; i < list.count; ++i) {
|
||||
QVariantMap entry;
|
||||
if (list.keys[i].name) entry["name"] = QString::fromUtf8(list.keys[i].name);
|
||||
if (list.keys[i].did) entry["did"] = QString::fromUtf8(list.keys[i].did);
|
||||
if (list.keys[i].display_name) entry["displayName"] = QString::fromUtf8(list.keys[i].display_name);
|
||||
if (list.keys[i].url) entry["url"] = QString::fromUtf8(list.keys[i].url);
|
||||
if (list.keys[i].added_at) entry["addedAt"] = QString::fromUtf8(list.keys[i].added_at);
|
||||
result.append(entry);
|
||||
LogosMap entry;
|
||||
if (list.keys[i].name) entry["name"] = std::string(list.keys[i].name);
|
||||
if (list.keys[i].did) entry["did"] = std::string(list.keys[i].did);
|
||||
if (list.keys[i].display_name) entry["displayName"] = std::string(list.keys[i].display_name);
|
||||
if (list.keys[i].url) entry["url"] = std::string(list.keys[i].url);
|
||||
if (list.keys[i].added_at) entry["addedAt"] = std::string(list.keys[i].added_at);
|
||||
result.push_back(entry);
|
||||
}
|
||||
|
||||
lgx_free_keyring_list(list);
|
||||
|
||||
Reference in New Issue
Block a user