added option for private api keys

This commit is contained in:
Boernsman 2020-10-22 09:36:11 +02:00
parent a89e442835
commit 602c4e6614
3 changed files with 36 additions and 6 deletions

View File

@ -29,9 +29,10 @@ Besides the air pollution level the plug-in also states a cautionary statement.
Both states can be used to let nymea notify you about the pollution level and Both states can be used to let nymea notify you about the pollution level and
inform you what precautions should be taken. inform you what precautions should be taken.
## Requirments ## Requirements
* Valid "Air Quality Index" API Key * Valid "Air Quality Index" API Key
* This might be provided through the nymea community API Key provider or an own key in the nymead.conf file.
* The package "nymea-plugin-airqualityindex" must be installed * The package "nymea-plugin-airqualityindex" must be installed
* Internet connection * Internet connection
@ -39,3 +40,8 @@ inform you what precautions should be taken.
More about the different Air Quality Levels: https://www.airnow.gov/index.cfm?action=aqibasics.aqi More about the different Air Quality Levels: https://www.airnow.gov/index.cfm?action=aqibasics.aqi
Personal API Key settings in 'nymead.conf':
'''
[aqi]
apiKey="123456789abcdfgh"
'''

View File

@ -30,6 +30,7 @@
#include "integrationpluginaqi.h" #include "integrationpluginaqi.h"
#include "plugininfo.h" #include "plugininfo.h"
#include "nymeasettings.h"
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
@ -41,10 +42,9 @@ IntegrationPluginAqi::IntegrationPluginAqi()
void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info)
{ {
if (!m_aqiConnection) { if (!m_aqiConnection) {
QString apiKey = apiKeyStorage()->requestKey("aqi").data("apiKey"); QString apiKey = getApiKey();
if (apiKey.isEmpty()) { if (apiKey.isEmpty())
return info->finish(Thing::ThingErrorHardwareNotAvailable, tr("No API key is set.")); return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("API key is not available."));
}
m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this); m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this);
connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted); connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted);
connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived); connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived);
@ -68,7 +68,9 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info)
{ {
if (info->thing()->thingClassId() == airQualityIndexThingClassId) { if (info->thing()->thingClassId() == airQualityIndexThingClassId) {
if (!m_aqiConnection) { if (!m_aqiConnection) {
QString apiKey = apiKeyStorage()->requestKey("aqi").data("apiKey"); QString apiKey = getApiKey();
if (apiKey.isEmpty())
return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("API key is not available."));
m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this); m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this);
connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted); connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted);
connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived); connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived);
@ -118,6 +120,27 @@ void IntegrationPluginAqi::postSetupThing(Thing *thing)
} }
} }
QString IntegrationPluginAqi::getApiKey()
{
QString apiKey;
QSettings settings(NymeaSettings::settingsPath() + "/nymead.conf", QSettings::IniFormat);
settings.beginGroup("aqi");
if (settings.contains("apiKey")) {
apiKey = settings.value("apiKey").toString();
QString printedCopy = apiKey;
qCDebug(dcAirQualityIndex()) << "Using custom API key:" << printedCopy.replace(printedCopy.length() - 10, 10, "**********");
}
settings.endGroup();
if (apiKey.isEmpty()) {
apiKey = apiKeyStorage()->requestKey("aqi").data("apiKey");
}
if (apiKey.isEmpty()) {
qCWarning(dcAirQualityIndex()) << "Could not find any API key for AQI";
}
return apiKey;
}
void IntegrationPluginAqi::thingRemoved(Thing *thing) void IntegrationPluginAqi::thingRemoved(Thing *thing)
{ {
Q_UNUSED(thing) Q_UNUSED(thing)

View File

@ -62,6 +62,7 @@ private:
QHash<QUuid, ThingDiscoveryInfo *> m_asyncDiscovery; QHash<QUuid, ThingDiscoveryInfo *> m_asyncDiscovery;
QHash<QUuid, ThingSetupInfo *> m_asyncSetups; QHash<QUuid, ThingSetupInfo *> m_asyncSetups;
QHash<QUuid, ThingId> m_asyncRequests; QHash<QUuid, ThingId> m_asyncRequests;
QString getApiKey();
private slots: private slots:
void onPluginTimer(); void onPluginTimer();