Minor fixes

This commit is contained in:
iranl
2024-11-03 14:11:08 +01:00
parent 616a60539d
commit 020b16bfea
8 changed files with 177 additions and 160 deletions

View File

@@ -4,7 +4,7 @@
#define NUKI_HUB_VERSION "9.02" #define NUKI_HUB_VERSION "9.02"
#define NUKI_HUB_BUILD "unknownbuildnr" #define NUKI_HUB_BUILD "unknownbuildnr"
#define NUKI_HUB_DATE "2024-11-02" #define NUKI_HUB_DATE "2024-11-03"
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest" #define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json" #define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"

View File

@@ -540,7 +540,7 @@ void NukiOpenerWrapper::updateConfig()
if(_preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId) if(_preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId)
{ {
_hasKeypad = _nukiConfig.hasKeypad == 1 || _nukiConfig.hasKeypadV2 == 1; _hasKeypad = _nukiConfig.hasKeypad == 1 || (_nukiConfig.hasKeypadV2 > 0 && _nukiConfig.hasKeypadV2 != 252);
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]); _firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
if(_preferences->getBool(preference_conf_info_enabled, true)) if(_preferences->getBool(preference_conf_info_enabled, true))
@@ -3879,11 +3879,20 @@ BleScanner::Scanner *NukiOpenerWrapper::bleScanner()
void NukiOpenerWrapper::notify(Nuki::EventType eventType) void NukiOpenerWrapper::notify(Nuki::EventType eventType)
{ {
if(!_pairedAsApp && eventType == Nuki::EventType::KeyTurnerStatusUpdated && !_statusUpdated) if(eventType == Nuki::EventType::KeyTurnerStatusReset)
{ {
Log->println("KeyTurnerStatusUpdated"); _newSignal = false;
_statusUpdated = true; }
_network->publishStatusUpdated(_statusUpdated); else if(eventType == Nuki::EventType::KeyTurnerStatusUpdated)
{
if(!_statusUpdated && !_newSignal)
{
_newSignal = true;
Log->println("KeyTurnerStatusUpdated");
_statusUpdated = true;
_statusUpdatedTs = espMillis();
_network->publishStatusUpdated(_statusUpdated);
}
} }
} }

View File

@@ -135,12 +135,14 @@ private:
bool _paired = false; bool _paired = false;
bool _statusUpdated = false; bool _statusUpdated = false;
bool _newSignal = false;
bool _hasKeypad = false; bool _hasKeypad = false;
bool _keypadEnabled = false; bool _keypadEnabled = false;
uint _maxKeypadCodeCount = 0; uint _maxKeypadCodeCount = 0;
uint _maxTimeControlEntryCount = 0; uint _maxTimeControlEntryCount = 0;
uint _maxAuthEntryCount = 0; uint _maxAuthEntryCount = 0;
int _rssiPublishInterval = 0; int _rssiPublishInterval = 0;
int64_t _statusUpdatedTs = 0;
int64_t _nextLockStateUpdateTs = 0; int64_t _nextLockStateUpdateTs = 0;
int64_t _nextBatteryReportTs = 0; int64_t _nextBatteryReportTs = 0;
int64_t _nextConfigUpdateTs = 0; int64_t _nextConfigUpdateTs = 0;

View File

@@ -628,7 +628,7 @@ void NukiWrapper::updateConfig()
if(_preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId) if(_preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId)
{ {
_hasKeypad = _nukiConfig.hasKeypad == 1 || _nukiConfig.hasKeypadV2 == 1; _hasKeypad = _nukiConfig.hasKeypad == 1 || (_nukiConfig.hasKeypadV2 > 0 && _nukiConfig.hasKeypadV2 != 252);
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]); _firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
if(_preferences->getBool(preference_conf_info_enabled, true)) if(_preferences->getBool(preference_conf_info_enabled, true))
@@ -3998,12 +3998,20 @@ void NukiWrapper::notify(Nuki::EventType eventType)
} }
else else
{ {
if(!_pairedAsApp && eventType == Nuki::EventType::KeyTurnerStatusUpdated && !_statusUpdated) if(eventType == Nuki::EventType::KeyTurnerStatusReset)
{ {
Log->println("KeyTurnerStatusUpdated"); _newSignal = false;
_statusUpdated = true; }
_statusUpdatedTs = espMillis(); else if(eventType == Nuki::EventType::KeyTurnerStatusUpdated)
_network->publishStatusUpdated(_statusUpdated); {
if(!_statusUpdated && !_newSignal)
{
_newSignal = true;
Log->println("KeyTurnerStatusUpdated");
_statusUpdated = true;
_statusUpdatedTs = espMillis();
_network->publishStatusUpdated(_statusUpdated);
}
} }
} }
} }

