setting: fixed an issue where multiple configuration items were not applied.

Signed-off-by: YoungSoo Shin <shinys000114@gmail.com>
This commit is contained in:
2025-12-15 18:20:36 +09:00
committed by Youngsoo Shin
parent dde9611058
commit 83ba6d4e42
3 changed files with 48 additions and 38 deletions

View File

@@ -187,6 +187,10 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
cJSON* new_username_item = cJSON_GetObjectItem(root, "new_username"); cJSON* new_username_item = cJSON_GetObjectItem(root, "new_username");
cJSON* new_password_item = cJSON_GetObjectItem(root, "new_password"); cJSON* new_password_item = cJSON_GetObjectItem(root, "new_password");
bool action_taken = false;
cJSON* resp_root = cJSON_CreateObject();
if (mode_item && cJSON_IsString(mode_item)) if (mode_item && cJSON_IsString(mode_item))
{ {
const char* mode = mode_item->valuestring; const char* mode = mode_item->valuestring;
@@ -203,12 +207,6 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
{ {
nconfig_write(AP_SSID, ap_ssid_item->valuestring); nconfig_write(AP_SSID, ap_ssid_item->valuestring);
} }
else
{
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "AP SSID required for APSTA mode");
cJSON_Delete(root);
return ESP_FAIL;
}
if (ap_pass_item && cJSON_IsString(ap_pass_item)) if (ap_pass_item && cJSON_IsString(ap_pass_item))
{ {
@@ -216,19 +214,17 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
} }
else else
{ {
nconfig_delete(AP_PASSWORD); // Open network nconfig_delete(AP_PASSWORD);
} }
} }
wifi_switch_mode(mode); wifi_switch_mode(mode);
httpd_resp_sendstr(req, "{\"status\":\"mode_switch_initiated\"}"); cJSON_AddStringToObject(resp_root, "mode_status", "initiated");
} action_taken = true;
else
{
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid mode");
} }
} }
else if (net_type_item && cJSON_IsString(net_type_item))
if (net_type_item && cJSON_IsString(net_type_item))
{ {
const char* type = net_type_item->valuestring; const char* type = net_type_item->valuestring;
ESP_LOGI(TAG, "Received network config: %s", type); ESP_LOGI(TAG, "Received network config: %s", type);
@@ -260,50 +256,52 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
nconfig_delete(NETIF_DNS2); nconfig_delete(NETIF_DNS2);
wifi_use_static(ip, gw, sn, d1, d2); wifi_use_static(ip, gw, sn, d1, d2);
httpd_resp_sendstr(req, "{\"status\":\"static_config_applied\"}"); cJSON_AddStringToObject(resp_root, "net_status", "static_applied");
} action_taken = true;
else
{
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Missing static IP fields");
} }
} }
else if (strcmp(type, "dhcp") == 0) else if (strcmp(type, "dhcp") == 0)
{ {
nconfig_write(NETIF_TYPE, "dhcp"); nconfig_write(NETIF_TYPE, "dhcp");
wifi_use_dhcp(); wifi_use_dhcp();
httpd_resp_sendstr(req, "{\"status\":\"dhcp_config_applied\"}"); cJSON_AddStringToObject(resp_root, "net_status", "dhcp_applied");
action_taken = true;
} }
} }
else if (ssid_item && cJSON_IsString(ssid_item))
// 3. WiFi Connect - [수정] else if -> if
if (ssid_item && cJSON_IsString(ssid_item))
{ {
cJSON* pass_item = cJSON_GetObjectItem(root, "password"); cJSON* pass_item = cJSON_GetObjectItem(root, "password");
if (cJSON_IsString(pass_item)) if (cJSON_IsString(pass_item))
{ {
httpd_resp_sendstr(req, "{\"status\":\"connection_initiated\"}");
wifi_sta_set_ap(ssid_item->valuestring, pass_item->valuestring); wifi_sta_set_ap(ssid_item->valuestring, pass_item->valuestring);
} cJSON_AddStringToObject(resp_root, "wifi_status", "connecting");
else action_taken = true;
{
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Password required");
} }
} }
else if (baud_item && cJSON_IsString(baud_item))
// 4. Baudrate - [수정] else if -> if
if (baud_item && cJSON_IsString(baud_item))
{ {
const char* baudrate = baud_item->valuestring; const char* baudrate = baud_item->valuestring;
ESP_LOGI(TAG, "Received baudrate set request: %s", baudrate); ESP_LOGI(TAG, "Received baudrate set request: %s", baudrate);
nconfig_write(UART_BAUD_RATE, baudrate); nconfig_write(UART_BAUD_RATE, baudrate);
change_baud_rate(strtol(baudrate, NULL, 10)); change_baud_rate(strtol(baudrate, NULL, 10));
httpd_resp_sendstr(req, "{\"status\":\"baudrate_updated\"}"); cJSON_AddStringToObject(resp_root, "baudrate_status", "updated");
action_taken = true;
} }
else if (period_item && cJSON_IsString(period_item))
if (period_item && cJSON_IsString(period_item))
{ {
const char* period_str = period_item->valuestring; const char* period_str = period_item->valuestring;
ESP_LOGI(TAG, "Received period set request: %s", period_str); ESP_LOGI(TAG, "Received period set request: %s", period_str);
update_sensor_period(strtol(period_str, NULL, 10)); update_sensor_period(strtol(period_str, NULL, 10));
httpd_resp_sendstr(req, "{\"status\":\"period_updated\"}"); cJSON_AddStringToObject(resp_root, "period_status", "updated");
action_taken = true;
} }
else if (vin_climit_item || main_climit_item || usb_climit_item)
if (vin_climit_item || main_climit_item || usb_climit_item)
{ {
char num_buf[10]; char num_buf[10];
if (vin_climit_item && cJSON_IsNumber(vin_climit_item)) if (vin_climit_item && cJSON_IsNumber(vin_climit_item))
@@ -336,10 +334,12 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
climit_set_usb(val); climit_set_usb(val);
} }
} }
httpd_resp_sendstr(req, "{\"status\":\"current_limit_updated\"}"); cJSON_AddStringToObject(resp_root, "climit_status", "updated");
action_taken = true;
} }
else if (new_username_item && cJSON_IsString(new_username_item) && new_password_item &&
cJSON_IsString(new_password_item)) if (new_username_item && cJSON_IsString(new_username_item) && new_password_item &&
cJSON_IsString(new_password_item))
{ {
const char* new_username = new_username_item->valuestring; const char* new_username = new_username_item->valuestring;
const char* new_password = new_password_item->valuestring; const char* new_password = new_password_item->valuestring;
@@ -347,13 +347,23 @@ static esp_err_t setting_post_handler(httpd_req_t* req)
nconfig_write(PAGE_USERNAME, new_username); nconfig_write(PAGE_USERNAME, new_username);
nconfig_write(PAGE_PASSWORD, new_password); nconfig_write(PAGE_PASSWORD, new_password);
ESP_LOGI(TAG, "Username and password updated successfully."); ESP_LOGI(TAG, "Username and password updated successfully.");
httpd_resp_sendstr(req, "{\"status\":\"user_credentials_updated\"}"); cJSON_AddStringToObject(resp_root, "auth_status", "updated");
action_taken = true;
}
if (action_taken)
{
cJSON_AddStringToObject(resp_root, "status", "ok");
char* resp_str = cJSON_PrintUnformatted(resp_root);
httpd_resp_sendstr(req, resp_str);
free(resp_str);
} }
else else
{ {
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid payload"); httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid payload or no known parameters");
} }
cJSON_Delete(resp_root);
cJSON_Delete(root); cJSON_Delete(root);
return ESP_OK; return ESP_OK;
} }

View File

@@ -202,7 +202,7 @@ async function handleUserSettingsSubmit(event) {
try { try {
const response = await api.updateUserSettings(newUsername, newPassword); const response = await api.updateUserSettings(newUsername, newPassword);
if (response && response.status === 'user_credentials_updated') { if (response && (response.status === 'ok' || response.auth_status === 'updated')) {
alert('Username and password updated successfully. Please log in again with new credentials.'); alert('Username and password updated successfully. Please log in again with new credentials.');
handleLogout(); // Force logout to re-authenticate with new credentials handleLogout(); // Force logout to re-authenticate with new credentials
} else { } else {

View File

@@ -184,7 +184,7 @@ export async function connectToWifi() {
try { try {
const result = await api.postWifiConnect(ssid, password); const result = await api.postWifiConnect(ssid, password);
if (result.status === 'connection_initiated') { if (result.status === 'ok' || result.wifi_status === 'connecting') {
wifiModal.hide(); wifiModal.hide();
setTimeout(() => { setTimeout(() => {
alert(`Connection to "${ssid}" initiated. The device will try to reconnect. Please check the Wi-Fi status icon.`); alert(`Connection to "${ssid}" initiated. The device will try to reconnect. Please check the Wi-Fi status icon.`);