From 31bb69bfebeb86668a174b6b6ad75296b389d027 Mon Sep 17 00:00:00 2001
From: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
Date: Thu, 16 Apr 2015 12:22:31 -0400
Subject: [PATCH] certificate: Begin to implement the daemon certificate store

Refs #70829
---
 src/daemoncertificatecollection.cpp       |   7 +-
 src/qtwrapper/configurationmanager_wrap.h | 967 +++++++++++-----------
 xml/configurationmanager-introspec.xml    |  97 ++-
 3 files changed, 603 insertions(+), 468 deletions(-)

diff --git a/src/daemoncertificatecollection.cpp b/src/daemoncertificatecollection.cpp
index d9febb46..7b8ab240 100644
--- a/src/daemoncertificatecollection.cpp
+++ b/src/daemoncertificatecollection.cpp
@@ -20,6 +20,9 @@
 //Ring
 #include "certificate.h"
 
+//Dring
+#include "dbus/configurationmanager.h"
+
 class DaemonCertificateEditor : public CollectionEditor<Certificate>
 {
 public:
@@ -31,7 +34,7 @@ public:
    virtual bool addExisting( const Certificate* item ) override;
 
    QVector<Certificate*>             m_lItems;
-   QString                      m_Path  ;
+   QString                           m_Path  ;
    QHash<const Certificate*,QString> m_hPaths;
 
 private:
@@ -56,6 +59,8 @@ DaemonCertificateCollection::~DaemonCertificateCollection()
 
 bool DaemonCertificateCollection::load()
 {
+   ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance();
+   qDebug() << QStringList(configurationManager.getCertificateList());
    return false;
 }
 
diff --git a/src/qtwrapper/configurationmanager_wrap.h b/src/qtwrapper/configurationmanager_wrap.h
index 5bec4a73..8cf416f9 100644
--- a/src/qtwrapper/configurationmanager_wrap.h
+++ b/src/qtwrapper/configurationmanager_wrap.h
@@ -48,480 +48,515 @@ class ConfigurationManagerInterface: public QObject
 
 public:
 
-    std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
-
-    ConfigurationManagerInterface()
-    {
-        setObjectName("ConfigurationManagerInterface");
-        using DRing::exportable_callback;
-        using DRing::ConfigurationSignal;
-
-        setObjectName("ConfigurationManagerInterface");
-        confHandlers = {
-            exportable_callback<ConfigurationSignal::VolumeChanged>(
-                [this] (const std::string &device, double value) {
-                       QTimer::singleShot(0, [this,device,value] {
-                             Q_EMIT this->volumeChanged(QString(device.c_str()), value);
-                       });
+   std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers;
+
+   ConfigurationManagerInterface()
+   {
+      setObjectName("ConfigurationManagerInterface");
+      using DRing::exportable_callback;
+      using DRing::ConfigurationSignal;
+
+      setObjectName("ConfigurationManagerInterface");
+      confHandlers = {
+         exportable_callback<ConfigurationSignal::VolumeChanged>(
+               [this] (const std::string &device, double value) {
+                     QTimer::singleShot(0, [this,device,value] {
+                           Q_EMIT this->volumeChanged(QString(device.c_str()), value);
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::AccountsChanged>(
+               [this] () {
+                     QTimer::singleShot(0, [this] {
+                           Q_EMIT this->accountsChanged();
+                     });
             }),
-            exportable_callback<ConfigurationSignal::AccountsChanged>(
-                [this] () {
-                       QTimer::singleShot(0, [this] {
-                             Q_EMIT this->accountsChanged();
-                       });
-             }),
-            exportable_callback<ConfigurationSignal::StunStatusFailed>(
-                [this] (const std::string &reason) {
-                       QTimer::singleShot(0, [this, reason] {
-                             Q_EMIT this->stunStatusFailure(QString(reason.c_str()));
-                       });
-            }),
-            exportable_callback<ConfigurationSignal::RegistrationStateChanged>(
-                [this] (const std::string &accountID, const std::string& registration_state, unsigned detail_code, const std::string& detail_str) {
-                       QTimer::singleShot(0, [this, accountID, registration_state, detail_code, detail_str] {
-                             Q_EMIT this->registrationStateChanged(QString(accountID.c_str()),
-                                                                QString(registration_state.c_str()),
-                                                                detail_code,
-                                                                QString(detail_str.c_str()));
-                       });
-            }),
-            exportable_callback<ConfigurationSignal::VolatileDetailsChanged>(
-                [this] (const std::string &accountID, const std::map<std::string, std::string>& details) {
-                       QTimer::singleShot(0, [this, accountID, details] {
-                         Q_EMIT this->volatileAccountDetailsChanged(QString(accountID.c_str()), convertMap(details));
-                       });
-            }),
-            exportable_callback<ConfigurationSignal::Error>(
-                [this] (int code) {
-                       QTimer::singleShot(0, [this,code] {
-                         Q_EMIT this->errorAlert(code);
-                       });
-            })
-        };
-    }
-
-    ~ConfigurationManagerInterface() {}
+         exportable_callback<ConfigurationSignal::StunStatusFailed>(
+               [this] (const std::string &reason) {
+                     QTimer::singleShot(0, [this, reason] {
+                           Q_EMIT this->stunStatusFailure(QString(reason.c_str()));
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::RegistrationStateChanged>(
+               [this] (const std::string &accountID, const std::string& registration_state, unsigned detail_code, const std::string& detail_str) {
+                     QTimer::singleShot(0, [this, accountID, registration_state, detail_code, detail_str] {
+                           Q_EMIT this->registrationStateChanged(QString(accountID.c_str()),
+                                                               QString(registration_state.c_str()),
+                                                               detail_code,
+                                                               QString(detail_str.c_str()));
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::VolatileDetailsChanged>(
+               [this] (const std::string &accountID, const std::map<std::string, std::string>& details) {
+                     QTimer::singleShot(0, [this, accountID, details] {
+                        Q_EMIT this->volatileAccountDetailsChanged(QString(accountID.c_str()), convertMap(details));
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::Error>(
+               [this] (int code) {
+                     QTimer::singleShot(0, [this,code] {
+                        Q_EMIT this->errorAlert(code);
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::CertificateAdded>(
+               [this] (const std::string &certId) {
+                     QTimer::singleShot(0, [this, certId] {
+                           Q_EMIT this->certificateAdded(QString(certId.c_str()));
+                     });
+         }),
+         exportable_callback<ConfigurationSignal::CertificateExpired>(
+               [this] (const std::string &certId) {
+                     QTimer::singleShot(0, [this, certId] {
+                           Q_EMIT this->certificateExpired(QString(certId.c_str()));
+                     });
+         })
+      };
+   }
+
+   ~ConfigurationManagerInterface() {}
 
 public Q_SLOTS: // METHODS
-    QString addAccount(MapStringString details)
-    {
-        QString temp(
-            DRing::addAccount(convertMap(details)).c_str());
-        return temp;
-    }
-
-    MapStringString getAccountDetails(const QString &accountID)
-    {
-        MapStringString temp =
-            convertMap(DRing::getAccountDetails(accountID.toStdString()));
-        return temp;
-    }
-
-    QStringList getAccountList()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAccountList());
-        return temp;
-    }
-
-    MapStringString getAccountTemplate(const QString& accountType)
-    {
-        MapStringString temp =
-            convertMap(DRing::getAccountTemplate(accountType.toStdString()));
-        return temp;
-    }
-
-    // TODO: works?
-    VectorUInt getActiveCodecList(const QString &accountID)
-    {
-        return QVector<unsigned int>::fromStdVector(
-            DRing::getActiveCodecList(accountID.toStdString()));
-    }
-
-    QString getAddrFromInterfaceName(const QString &interface)
-    {
-        QString temp(
-            DRing::getAddrFromInterfaceName(interface.toStdString()).c_str());
-        return temp;
-    }
-
-    QStringList getAllIpInterface()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAllIpInterface());
-        return temp;
-    }
-
-    QStringList getAllIpInterfaceByName()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAllIpInterfaceByName());
-        return temp;
-    }
-
-    MapStringString getCodecDetails(const QString accountID, int payload)
-    {
-        MapStringString temp =
-            convertMap(DRing::getCodecDetails(
-                accountID.toStdString().c_str(), payload));
-        return temp;
-    }
-
-    VectorUInt getCodecList()
-    {
-        return QVector<unsigned int>::fromStdVector(DRing::getCodecList());
-    }
-
-    int getAudioInputDeviceIndex(const QString &devname)
-    {
-        return DRing::getAudioInputDeviceIndex(devname.toStdString());
-    }
-
-    QStringList getAudioInputDeviceList()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAudioInputDeviceList());
-        return temp;
-    }
-
-    QString getAudioManager()
-    {
-        QString temp(
-            DRing::getAudioManager().c_str());
-        return temp;
-    }
-
-    int getAudioOutputDeviceIndex(const QString &devname)
-    {
-        return DRing::getAudioOutputDeviceIndex(devname.toStdString());
-    }
-
-    QStringList getAudioOutputDeviceList()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAudioOutputDeviceList());
-        return temp;
-    }
-
-    QStringList getAudioPluginList()
-    {
-        QStringList temp =
-            convertStringList(DRing::getAudioPluginList());
-        return temp;
-    }
-
-    VectorMapStringString getCredentials(const QString &accountID)
-    {
-        VectorMapStringString temp;
-        for(auto x : DRing::getCredentials(accountID.toStdString())) {
-            temp.push_back(convertMap(x));
-        }
-        return temp;
-    }
-
-    QStringList getCurrentAudioDevicesIndex()
-    {
-        QStringList temp =
-            convertStringList(DRing::getCurrentAudioDevicesIndex());
-        return temp;
-    }
-
-    QString getCurrentAudioOutputPlugin()
-    {
-        QString temp(
-            DRing::getCurrentAudioOutputPlugin().c_str());
-        return temp;
-    }
-
-    int getHistoryLimit()
-    {
-        return DRing::getHistoryLimit();
-    }
-
-    MapStringString getHookSettings()
-    {
-        MapStringString temp =
-            convertMap(DRing::getHookSettings());
-        return temp;
-    }
-
-    MapStringString getIp2IpDetails()
-    {
-        MapStringString temp =
-            convertMap(DRing::getIp2IpDetails());
-        return temp;
-    }
-
-    bool getIsAlwaysRecording()
-    {
-        return DRing::getIsAlwaysRecording();
-    }
-
-    bool getNoiseSuppressState()
-    {
-        return DRing::getNoiseSuppressState();
-    }
-
-    QString getRecordPath()
-    {
-        QString temp(
-            DRing::getRecordPath().c_str());
-        return temp;
-    }
-
-    QStringList getSupportedAudioManagers()
-    {
-        QStringList temp;
-        return temp;
-    }
-
-    MapStringString getShortcuts()
-    {
-        MapStringString temp =
-            convertMap(DRing::getShortcuts());
-        return temp;
-    }
-
-    QStringList getSupportedTlsMethod()
-    {
-        QStringList temp =
-            convertStringList(DRing::getSupportedTlsMethod());
-        return temp;
-    }
-
-    MapStringString getTlsSettings()
-    {
-        MapStringString temp =
-            convertMap(DRing::getTlsSettings());
-        return temp;
-    }
-
-    MapStringString validateCertificate(const QString& unused, const QString certificate, const QString& privateKey)
-    {
-        MapStringString temp =
-            convertMap(DRing::validateCertificate(unused.toStdString(),
-                                                certificate.toStdString(),
-                                                privateKey.toStdString()));
-        return temp;
-    }
-
-    MapStringString validateCertificateRaw(const QString& unused, const QByteArray& content)
-    {
-        std::vector<unsigned char> raw(content.begin(), content.end());
-        MapStringString temp =
-            convertMap(DRing::validateCertificateRaw(unused.toStdString(), raw));
-        return temp;
-    }
-
-    MapStringString getCertificateDetails(const QString &certificate)
-    {
-        MapStringString temp =
-            convertMap(DRing::getCertificateDetails(certificate.toStdString()));
-        return temp;
-    }
-
-    MapStringString getCertificateDetailsRaw(const QByteArray &content)
-    {
-        std::vector<unsigned char> raw(content.begin(), content.end());
-        MapStringString temp =
-            convertMap(DRing::getCertificateDetailsRaw(raw));
-        return temp;
-    }
-
-    QStringList getSupportedCiphers(const QString &accountID)
-    {
-        QStringList temp =
-            convertStringList(DRing::getSupportedCiphers(accountID.toStdString()));
-        return temp;
-    }
-
-    MapStringString getTlsDefaultSettings()
-    {
-        MapStringString temp =
-            convertMap(DRing::getTlsDefaultSettings());
-        return temp;
-    }
-
-    double getVolume(const QString &device)
-    {
-        return DRing::getVolume(device.toStdString());
-    }
-
-    bool isAgcEnabled()
-    {
-        return DRing::isAgcEnabled();
-    }
-
-    bool isCaptureMuted()
-    {
-        return DRing::isCaptureMuted();
-    }
-
-    bool isDtmfMuted()
-    {
-        return DRing::isDtmfMuted();
-    }
-
-    int isIax2Enabled()
-    {
-        return DRing::isIax2Enabled();
-    }
-
-    bool isPlaybackMuted()
-    {
-        return DRing::isPlaybackMuted();
-    }
-
-    void muteCapture(bool mute)
-    {
-        DRing::muteCapture(mute);
-    }
-
-    void muteDtmf(bool mute)
-    {
-        DRing::muteDtmf(mute);
-    }
-
-    void mutePlayback(bool mute)
-    {
-        DRing::mutePlayback(mute);
-    }
-
-    void registerAllAccounts()
-    {
-        DRing::registerAllAccounts();
-    }
-
-    void removeAccount(const QString &accountID)
-    {
-        DRing::removeAccount(accountID.toStdString());
-    }
-
-    void sendRegister(const QString &accountID, bool enable)
-    {
-        DRing::sendRegister(accountID.toStdString(), enable);
-    }
-
-    void setAccountDetails(const QString &accountID, MapStringString details)
-    {
-        DRing::setAccountDetails(accountID.toStdString(),
-            convertMap(details));
-    }
-
-    void setAccountsOrder(const QString &order)
-    {
-        DRing::setAccountsOrder(order.toStdString());
-    }
-
-    void setActiveCodecList(const QString &accountID, VectorUInt &list)
-    {
-        //const std::vector<unsigned int> converted = convertStringList(list);
-        DRing::setActiveCodecList(accountID.toStdString(),
-        list.toStdVector());
-    }
-
-    void setAgcState(bool enabled)
-    {
-        DRing::setAgcState(enabled);
-    }
-
-    void setAudioInputDevice(int index)
-    {
-        DRing::setAudioInputDevice(index);
-    }
-
-    bool setAudioManager(const QString &api)
-    {
-        return DRing::setAudioManager(api.toStdString());
-    }
-
-    void setAudioOutputDevice(int index)
-    {
-        DRing::setAudioOutputDevice(index);
-    }
-
-    void setAudioPlugin(const QString &audioPlugin)
-    {
-        DRing::setAudioPlugin(audioPlugin.toStdString());
-    }
-
-    void setAudioRingtoneDevice(int index)
-    {
-        DRing::setAudioRingtoneDevice(index);
-    }
-
-    void setCredentials(const QString &accountID, VectorMapStringString credentialInformation)
-    {
-        std::vector<std::map<std::string, std::string> > temp;
-        for (auto x : credentialInformation) {
-            temp.push_back(convertMap(x));
-        }
-        DRing::setCredentials(accountID.toStdString(), temp);
-    }
-
-    void setHistoryLimit(int days)
-    {
-        DRing::setHistoryLimit(days);
-    }
-
-    void setHookSettings(MapStringString settings)
-    {
-        DRing::setHookSettings(convertMap(settings));
-    }
-
-    void setIsAlwaysRecording(bool enabled)
-    {
-        DRing::setIsAlwaysRecording(enabled);
-    }
-
-    void setNoiseSuppressState(bool state)
-    {
-        DRing::setNoiseSuppressState(state);
-    }
-
-    void setRecordPath(const QString &rec)
-    {
-        DRing::setRecordPath(rec.toStdString());
-    }
-
-    void setShortcuts(MapStringString shortcutsMap)
-    {
-        DRing::setShortcuts(convertMap(shortcutsMap));
-    }
-
-    void setTlsSettings(MapStringString details)
-    {
-        DRing::setTlsSettings(convertMap(details));
-    }
-
-    void setVolume(const QString &device, double value)
-    {
-        DRing::setVolume(device.toStdString(), value);
-    }
-
-    MapStringString getVolatileAccountDetails(const QString &accountID)
-    {
-        MapStringString temp = convertMap(DRing::getVolatileAccountDetails(accountID.toStdString()));
-        return temp;
-    }
+   QString addAccount(MapStringString details)
+   {
+      QString temp(
+         DRing::addAccount(convertMap(details)).c_str());
+      return temp;
+   }
+
+   MapStringString getAccountDetails(const QString &accountID)
+   {
+      MapStringString temp =
+         convertMap(DRing::getAccountDetails(accountID.toStdString()));
+      return temp;
+   }
+
+   QStringList getAccountList()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAccountList());
+      return temp;
+   }
+
+   MapStringString getAccountTemplate(const QString& accountType)
+   {
+      MapStringString temp =
+         convertMap(DRing::getAccountTemplate(accountType.toStdString()));
+      return temp;
+   }
+
+   // TODO: works?
+   VectorUInt getActiveCodecList(const QString &accountID)
+   {
+      return QVector<unsigned int>::fromStdVector(
+         DRing::getActiveCodecList(accountID.toStdString()));
+   }
+
+   QString getAddrFromInterfaceName(const QString &interface)
+   {
+      QString temp(
+         DRing::getAddrFromInterfaceName(interface.toStdString()).c_str());
+      return temp;
+   }
+
+   QStringList getAllIpInterface()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAllIpInterface());
+      return temp;
+   }
+
+   QStringList getAllIpInterfaceByName()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAllIpInterfaceByName());
+      return temp;
+   }
+
+   MapStringString getCodecDetails(const QString accountID, int payload)
+   {
+      MapStringString temp =
+         convertMap(DRing::getCodecDetails(
+               accountID.toStdString().c_str(), payload));
+      return temp;
+   }
+
+   VectorUInt getCodecList()
+   {
+      return QVector<unsigned int>::fromStdVector(DRing::getCodecList());
+   }
+
+   int getAudioInputDeviceIndex(const QString &devname)
+   {
+      return DRing::getAudioInputDeviceIndex(devname.toStdString());
+   }
+
+   QStringList getAudioInputDeviceList()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAudioInputDeviceList());
+      return temp;
+   }
+
+   QString getAudioManager()
+   {
+      QString temp(
+         DRing::getAudioManager().c_str());
+      return temp;
+   }
+
+   int getAudioOutputDeviceIndex(const QString &devname)
+   {
+      return DRing::getAudioOutputDeviceIndex(devname.toStdString());
+   }
+
+   QStringList getAudioOutputDeviceList()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAudioOutputDeviceList());
+      return temp;
+   }
+
+   QStringList getAudioPluginList()
+   {
+      QStringList temp =
+         convertStringList(DRing::getAudioPluginList());
+      return temp;
+   }
+
+   VectorMapStringString getCredentials(const QString &accountID)
+   {
+      VectorMapStringString temp;
+      for(auto x : DRing::getCredentials(accountID.toStdString())) {
+         temp.push_back(convertMap(x));
+      }
+      return temp;
+   }
+
+   QStringList getCurrentAudioDevicesIndex()
+   {
+      QStringList temp =
+         convertStringList(DRing::getCurrentAudioDevicesIndex());
+      return temp;
+   }
+
+   QString getCurrentAudioOutputPlugin()
+   {
+      QString temp(
+         DRing::getCurrentAudioOutputPlugin().c_str());
+      return temp;
+   }
+
+   int getHistoryLimit()
+   {
+      return DRing::getHistoryLimit();
+   }
+
+   MapStringString getHookSettings()
+   {
+      MapStringString temp =
+         convertMap(DRing::getHookSettings());
+      return temp;
+   }
+
+   MapStringString getIp2IpDetails()
+   {
+      MapStringString temp =
+         convertMap(DRing::getIp2IpDetails());
+      return temp;
+   }
+
+   bool getIsAlwaysRecording()
+   {
+      return DRing::getIsAlwaysRecording();
+   }
+
+   bool getNoiseSuppressState()
+   {
+      return DRing::getNoiseSuppressState();
+   }
+
+   QString getRecordPath()
+   {
+      QString temp(
+         DRing::getRecordPath().c_str());
+      return temp;
+   }
+
+   QStringList getSupportedAudioManagers()
+   {
+      QStringList temp;
+      return temp;
+   }
+
+   MapStringString getShortcuts()
+   {
+      MapStringString temp =
+         convertMap(DRing::getShortcuts());
+      return temp;
+   }
+
+   QStringList getSupportedTlsMethod()
+   {
+      QStringList temp =
+         convertStringList(DRing::getSupportedTlsMethod());
+      return temp;
+   }
+
+   MapStringString getTlsSettings()
+   {
+      MapStringString temp =
+         convertMap(DRing::getTlsSettings());
+      return temp;
+   }
+
+   MapStringString validateCertificate(const QString& unused, const QString certificate, const QString& privateKey)
+   {
+      MapStringString temp =
+         convertMap(DRing::validateCertificate(unused.toStdString(),
+                                             certificate.toStdString(),
+                                             privateKey.toStdString()));
+      return temp;
+   }
+
+   MapStringString validateCertificateRaw(const QString& unused, const QByteArray& content)
+   {
+      std::vector<unsigned char> raw(content.begin(), content.end());
+      MapStringString temp =
+         convertMap(DRing::validateCertificateRaw(unused.toStdString(), raw));
+      return temp;
+   }
+
+   MapStringString getCertificateDetails(const QString& certificate)
+   {
+      MapStringString temp =
+         convertMap(DRing::getCertificateDetails(certificate.toStdString()));
+      return temp;
+   }
+
+   MapStringString getCertificateDetailsRaw(const QByteArray& content)
+   {
+      std::vector<unsigned char> raw(content.begin(), content.end());
+      MapStringString temp =
+         convertMap(DRing::getCertificateDetailsRaw(raw));
+      return temp;
+   }
+
+   QStringList getSupportedCiphers(const QString& accountID)
+   {
+      QStringList temp =
+         convertStringList(DRing::getSupportedCiphers(accountID.toStdString()));
+      return temp;
+   }
+
+   MapStringString getTlsDefaultSettings()
+   {
+      MapStringString temp =
+         convertMap(DRing::getTlsDefaultSettings());
+      return temp;
+   }
+
+   double getVolume(const QString& device)
+   {
+      return DRing::getVolume(device.toStdString());
+   }
+
+   bool isAgcEnabled()
+   {
+      return DRing::isAgcEnabled();
+   }
+
+   bool isCaptureMuted()
+   {
+      return DRing::isCaptureMuted();
+   }
+
+   bool isDtmfMuted()
+   {
+      return DRing::isDtmfMuted();
+   }
+
+   int isIax2Enabled()
+   {
+      return DRing::isIax2Enabled();
+   }
+
+   bool isPlaybackMuted()
+   {
+      return DRing::isPlaybackMuted();
+   }
+
+   void muteCapture(bool mute)
+   {
+      DRing::muteCapture(mute);
+   }
+
+   void muteDtmf(bool mute)
+   {
+      DRing::muteDtmf(mute);
+   }
+
+   void mutePlayback(bool mute)
+   {
+      DRing::mutePlayback(mute);
+   }
+
+   void registerAllAccounts()
+   {
+      DRing::registerAllAccounts();
+   }
+
+   void removeAccount(const QString &accountID)
+   {
+      DRing::removeAccount(accountID.toStdString());
+   }
+
+   void sendRegister(const QString &accountID, bool enable)
+   {
+      DRing::sendRegister(accountID.toStdString(), enable);
+   }
+
+   void setAccountDetails(const QString &accountID, MapStringString details)
+   {
+      DRing::setAccountDetails(accountID.toStdString(),
+         convertMap(details));
+   }
+
+   void setAccountsOrder(const QString &order)
+   {
+      DRing::setAccountsOrder(order.toStdString());
+   }
+
+   void setActiveCodecList(const QString &accountID, VectorUInt &list)
+   {
+      //const std::vector<unsigned int> converted = convertStringList(list);
+      DRing::setActiveCodecList(accountID.toStdString(),
+      list.toStdVector());
+   }
+
+   void setAgcState(bool enabled)
+   {
+      DRing::setAgcState(enabled);
+   }
+
+   void setAudioInputDevice(int index)
+   {
+      DRing::setAudioInputDevice(index);
+   }
+
+   bool setAudioManager(const QString &api)
+   {
+      return DRing::setAudioManager(api.toStdString());
+   }
+
+   void setAudioOutputDevice(int index)
+   {
+      DRing::setAudioOutputDevice(index);
+   }
+
+   void setAudioPlugin(const QString &audioPlugin)
+   {
+      DRing::setAudioPlugin(audioPlugin.toStdString());
+   }
+
+   void setAudioRingtoneDevice(int index)
+   {
+      DRing::setAudioRingtoneDevice(index);
+   }
+
+   void setCredentials(const QString &accountID, VectorMapStringString credentialInformation)
+   {
+      std::vector<std::map<std::string, std::string> > temp;
+      for (auto x : credentialInformation) {
+         temp.push_back(convertMap(x));
+      }
+      DRing::setCredentials(accountID.toStdString(), temp);
+   }
+
+   void setHistoryLimit(int days)
+   {
+      DRing::setHistoryLimit(days);
+   }
+
+   void setHookSettings(MapStringString settings)
+   {
+      DRing::setHookSettings(convertMap(settings));
+   }
+
+   void setIsAlwaysRecording(bool enabled)
+   {
+      DRing::setIsAlwaysRecording(enabled);
+   }
+
+   void setNoiseSuppressState(bool state)
+   {
+      DRing::setNoiseSuppressState(state);
+   }
+
+   void setRecordPath(const QString &rec)
+   {
+      DRing::setRecordPath(rec.toStdString());
+   }
+
+   void setShortcuts(MapStringString shortcutsMap)
+   {
+      DRing::setShortcuts(convertMap(shortcutsMap));
+   }
+
+   void setTlsSettings(MapStringString details)
+   {
+      DRing::setTlsSettings(convertMap(details));
+   }
+
+   void setVolume(const QString &device, double value)
+   {
+      DRing::setVolume(device.toStdString(), value);
+   }
+
+   MapStringString getVolatileAccountDetails(const QString &accountID)
+   {
+      MapStringString temp = convertMap(DRing::getVolatileAccountDetails(accountID.toStdString()));
+      return temp;
+   }
+
+   QStringList getCertificateList()
+   {
+      return convertStringList(DRing::getCertificateList());
+   }
+
+   QString addCertificate(const QByteArray& raw)
+   {
+      const std::vector<unsigned char> r(raw.begin(), raw.end());
+      return DRing::addCertificate(r).c_str();
+   }
+
+   bool addCertificateRemote(const QString& accountId, const QString& certificateId)
+   {
+      return DRing::addCertificateRemote(accountId.toStdString(), certificateId.toStdString());
+   }
+
+   bool banCertificate(const QString& id)
+   {
+      return DRing::banCertificate(id.toStdString());
+   }
 
 Q_SIGNALS: // SIGNALS
-    void volumeChanged(const QString &device, double value);
-    void accountsChanged();
-    void historyChanged();
-    void stunStatusFailure(const QString &reason);
-    void registrationStateChanged(const QString& accountID, const QString& registration_state, unsigned detail_code, const QString& detail_str);
-    void stunStatusSuccess(const QString &message);
-    void errorAlert(int code);
-    void volatileAccountDetailsChanged(const QString &accountID, MapStringString details);
+   void volumeChanged(const QString &device, double value);
+   void accountsChanged();
+   void historyChanged();
+   void stunStatusFailure(const QString &reason);
+   void registrationStateChanged(const QString& accountID, const QString& registration_state, unsigned detail_code, const QString& detail_str);
+   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);
 
 };
 
 namespace org {
-  namespace ring {
-    namespace Ring {
-      typedef ::ConfigurationManagerInterface ConfigurationManager;
-    }
-  }
+   namespace ring {
+      namespace Ring {
+         typedef ::ConfigurationManagerInterface ConfigurationManager;
+      }
+   }
 }
 #endif
diff --git a/xml/configurationmanager-introspec.xml b/xml/configurationmanager-introspec.xml
index 80384a45..dfd10eeb 100644
--- a/xml/configurationmanager-introspec.xml
+++ b/xml/configurationmanager-introspec.xml
@@ -3,7 +3,8 @@
     <interface name="cx.ring.Ring.ConfigurationManager">
 
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-            Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
+            Used to handle the configuration stuff: accounts settings, user preferences, ...
+            TODO: move runtime account stuff in accountmanager
         </tp:docstring>
 
         <method name="getAccountTemplate" tp:name-for-bindings="getAccountTemplate">
@@ -235,6 +236,28 @@
            </arg>
        </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">
+          </arg>
+          <arg type="s" name="message" direction="in">
+          </arg>
+       </method>
+
+       <signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
+            <tp:docstring>
+                Notify clients that a new text message has been received at the account level.
+            </tp:docstring>
+           <arg type="s" name="accountID">
+           </arg>
+           <arg type="s" name="from">
+           </arg>
+           <arg type="s" name="message">
+           </arg>
+       </signal>
+
        <method name="setVolume" tp:name-for-bindings="setVolume">
            <tp:docstring>
              <p>Sets the volume using a linear scale [0,100].</p>
@@ -691,6 +714,78 @@
            </arg>
        </method>
 
+       <method name="getCertificateList" tp:name-for-bindings="getCertificateList">
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+           <arg type="as" name="details" direction="out">
+              <tp:docstring>
+               <p>A list of all certificate IDs</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="addCertificate" tp:name-for-bindings="addCertificate">
+           <arg type="ay" name="certificateRaw" direction="in">
+              <tp:docstring>
+               <p>A raw certificate</p>
+              </tp:docstring>
+           </arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="String"/>
+           <arg type="s" name="details" direction="out">
+              <tp:docstring>
+               <p>ID of the inserted certificate</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="addCertificateRemote" tp:name-for-bindings="addCertificateRemote">
+           <arg type="s" name="accountId" direction="in">
+              <tp:docstring>
+               <p>An account ID</p>
+              </tp:docstring>
+           </arg>
+           <arg type="s" name="certificateId" direction="in">
+              <tp:docstring>
+               <p>A certificate ID</p>
+              </tp:docstring>
+           </arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="Boolean"/>
+           <arg type="b" name="details" direction="out">
+              <tp:docstring>
+               <p>True if the search started</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="banCertificate" tp:name-for-bindings="banCertificate">
+           <arg type="s" name="certificateId" direction="in">
+              <tp:docstring>
+               <p>A certificate ID</p>
+              </tp:docstring>
+           </arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="Boolean"/>
+           <arg type="b" name="details" direction="out">
+              <tp:docstring>
+               <p>True if the certificate was actually banned.</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
+       <signal name="certificateAdded" tp:name-for-bindings="certificateAdded">
+            <tp:docstring>
+                Notify clients that a certificate have been added to the store.
+            </tp:docstring>
+           <arg type="s" name="certId">
+           </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">
+           </arg>
+       </signal>
+
        <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
            <arg type="s" name="interface" direction="in">
            </arg>
-- 
GitLab