From 0856f49e84b80a455ef1287882afa761455978f1 Mon Sep 17 00:00:00 2001 From: Ahmed Abdelsalam Date: Wed, 21 Aug 2024 10:59:28 +0200 Subject: [PATCH] Add: Allow update of settings for time and date format --- src/gsad_gmp.c | 110 +++++++++++++++++++++++++++++++++++++++++++ src/gsad_validator.c | 2 + 2 files changed, 112 insertions(+) diff --git a/src/gsad_gmp.c b/src/gsad_gmp.c index 2550adf70..24bc71d23 100644 --- a/src/gsad_gmp.c +++ b/src/gsad_gmp.c @@ -11984,7 +11984,9 @@ save_my_settings_gmp (gvm_connection_t *connection, credentials_t *credentials, { const char *lang, *text, *old_passwd, *passwd, *max; const char *details_fname, *list_fname, *report_fname; + const char *time_format, *date_format; gchar *lang_64, *text_64, *max_64, *fname_64; + gchar *time_format_64, *date_format_64; GString *xml; entity_t entity; params_t *changed, *defaults, *filters; @@ -12004,6 +12006,8 @@ save_my_settings_gmp (gvm_connection_t *connection, credentials_t *credentials, details_fname = params_value (params, "details_fname"); list_fname = params_value (params, "list_fname"); report_fname = params_value (params, "report_fname"); + time_format = params_value (params, "time_format"); + date_format = params_value (params, "date_format"); CHECK_VARIABLE_INVALID (text, "Save Settings") CHECK_VARIABLE_INVALID (text, "Save Settings") @@ -12013,6 +12017,8 @@ save_my_settings_gmp (gvm_connection_t *connection, credentials_t *credentials, CHECK_VARIABLE_INVALID (details_fname, "Save Settings") CHECK_VARIABLE_INVALID (list_fname, "Save Settings") CHECK_VARIABLE_INVALID (report_fname, "Save Settings") + CHECK_VARIABLE_INVALID (time_format, "Save Settings") + CHECK_VARIABLE_INVALID (date_format, "Save Settings") xml = g_string_new (""); @@ -12638,6 +12644,110 @@ save_my_settings_gmp (gvm_connection_t *connection, credentials_t *credentials, } } + /* Send User Interface Time Format. */ + changed_value = params_value (changed, "time_format"); + if (changed_value == NULL + || (strcmp (changed_value, "") && strcmp (changed_value, "0"))) + { + time_format_64 = + g_base64_encode ((guchar *) time_format, strlen (time_format)); + + if (gvm_connection_sendf (connection, + "" + "%s" + "", + time_format_64 ? time_format_64 : "") + == -1) + { + g_free (time_format_64); + cmd_response_data_set_status_code (response_data, + MHD_HTTP_INTERNAL_SERVER_ERROR); + return gsad_message ( + credentials, "Internal error", __func__, __LINE__, + "An internal error occurred while saving settings. " + "It is unclear whether all the settings were saved. " + "Diagnostics: Failure to send command to manager daemon.", + response_data); + } + g_free (time_format_64); + + entity = NULL; + xml_string_append (xml, "", + "11deb7ff-550b-4950-aacf-06faeb7c61b9"); + if (read_entity_and_string_c (connection, &entity, &xml)) + { + g_string_free (xml, TRUE); + cmd_response_data_set_status_code (response_data, + MHD_HTTP_INTERNAL_SERVER_ERROR); + return gsad_message ( + credentials, "Internal error", __func__, __LINE__, + "An internal error occurred while saving settings. " + "It is unclear whether all the settings were saved. " + "Diagnostics: Failure to receive response from manager daemon.", + response_data); + } + xml_string_append (xml, ""); + if (gmp_success (entity) != 1) + { + set_http_status_from_entity (entity, response_data); + modify_failed = 1; + } + } + + /* Send User Interface Date Format. */ + changed_value = params_value (changed, "date_format"); + if (changed_value == NULL + || (strcmp (changed_value, "") && strcmp (changed_value, "0"))) + { + date_format_64 = + g_base64_encode ((guchar *) date_format, strlen (date_format)); + + if (gvm_connection_sendf (connection, + "" + "%s" + "", + date_format_64 ? date_format_64 : "") + == -1) + { + g_free (date_format_64); + cmd_response_data_set_status_code (response_data, + MHD_HTTP_INTERNAL_SERVER_ERROR); + return gsad_message ( + credentials, "Internal error", __func__, __LINE__, + "An internal error occurred while saving settings. " + "It is unclear whether all the settings were saved. " + "Diagnostics: Failure to send command to manager daemon.", + response_data); + } + g_free (date_format_64); + + entity = NULL; + xml_string_append (xml, "", + "d9857b7c-1159-4193-9bc0-18fae5473a69"); + if (read_entity_and_string_c (connection, &entity, &xml)) + { + g_string_free (xml, TRUE); + cmd_response_data_set_status_code (response_data, + MHD_HTTP_INTERNAL_SERVER_ERROR); + return gsad_message ( + credentials, "Internal error", __func__, __LINE__, + "An internal error occurred while saving settings. " + "It is unclear whether all the settings were saved. " + "Diagnostics: Failure to receive response from manager daemon.", + response_data); + } + xml_string_append (xml, ""); + if (gmp_success (entity) != 1) + { + set_http_status_from_entity (entity, response_data); + modify_failed = 1; + } + } + if (user_changed) { session_add_user (user_get_token (user), user); diff --git a/src/gsad_validator.c b/src/gsad_validator.c index 462be24f3..03539ae36 100644 --- a/src/gsad_validator.c +++ b/src/gsad_validator.c @@ -545,6 +545,8 @@ init_validator () "^(second|minute|hour|day|week|month|year|decade)$"); gvm_validator_add (validator, "chart_title", "(?s)^.*$"); gvm_validator_add (validator, "icalendar", "(?s)^BEGIN:VCALENDAR.+$"); + gvm_validator_add (validator, "time_format", "^(12|24)$"); + gvm_validator_add (validator, "date_format", "^(wmdy|wdmy)$"); /* Binary data params that should not use no UTF-8 validation */ gvm_validator_add_binary (validator, "certificate_bin");