diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index ea70c16..f0635fc 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -3,7 +3,7 @@ #include "PreferencesKeys.h" WebCfgServer::WebCfgServer(NukiWrapper* nuki, Network* network, Preferences* preferences) -: _wifiServer(80), +: server(80), _nuki(nuki), _network(network), _preferences(preferences) @@ -12,212 +12,151 @@ WebCfgServer::WebCfgServer(NukiWrapper* nuki, Network* network, Preferences* pre void WebCfgServer::initialize() { - _wifiServer.begin(); + server.on("/", [&]() { +// if (!server.authenticate(www_username, www_password)) { +// return server.requestAuthentication(); +// } + String response = ""; + serveHtml(response); + server.send(200, "text/html", response); + }); + server.on("/method=get", [&]() { +// if (!server.authenticate(www_username, www_password)) { +// return server.requestAuthentication(); +// } + processArgs(); + server.send(200, "text/plain", "Configuration saved ... restarting."); + }); + + server.begin(); +} + +void WebCfgServer::processArgs() +{ + bool configChanged = false; + bool clearCredentials = false; + + int count = server.args(); + for(int index = 0; index < count; index++) + { + String key = server.argName(index); + String value = server.arg(index); + +// Serial.print(key); +// Serial.print(" = "); +// Serial.println(value); + + if(key == "MQTTSERVER") + { + _preferences->putString(preference_mqtt_broker, value); + configChanged = true; + } + else if(key == "MQTTPORT") + { + _preferences->putInt(preference_mqtt_broker_port, value.toInt()); + configChanged = true; + } + else if(key == "MQTTUSER") + { + if(value == "#") + { + clearCredentials = true; + } + else + { + _preferences->putString(preference_mqtt_user, value); + configChanged = true; + } + } + else if(key == "MQTTPASS") + { + if(value != "*") + { + _preferences->putString(preference_mqtt_password, value); + configChanged = true; + } + } + else if(key == "MQTTPATH") + { + _preferences->putString(preference_mqtt_path, value); + configChanged = true; + } + else if(key == "LSTINT") + { + _preferences->putInt(preference_query_interval_lockstate, value.toInt()); + configChanged = true; + } + else if(key == "BATINT") + { + _preferences->putInt(preference_query_interval_battery, value.toInt()); + configChanged = true; + } + } + + if(clearCredentials) + { + _preferences->putString(preference_mqtt_user, ""); + _preferences->putString(preference_mqtt_password, ""); + configChanged = true; + } + + if(configChanged) + { + _enabled = false; + _preferences->end(); + Serial.println(F("Restarting")); + vTaskDelay( 200 / portTICK_PERIOD_MS); + ESP.restart(); + } } void WebCfgServer::update() { if(!_enabled) return; - bool configChanged = false; - - // Create a client connections - WiFiClient client = _wifiServer.available(); - - if (client) - { - int index = 0; - char message[500]; - - - while (client.connected()) - { - if (client.available()) - { - char c = client.read(); - - //read char by char HTTP request - if (index < sizeof(message) - 1) - { - message[index] = c; - index++; - } - message[index] = 0; - - //if HTTP request has ended - if (c == '\n') - { - serveHtml(client); - vTaskDelay( 5 / portTICK_PERIOD_MS); - //stopping client - client.stop(); - } - } - } - - char *token = strtok(message, "?=&"); - char *lastToken = NULL; - - bool configChanged = false; - bool clearCredentials = false; - while (token != NULL) - { - if(lastToken != NULL) - { - TokenType lastTokenType = getParameterType(lastToken); - TokenType tokenType = getParameterType(token); - - if(lastTokenType == TokenType::MqttServer && tokenType == TokenType::None) - { - _preferences->putString(preference_mqtt_broker, token); - configChanged = true; - } - else if(lastTokenType == TokenType::MqttPort && tokenType == TokenType::None) - { - _preferences->putInt(preference_mqtt_broker_port, String(token).toInt()); - configChanged = true; - } - else if(lastTokenType == TokenType::MqttUser && tokenType == TokenType::None) - { - char* c = "%23"; - if(strcmp(token, c) == 0) - { - clearCredentials = true; - } - else - { - _preferences->putString(preference_mqtt_user, token); - configChanged = true; - } - } - else if(lastTokenType == TokenType::MqttPass && tokenType == TokenType::None) - { - char* c = "*"; - if(strcmp(token, c) != 0) - { - _preferences->putString(preference_mqtt_password, token); - configChanged = true; - } - } - else if(lastTokenType == TokenType::MqttPath && tokenType == TokenType::None) - { - _preferences->putString(preference_mqtt_path, token); - configChanged = true; - } - else if(lastTokenType == TokenType::QueryIntervalLockstate && tokenType == TokenType::None) - { - _preferences->putInt(preference_query_interval_lockstate, String(token).toInt()); - configChanged = true; - } - else if(lastTokenType == TokenType::QueryIntervalBattery && tokenType == TokenType::None) - { - _preferences->putInt(preference_query_interval_battery, String(token).toInt()); - configChanged = true; - } - } - lastToken = token; - token = strtok(NULL, "?=&"); - } - - if(clearCredentials) - { - _preferences->putString(preference_mqtt_user, ""); - _preferences->putString(preference_mqtt_password, ""); - configChanged = true; - } - - if(configChanged) - { - _enabled = false; - _preferences->end(); - Serial.println(F("Restarting")); - vTaskDelay( 200 / portTICK_PERIOD_MS); - ESP.restart(); - } - } - + server.handleClient(); vTaskDelay(200 / portTICK_PERIOD_MS); - } -void WebCfgServer::serveHtml(WiFiClient &client) +void WebCfgServer::serveHtml(String& response) { - client.println("HTTP/1.1 200 OK"); - client.println("Content-Type: text/html"); - client.println(); - - client.println(""); - client.println("
"); - client.println("