From c5d1fa66cb80a6aee627b1e5aa08ee7663779656 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com> Date: Thu, 23 Apr 2015 18:18:23 -0400 Subject: [PATCH] api: Bump Daemon API Refs #68196 --- src/call.cpp | 17 +- src/qtwrapper/configurationmanager_wrap.h | 104 ++++++++--- xml/configurationmanager-introspec.xml | 216 +++++++++++++++++++++- 3 files changed, 299 insertions(+), 38 deletions(-) diff --git a/src/call.cpp b/src/call.cpp index d131ca30..09d977ae 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -30,6 +30,7 @@ //DRing #include <account_const.h> +#include <security_const.h> #include <call_const.h> //Ring library @@ -345,8 +346,8 @@ Call* CallPrivate::buildExistingCall(const QString& callId) } //Load the certificate if it's now available - if (!call->certificate() && !details[DRing::Call::Details::TLS_PEER_CERT].isEmpty()) { - call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::Call::Details::TLS_PEER_CERT].toLatin1(),call->account()); + if (!call->certificate() && !details[DRing::TlsTransport::TLS_PEER_CERT].isEmpty()) { + call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::TlsTransport::TLS_PEER_CERT].toLatin1(),call->account()); } return call; @@ -390,8 +391,8 @@ Call* CallPrivate::buildIncomingCall(const QString& callId) } //Load the certificate if it's now available - if (!call->certificate() && !details[DRing::Call::Details::TLS_PEER_CERT].isEmpty()) { - call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::Call::Details::TLS_PEER_CERT].toLatin1(),call->account()); + if (!call->certificate() && !details[DRing::TlsTransport::TLS_PEER_CERT].isEmpty()) { + call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::TlsTransport::TLS_PEER_CERT].toLatin1(),call->account()); } return call; @@ -424,8 +425,8 @@ Call* CallPrivate::buildRingingCall(const QString & callId) } //Load the certificate if it's now available - if (!call->certificate() && !details[DRing::Call::Details::TLS_PEER_CERT].isEmpty()) { - call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::Call::Details::TLS_PEER_CERT].toLatin1(),call->account()); + if (!call->certificate() && !details[DRing::TlsTransport::TLS_PEER_CERT].isEmpty()) { + call->d_ptr->m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::TlsTransport::TLS_PEER_CERT].toLatin1(),call->account()); } return call; @@ -1003,8 +1004,8 @@ Call::State CallPrivate::stateChanged(const QString& newStateName) m_PeerName = details[CallPrivate::DetailsMapFields::PEER_NAME]; //Load the certificate if it's now available - if (!q_ptr->certificate() && !details[DRing::Call::Details::TLS_PEER_CERT].isEmpty()) { - m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::Call::Details::TLS_PEER_CERT].toLatin1(),q_ptr->account()); + if (!q_ptr->certificate() && !details[DRing::TlsTransport::TLS_PEER_CERT].isEmpty()) { + m_pCertificate = CertificateModel::instance()->getCertificateFromContent(details[DRing::TlsTransport::TLS_PEER_CERT].toLatin1(),q_ptr->account()); } try { diff --git a/src/qtwrapper/configurationmanager_wrap.h b/src/qtwrapper/configurationmanager_wrap.h index 8cf416f9..d74a3db8 100644 --- a/src/qtwrapper/configurationmanager_wrap.h +++ b/src/qtwrapper/configurationmanager_wrap.h @@ -97,18 +97,33 @@ public: Q_EMIT this->errorAlert(code); }); }), - exportable_callback<ConfigurationSignal::CertificateAdded>( + exportable_callback<ConfigurationSignal::CertificateExpired>( [this] (const std::string &certId) { QTimer::singleShot(0, [this, certId] { - Q_EMIT this->certificateAdded(QString(certId.c_str())); + Q_EMIT this->certificateExpired(QString(certId.c_str())); }); }), - exportable_callback<ConfigurationSignal::CertificateExpired>( + + exportable_callback<ConfigurationSignal::CertificatePinned>( [this] (const std::string &certId) { QTimer::singleShot(0, [this, certId] { - Q_EMIT this->certificateExpired(QString(certId.c_str())); + Q_EMIT this->certificatePinned(QString(certId.c_str())); + }); + }), + + exportable_callback<ConfigurationSignal::CertificatePathPinned>( + [this] (const std::string &certPath, const std::vector<std::string>& list) { + QTimer::singleShot(0, [this, certPath, list] { + Q_EMIT this->certificatePathPinned(QString(certPath.c_str()),convertStringList(list)); + }); + }), + + exportable_callback<ConfigurationSignal::IncomingTrustRequest>( + [this] (const std::string &accountId, const std::string &certId, time_t timestamp) { + QTimer::singleShot(0, [this, certId,accountId,timestamp] { + Q_EMIT this->incomingTrustRequest(QString(accountId.c_str()), QString(certId.c_str()), timestamp); }); - }) + }), }; } @@ -301,13 +316,6 @@ public Q_SLOTS: // METHODS return temp; } - MapStringString getTlsSettings() - { - MapStringString temp = - convertMap(DRing::getTlsSettings()); - return temp; - } - MapStringString validateCertificate(const QString& unused, const QString certificate, const QString& privateKey) { MapStringString temp = @@ -501,11 +509,6 @@ public Q_SLOTS: // METHODS DRing::setShortcuts(convertMap(shortcutsMap)); } - void setTlsSettings(MapStringString details) - { - DRing::setTlsSettings(convertMap(details)); - } - void setVolume(const QString &device, double value) { DRing::setVolume(device.toStdString(), value); @@ -517,27 +520,70 @@ public Q_SLOTS: // METHODS return temp; } - QStringList getCertificateList() + QStringList getPinnedCertificates() + { + QStringList temp = + convertStringList(DRing::getPinnedCertificates()); + return temp; + } + + QString pinCertificate(const QByteArray& content, bool local) + { + std::vector<unsigned char> raw(content.begin(), content.end()); + return QString(DRing::pinCertificate(raw,local).c_str()); + } + + bool unpinCertificate(const QString& certId) + { + return DRing::unpinCertificate(certId.toStdString()); + } + + void pinCertificatePath(const QString& certPath) + { + DRing::pinCertificatePath(certPath.toStdString()); + } + + uint unpinCertificatePath(const QString& certPath) + { + return DRing::unpinCertificatePath(certPath.toStdString()); + } + + bool pinRemoteCertificate(const QString& accountId, const QString& certPath) + { + return DRing::pinRemoteCertificate(accountId.toStdString(), certPath.toStdString()); + } + + bool setCertificateStatus(const QString& accountId, const QString& certPath, const QString& status) + { + return DRing::setCertificateStatus(accountId.toStdString(), certPath.toStdString(), status.toStdString()); + } + + QStringList getCertificatesByStatus(const QString& accountId, const QString& certPath) + { + return convertStringList(DRing::getCertificatesByStatus(accountId.toStdString(), certPath.toStdString())); + } + + MapStringString getTrustRequests(const QString& accountId) { - return convertStringList(DRing::getCertificateList()); + return convertMap(DRing::getTrustRequests(accountId.toStdString())); } - QString addCertificate(const QByteArray& raw) + bool acceptTrustRequest(const QString& accountId, const QString& from) { - const std::vector<unsigned char> r(raw.begin(), raw.end()); - return DRing::addCertificate(r).c_str(); + return DRing::acceptTrustRequest(accountId.toStdString(), from.toStdString()); } - bool addCertificateRemote(const QString& accountId, const QString& certificateId) + bool discardTrustRequest(const QString& accountId, const QString& from) { - return DRing::addCertificateRemote(accountId.toStdString(), certificateId.toStdString()); + return DRing::discardTrustRequest(accountId.toStdString(), from.toStdString()); } - bool banCertificate(const QString& id) + void sendTrustRequest(const QString& accountId, const QString& from) { - return DRing::banCertificate(id.toStdString()); + DRing::sendTrustRequest(accountId.toStdString(), from.toStdString()); } + Q_SIGNALS: // SIGNALS void volumeChanged(const QString &device, double value); void accountsChanged(); @@ -547,8 +593,10 @@ Q_SIGNALS: // SIGNALS void stunStatusSuccess(const QString &message); void errorAlert(int code); void volatileAccountDetailsChanged(const QString &accountID, MapStringString details); - void certificateAdded(const QString& cert); - void certificateExpired(const QString& cert); + void certificatePinned(const QString& certId); + void certificatePathPinned(const QString& path, const QStringList& certIds); + void certificateExpired(const QString& certId); + void incomingTrustRequest(const QString& accountId, const QString& from, qulonglong timeStamp); }; diff --git a/xml/configurationmanager-introspec.xml b/xml/configurationmanager-introspec.xml index 4b6cd1b9..daaf25e1 100644 --- a/xml/configurationmanager-introspec.xml +++ b/xml/configurationmanager-introspec.xml @@ -237,7 +237,6 @@ </method> <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> - <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/> <arg type="s" name="accountID" direction="in"> </arg> <arg type="s" name="to" direction="in"> @@ -256,7 +255,7 @@ </arg> <arg type="s" name="message"> </arg> - </signal> + </signal> <method name="setVolume" tp:name-for-bindings="setVolume"> <tp:docstring> @@ -702,6 +701,219 @@ </arg> </method> + <method name="getPinnedCertificates" tp:name-for-bindings="getPinnedCertificates"> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="certIds" direction="out"> + <tp:docstring> + <p>A list of all known certificate IDs</p> + </tp:docstring> + </arg> + </method> + + <method name="pinCertificate" tp:name-for-bindings="pinCertificate"> + <arg type="ay" name="certificateRaw" direction="in"> + <tp:docstring> + <p>A raw certificate (PEM or DER encoded) to be pinned.</p> + </tp:docstring> + </arg> + <arg type="b" name="local" direction="in"> + <tp:docstring> + <p>True to save the certificate in the daemon local store.</p> + </tp:docstring> + </arg> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="String"/> + <arg type="s" name="certId" direction="out"> + <tp:docstring> + <p>ID of the pinned certificate or empty string on failure.</p> + </tp:docstring> + </arg> + </method> + + <method name="unpinCertificate" tp:name-for-bindings="unpinCertificate"> + <arg type="s" name="certId" direction="in"> + <tp:docstring> + <p>A certificate ID to unpin.</p> + </tp:docstring> + </arg> + <arg type="b" name="success" direction="out"> + <tp:docstring> + <p>True if a certificate was unpinned.</p> + </tp:docstring> + </arg> + </method> + + <method name="pinCertificatePath" tp:name-for-bindings="pinCertificatePath"> + <arg type="s" name="certPath" direction="in"> + <tp:docstring> + <p>A certificate path to be pinned (assumed non-local).</p> + </tp:docstring> + </arg> + </method> + + <method name="unpinCertificatePath" tp:name-for-bindings="unpinCertificatePath"> + <arg type="s" name="certPath" direction="in"> + <tp:docstring> + <p>Certificates path.</p> + </tp:docstring> + </arg> + <arg type="u" name="unpinned" direction="out"> + <tp:docstring> + <p>Number of unpinned certificates.</p> + </tp:docstring> + </arg> + </method> + + <method name="pinRemoteCertificate" tp:name-for-bindings="pinRemoteCertificate"> + <arg type="s" name="accountId" direction="in"> + <tp:docstring> + <p>An account ID</p> + </tp:docstring> + </arg> + <arg type="s" name="certId" direction="in"> + <tp:docstring> + <p>A certificate public key ID</p> + </tp:docstring> + </arg> + <arg type="b" name="success" direction="out"> + <tp:docstring> + <p>True if the search started</p> + </tp:docstring> + </arg> + </method> + + <method name="setCertificateStatus" tp:name-for-bindings="setCertificateStatus"> + <arg type="s" name="accountId" direction="in"> + <tp:docstring> + <p>An account ID</p> + </tp:docstring> + </arg> + <arg type="s" name="certId" direction="in"> + <tp:docstring> + <p>A certificate ID</p> + </tp:docstring> + </arg> + <arg type="s" name="status" direction="in"> + <tp:docstring> + The new status of the certificate for the specified account. + UNDEFINED : forget any previous certificate state for this account. + ALLOWED : consider the certificate as trusted for this account. + BANNED : consider the certificate as banned for this account. + </tp:docstring> + </arg> + <arg type="b" name="success" direction="out"> + <tp:docstring> + <p>True if the certificate state was succesfully set.</p> + </tp:docstring> + </arg> + </method> + + <method name="getCertificatesByStatus" tp:name-for-bindings="getCertificatesByStatus"> + <arg type="s" name="accountId" direction="in"> + <tp:docstring> + <p>An account ID</p> + </tp:docstring> + </arg> + <arg type="s" name="status" direction="in"> + <tp:docstring> + The queried certificate status. + ALLOWED : trusted certificate for this account. + BANNED : banned certificate for this account. + </tp:docstring> + </arg> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of certificate ids with the provided status + </tp:docstring> + </arg> + </method> + + <signal name="certificatePinned" tp:name-for-bindings="certificatePinned"> + <tp:docstring> + Notify clients that a certificate have been added to the store. + </tp:docstring> + <arg type="s" name="certId"> + </arg> + </signal> + <signal name="certificatePathPinned" tp:name-for-bindings="certificatePathPinned"> + <tp:docstring> + Notify clients that a certificate path have been added to the store. + </tp:docstring> + <arg type="s" name="path"> + <tp:docstring> + Pinned path. + </tp:docstring> + </arg> + <arg type="as" name="certIds"> + <tp:docstring> + A list of certificate ids. + </tp:docstring> + </arg> + </signal> + <signal name="certificateExpired" tp:name-for-bindings="certificateExpired"> + <tp:docstring> + Notify clients that a certificate expired. + </tp:docstring> + <arg type="s" name="certId"> + <tp:docstring> + A certificate id. + </tp:docstring> + </arg> + </signal> + + <method name="getTrustRequests" tp:name-for-bindings="getTrustRequests"> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="s" name="accountID" direction="in"> + </arg> + <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> + <tp:docstring> + A list of contact request details. + </tp:docstring> + </arg> + </method> + + <method name="acceptTrustRequest" tp:name-for-bindings="acceptTrustRequest"> + <arg type="s" name="accountID" direction="in"> + </arg> + <arg type="s" name="from" direction="in"> + </arg> + <arg type="b" name="success" direction="out" tp:type="Boolean"> + <tp:docstring> + True if the operation succeeded. + </tp:docstring> + </arg> + </method> + <method name="discardTrustRequest" tp:name-for-bindings="discardTrustRequest"> + <arg type="s" name="accountID" direction="in"> + </arg> + <arg type="s" name="from" direction="in"> + </arg> + <arg type="b" name="success" direction="out" tp:type="Boolean"> + <tp:docstring> + True if the operation succeeded. + </tp:docstring> + </arg> + </method> + + <signal name="incomingTrustRequest" tp:name-for-bindings="incomingTrustRequest"> + <tp:docstring> + Notify clients that a new contact request has been received. + </tp:docstring> + <arg type="s" name="accountID"> + </arg> + <arg type="s" name="from"> + </arg> + <arg type="t" name="receiveTime"> + </arg> + </signal> + + <method name="sendTrustRequest" tp:name-for-bindings="sendTrustRequest"> + <arg type="s" name="accountID" direction="in"> + </arg> + <arg type="s" name="to" direction="in"> + </arg> + </method> + <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> <arg type="s" name="interface" direction="in"> </arg> -- GitLab