View File

@@ -134,6 +134,7 @@ private:
bool _pairedAsApp = false; bool _pairedAsApp = false;
bool _paired = false; bool _paired = false;
bool _statusUpdated = false; bool _statusUpdated = false;
bool _newSignal = false;
bool _hasKeypad = false; bool _hasKeypad = false;
bool _keypadEnabled = false; bool _keypadEnabled = false;
uint _maxKeypadCodeCount = 0; uint _maxKeypadCodeCount = 0;

View File

@@ -78,10 +78,10 @@ void WebCfgServer::initialize()
{ {
_psychicServer->on("/", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
if(!_network->isApOpen()) if(!_network->isApOpen())
{ {
#ifndef NUKI_HUB_UPDATER #ifndef NUKI_HUB_UPDATER
@@ -100,26 +100,26 @@ void WebCfgServer::initialize()
_psychicServer->on("/style.css", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/style.css", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return sendCss(request); return sendCss(request);
}); });
_psychicServer->on("/favicon.ico", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/favicon.ico", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return sendFavicon(request); return sendFavicon(request);
}); });
_psychicServer->on("/reboot", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/reboot", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
String value = ""; String value = "";
if(request->hasParam("CONFIRMTOKEN")) if(request->hasParam("CONFIRMTOKEN"))
@@ -150,15 +150,15 @@ void WebCfgServer::initialize()
#ifndef CONFIG_IDF_TARGET_ESP32H2 #ifndef CONFIG_IDF_TARGET_ESP32H2
_psychicServer->on("/ssidlist", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/ssidlist", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildSSIDListHtml(request); return buildSSIDListHtml(request);
}); });
_psychicServer->on("/savewifi", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/savewifi", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
@@ -181,117 +181,117 @@ void WebCfgServer::initialize()
#ifndef NUKI_HUB_UPDATER #ifndef NUKI_HUB_UPDATER
_psychicServer->on("/import", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/import", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
String message = ""; String message = "";
bool restart = processImport(request, message); bool restart = processImport(request, message);
return buildConfirmHtml(request, message, 3, true); return buildConfirmHtml(request, message, 3, true);
}); });
_psychicServer->on("/export", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/export", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return sendSettings(request); return sendSettings(request);
}); });
_psychicServer->on("/impexpcfg", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/impexpcfg", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildImportExportHtml(request); return buildImportExportHtml(request);
}); });
_psychicServer->on("/status", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/status", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildStatusHtml(request); return buildStatusHtml(request);
}); });
_psychicServer->on("/acclvl", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/acclvl", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildAccLvlHtml(request); return buildAccLvlHtml(request);
}); });
_psychicServer->on("/custntw", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/custntw", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildCustomNetworkConfigHtml(request); return buildCustomNetworkConfigHtml(request);
}); });
_psychicServer->on("/advanced", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/advanced", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildAdvancedConfigHtml(request); return buildAdvancedConfigHtml(request);
}); });
_psychicServer->on("/cred", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/cred", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildCredHtml(request); return buildCredHtml(request);
}); });
_psychicServer->on("/ntwconfig", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/ntwconfig", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildNetworkConfigHtml(request); return buildNetworkConfigHtml(request);
}); });
_psychicServer->on("/mqttconfig", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/mqttconfig", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildMqttConfigHtml(request); return buildMqttConfigHtml(request);
}); });
_psychicServer->on("/nukicfg", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/nukicfg", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildNukiConfigHtml(request); return buildNukiConfigHtml(request);
}); });
_psychicServer->on("/gpiocfg", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/gpiocfg", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildGpioConfigHtml(request); return buildGpioConfigHtml(request);
}); });
#ifndef CONFIG_IDF_TARGET_ESP32H2 #ifndef CONFIG_IDF_TARGET_ESP32H2
_psychicServer->on("/wifi", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/wifi", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildConfigureWifiHtml(request); return buildConfigureWifiHtml(request);
}); });
_psychicServer->on("/wifimanager", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/wifimanager", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
if(_allowRestartToPortal) if(_allowRestartToPortal)
{ {
esp_err_t res = buildConfirmHtml(request, "Restarting. Connect to ESP access point (\"NukiHub\" with password \"NukiHubESP32\") to reconfigure Wi-Fi.", 0); esp_err_t res = buildConfirmHtml(request, "Restarting. Connect to ESP access point (\"NukiHub\" with password \"NukiHubESP32\") to reconfigure Wi-Fi.", 0);
@@ -304,70 +304,70 @@ void WebCfgServer::initialize()
#endif #endif
_psychicServer->on("/unpairlock", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/unpairlock", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return processUnpair(request, false); return processUnpair(request, false);
}); });
_psychicServer->on("/unpairopener", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/unpairopener", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return processUnpair(request, true); return processUnpair(request, true);
}); });
_psychicServer->on("/factoryreset", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/factoryreset", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return processFactoryReset(request); return processFactoryReset(request);
}); });
_psychicServer->on("/infopg", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/info", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildInfoHtml(request); return buildInfoHtml(request);
}); });
_psychicServer->on("/debugon", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/debugon", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
_preferences->putBool(preference_publish_debug_info, true); _preferences->putBool(preference_publish_debug_info, true);
return buildConfirmHtml(request, "Debug On", 3, true); return buildConfirmHtml(request, "Debug On", 3, true);
}); });
_psychicServer->on("/debugoff", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/debugoff", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
_preferences->putBool(preference_publish_debug_info, false); _preferences->putBool(preference_publish_debug_info, false);
return buildConfirmHtml(request, "Debug Off", 3, true); return buildConfirmHtml(request, "Debug Off", 3, true);
}); });
_psychicServer->on("/savecfg", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/savecfg", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
String message = ""; String message = "";
bool restart = processArgs(request, message); bool restart = processArgs(request, message);
return buildConfirmHtml(request, message, 3, true); return buildConfirmHtml(request, message, 3, true);
}); });
_psychicServer->on("/savegpiocfg", HTTP_POST, [&](PsychicRequest *request) _psychicServer->on("/savegpiocfg", HTTP_POST, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
processGpioArgs(request); processGpioArgs(request);
esp_err_t res = buildConfirmHtml(request, "Saving GPIO configuration. Restarting.", 3, true); esp_err_t res = buildConfirmHtml(request, "Saving GPIO configuration. Restarting.", 3, true);
Log->println(F("Restarting")); Log->println(F("Restarting"));
@@ -378,26 +378,26 @@ void WebCfgServer::initialize()
#endif #endif
_psychicServer->on("/ota", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/ota", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildOtaHtml(request); return buildOtaHtml(request);
}); });
_psychicServer->on("/otadebug", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/otadebug", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return buildOtaHtml(request, true); return buildOtaHtml(request, true);
}); });
_psychicServer->on("/reboottoota", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/reboottoota", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
String value = ""; String value = "";
if(request->hasParam("CONFIRMTOKEN")) if(request->hasParam("CONFIRMTOKEN"))
{ {
@@ -424,10 +424,10 @@ void WebCfgServer::initialize()
}); });
_psychicServer->on("/autoupdate", HTTP_GET, [&](PsychicRequest *request) _psychicServer->on("/autoupdate", HTTP_GET, [&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
#ifndef NUKI_HUB_UPDATER #ifndef NUKI_HUB_UPDATER
return processUpdate(request); return processUpdate(request);
#else #else
@@ -438,20 +438,20 @@ void WebCfgServer::initialize()
PsychicUploadHandler *updateHandler = new PsychicUploadHandler(); PsychicUploadHandler *updateHandler = new PsychicUploadHandler();
updateHandler->onUpload([&](PsychicRequest *request, const String& filename, uint64_t index, uint8_t *data, size_t len, bool final) updateHandler->onUpload([&](PsychicRequest *request, const String& filename, uint64_t index, uint8_t *data, size_t len, bool final)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
return handleOtaUpload(request, filename, index, data, len, final); return handleOtaUpload(request, filename, index, data, len, final);
} }
); );
updateHandler->onRequest([&](PsychicRequest *request) updateHandler->onRequest([&](PsychicRequest *request)
{ {
if(strlen(_credUser) > 0 && strlen(_credPassword) > 0) if(!request->authenticate(_credUser, _credPassword)) if(strlen(_credUser) > 0 && strlen(_credPassword) > 0 && !request->authenticate(_credUser, _credPassword))
{ {
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in."); return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
} }
String result; String result;
if (!Update.hasError()) if (!Update.hasError())
@@ -586,9 +586,8 @@ esp_err_t WebCfgServer::buildWifiConnectHtml(PsychicRequest *request)
response.print("</table>"); response.print("</table>");
response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">"); response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">");
response.print("</form>"); response.print("</form>");
response.print("<form action=\"/reboot?CONFIRMTOKEN="); response.print("<form action=\"/reboot\" method=\"get\"><br>");
response.print(_confirmCode); response.print("<input type=\"hidden\" name=\"CONFIRMTOKEN\" value=\"" + _confirmCode + "\" /><input type=\"submit\" value=\"Reboot\" /></form>");
response.print("\" method=\"get\"><br><input type=\"submit\" value=\"Reboot\" /></form>");
response.print("</body></html>"); response.print("</body></html>");
return response.endSend(); return response.endSend();
} }
@@ -882,9 +881,8 @@ esp_err_t WebCfgServer::buildOtaHtml(PsychicRequest *request, bool debug)
response.print("<h4><a onclick=\"hideshowmanual();\">Manually update Nuki Hub</a></h4><div id=\"manualupdate\" style=\"display: none\">"); response.print("<h4><a onclick=\"hideshowmanual();\">Manually update Nuki Hub</a></h4><div id=\"manualupdate\" style=\"display: none\">");
response.print("<div id=\"rebootform\"><h4>Reboot to Nuki Hub Updater</h4>"); response.print("<div id=\"rebootform\"><h4>Reboot to Nuki Hub Updater</h4>");
response.print("Click on the button to reboot to the Nuki Hub updater, where you can select the latest Nuki Hub binary to update"); response.print("Click on the button to reboot to the Nuki Hub updater, where you can select the latest Nuki Hub binary to update");
response.print("<form action=\"/reboottoota?CONFIRMTOKEN="); response.print("<form action=\"/reboottoota\" method=\"get\"><br>");
response.print(_confirmCode); response.print("<input type=\"hidden\" name=\"CONFIRMTOKEN\" value=\"" + _confirmCode + "\" /><input type=\"submit\" value=\"Reboot to Nuki Hub Updater\" /></form><br><br></div>");
response.print("\" method=\"get\"><br><input type=\"submit\" value=\"Reboot to Nuki Hub Updater\" /></form><br><br></div>");
response.print("<div id=\"upform\"><h4>Update Nuki Hub Updater</h4>"); response.print("<div id=\"upform\"><h4>Update Nuki Hub Updater</h4>");
response.print("Select the latest Nuki Hub updater binary to update the Nuki Hub updater"); response.print("Select the latest Nuki Hub updater binary to update the Nuki Hub updater");
response.print("<form enctype=\"multipart/form-data\" action=\"/uploadota\" method=\"post\">Choose the nuki_hub_updater.bin file to upload: <input name=\"uploadedfile\" type=\"file\" accept=\".bin\" /><br/>"); response.print("<form enctype=\"multipart/form-data\" action=\"/uploadota\" method=\"post\">Choose the nuki_hub_updater.bin file to upload: <input name=\"uploadedfile\" type=\"file\" accept=\".bin\" /><br/>");
@@ -894,9 +892,8 @@ esp_err_t WebCfgServer::buildOtaHtml(PsychicRequest *request, bool debug)
response.print("<div id=\"manualupdate\">"); response.print("<div id=\"manualupdate\">");
response.print("<div id=\"rebootform\"><h4>Reboot to Nuki Hub</h4>"); response.print("<div id=\"rebootform\"><h4>Reboot to Nuki Hub</h4>");
response.print("Click on the button to reboot to Nuki Hub"); response.print("Click on the button to reboot to Nuki Hub");
response.print("<form action=\"/reboottoota?CONFIRMTOKEN="); response.print("<form action=\"/reboottoota\" method=\"get\"><br>");
response.print(_confirmCode); response.print("<input type=\"hidden\" name=\"CONFIRMTOKEN\" value=\"" + _confirmCode + "\" /><input type=\"submit\" value=\"Reboot to Nuki Hub\" /></form><br><br></div>");
response.print("\" method=\"get\"><br><input type=\"submit\" value=\"Reboot to Nuki Hub\" /></form><br><br></div>");
response.print("<div id=\"upform\"><h4>Update Nuki Hub</h4>"); response.print("<div id=\"upform\"><h4>Update Nuki Hub</h4>");
response.print("Select the latest Nuki Hub binary to update Nuki Hub"); response.print("Select the latest Nuki Hub binary to update Nuki Hub");
response.print("<form enctype=\"multipart/form-data\" action=\"/uploadota\" method=\"post\">Choose the nuki_hub.bin file to upload: <input name=\"uploadedfile\" type=\"file\" accept=\".bin\" /><br/>"); response.print("<form enctype=\"multipart/form-data\" action=\"/uploadota\" method=\"post\">Choose the nuki_hub.bin file to upload: <input name=\"uploadedfile\" type=\"file\" accept=\".bin\" /><br/>");
@@ -3345,7 +3342,7 @@ esp_err_t WebCfgServer::buildHtml(PsychicRequest *request)
printParameter(&response, "Nuki Opener PIN status", openerState.c_str(), "", "openerPin"); printParameter(&response, "Nuki Opener PIN status", openerState.c_str(), "", "openerPin");
} }
} }
printParameter(&response, "Firmware", NUKI_HUB_VERSION, "/infopg", "firmware"); printParameter(&response, "Firmware", NUKI_HUB_VERSION, "/info", "firmware");
if(_preferences->getBool(preference_check_updates)) if(_preferences->getBool(preference_check_updates))
{ {
printParameter(&response, "Latest Firmware", _preferences->getString(preference_latest_version).c_str(), "/ota", "ota"); printParameter(&response, "Latest Firmware", _preferences->getString(preference_latest_version).c_str(), "/ota", "ota");

View File

@@ -500,9 +500,11 @@ void setup()
if(!doOta) if(!doOta)
{ {
psychicServer = new PsychicHttpServer; psychicServer = new PsychicHttpServer;
psychicServer->config.max_uri_handlers = 40;
psychicServer->config.stack_size = HTTPD_TASK_SIZE;
psychicServer->listen(80);
webCfgServer = new WebCfgServer(network, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType, psychicServer); webCfgServer = new WebCfgServer(network, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType, psychicServer);
webCfgServer->initialize(); webCfgServer->initialize();
psychicServer->listen(80);
psychicServer->onNotFound([](PsychicRequest* request) psychicServer->onNotFound([](PsychicRequest* request)
{ {
return request->redirect("/"); return request->redirect("/");
@@ -591,8 +593,6 @@ void setup()
psychicServer = new PsychicHttpServer; psychicServer = new PsychicHttpServer;
psychicServer->config.max_uri_handlers = 40; psychicServer->config.max_uri_handlers = 40;
psychicServer->config.stack_size = HTTPD_TASK_SIZE; psychicServer->config.stack_size = HTTPD_TASK_SIZE;
psychicServer->maxUploadSize = 8192;
psychicServer->maxRequestBodySize = 8192;
psychicServer->listen(80); psychicServer->listen(80);
if(forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true)) if(forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true))