From: Jaehyun Kim Date: Wed, 20 Mar 2024 08:54:27 +0000 (+0900) Subject: Add an API for getting wifi passphrase X-Git-Tag: accepted/tizen/unified/20240405.115711~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8837db4594b7ea9bc54ae132ae676d6f8d4cb24f;p=platform%2Fcore%2Fapi%2Fwifi-manager.git Add an API for getting wifi passphrase This is an API only for the internal modules with special privileges. Change-Id: Ica37a5a96dd8d8e9703620d820aaa8c48f0d9917 Signed-off-by: Jaehyun Kim --- diff --git a/include/wifi-manager-extension.h b/include/wifi-manager-extension.h index 2010a8b..617bc35 100644 --- a/include/wifi-manager-extension.h +++ b/include/wifi-manager-extension.h @@ -252,6 +252,25 @@ int wifi_manager_config_get_frequency(wifi_manager_config_h config, int wifi_manager_config_set_frequency(wifi_manager_config_h config, int frequency); +/** + * @brief Gets access point passphrase from configuration. + * @since_tizen 9.0 + * @privlevel public + * @privilege %http://tizen.org/privilege/wifi.secureinfo + * @param[in] wifi The Wi-Fi handle + * @param[in] config The access point configuration handle + * @param[out] passphrase The passphrase of access point + * + * @return 0 on success, otherwise negative error value. + * @retval #WIFI_MANAGER_ERROR_NONE Successful + * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED Operation failed + * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED Permission Denied + * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED Not supported + */ +int wifi_manager_config_get_passphrase(wifi_manager_h wifi, + wifi_manager_config_h config, char **passphrase); + /** * @brief Reset all WiFi configurations * @since_tizen 7.5 diff --git a/src/network_dbus.c b/src/network_dbus.c index fa67b17..8344aee 100755 --- a/src/network_dbus.c +++ b/src/network_dbus.c @@ -3737,7 +3737,7 @@ int _net_dbus_config_get_passphrase(network_info_s *network_info, message = _net_invoke_dbus_method(network_info, NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE, "GetConfigPassphrase", - g_variant_new("(s)", config_id), &Error); + g_variant_new("(ss)", network_info->interface_name, config_id), &Error); if (message == NULL) { WIFI_LOG(WIFI_ERROR, "Failed to GetConfigPassphrase"); diff --git a/src/wifi_config.c b/src/wifi_config.c index af86dc1..05dff53 100644 --- a/src/wifi_config.c +++ b/src/wifi_config.c @@ -403,6 +403,46 @@ EXPORT_API int wifi_manager_config_get_security_type(wifi_manager_config_h confi return WIFI_MANAGER_ERROR_NONE; } +EXPORT_API int wifi_manager_config_get_passphrase(wifi_manager_h wifi, + wifi_manager_config_h config, char **passphrase) +{ + __NETWORK_CAPI_FUNC_ENTER__; + + CHECK_FEATURE_SUPPORTED(WIFI_FEATURE); + int ret = WIFI_MANAGER_ERROR_NONE; + wifi_config_s *h = (wifi_config_s *)config; + + RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__); + + if (config == NULL || h->name == NULL || passphrase == NULL) { + WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE + __NETWORK_CAPI_FUNC_EXIT__; //LCOV_EXCL_LINE + return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE + } + + if (_wifi_check_config_validity(config) == false) { + WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE + __NETWORK_CAPI_FUNC_EXIT__; //LCOV_EXCL_LINE + return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE + } + + if (h->is_saved == TRUE) { + gchar *config_id = NULL; + + config_id = _wifi_config_get_config_id(h->name, h->security_type); + + ret = _wifi_configuration_get_passphrase(wifi, config_id, passphrase); + if (ret != WIFI_MANAGER_ERROR_NONE) + WIFI_LOG(WIFI_ERROR, "Fail to get passphrase [%d]", ret); + + g_free(config_id); + } + + __NETWORK_CAPI_FUNC_EXIT__; + + return ret; +} + /** * wifi configuration set field */ diff --git a/tools/manager-test/wman_test_extension.c b/tools/manager-test/wman_test_extension.c index 7e7fd53..91c407a 100644 --- a/tools/manager-test/wman_test_extension.c +++ b/tools/manager-test/wman_test_extension.c @@ -348,6 +348,59 @@ int wman_test_reset_wifi_configurations(wifi_manager_h wifi) return 1; } +static bool __test_config_list_cb_for_passphrase(const wifi_manager_config_h config, void *user_data) +{ + char *name = NULL; + char *passphrase = NULL; + struct wman_public_info *data = user_data; + wifi_manager_security_type_e security_type; + + wifi_manager_config_get_name(config, &name); + wifi_manager_config_get_security_type(config, &security_type); + + if (wman_test_compare_ap_name(name, data->name) && security_type == data->type) { + int rv = wifi_manager_config_get_passphrase(data->wifi, config, &passphrase); + if (rv != WIFI_MANAGER_ERROR_NONE) { + printf("Fail to get passphrase [%s]\n", wman_test_strerror(rv)); + } else { + printf("Success to get passphrase [%s][%s]\n", name, passphrase); + free(passphrase); + } + free(name); + + return false; + } + free(name); + + return true; +} + +int wman_test_get_wifi_passphrase(wifi_manager_h wifi) +{ + int rv; + char name[33]; + struct wman_public_info data = {wifi, name}; + + printf("Input AP configuration\n"); + printf("Input AP Name : "); + rv = scanf(" %32[^\n]s", name); + if (rv <= 0) + return -1; + + printf("Security type(None(0), WEP(1), WPA-PSK(2), EAP(4) : "); + rv = scanf(" %d", &data.type); + if (rv <= 0) + return -1; + + rv = wifi_manager_config_foreach_configuration(wifi, __test_config_list_cb_for_passphrase, &data); + if (rv != WIFI_MANAGER_ERROR_NONE) { + printf("Fail to get configurations [%s]\n", wman_test_strerror(rv)); + return -1; + } + + return 1; +} + int wman_test_set_ip_conflict_period(wifi_manager_h wifi) { int rv = 0; diff --git a/tools/manager-test/wman_test_extension.h b/tools/manager-test/wman_test_extension.h index 824b29f..026edf1 100644 --- a/tools/manager-test/wman_test_extension.h +++ b/tools/manager-test/wman_test_extension.h @@ -29,6 +29,7 @@ int wman_test_get_auto_connect(wifi_manager_h wifi); int wman_test_set_ap_auto_connect(wifi_manager_h wifi); int wman_test_get_ap_auto_connect(wifi_manager_h wifi); int wman_test_reset_wifi_configurations(wifi_manager_h wifi); +int wman_test_get_wifi_passphrase(wifi_manager_h wifi); int wman_test_set_ip_conflict_period(wifi_manager_h wifi); int wman_test_get_ip_conflict_period(wifi_manager_h wifi); int wman_test_netlink_scan(wifi_manager_h wifi); diff --git a/tools/manager-test/wman_test_main.c b/tools/manager-test/wman_test_main.c index b44218d..edccfe0 100644 --- a/tools/manager-test/wman_test_main.c +++ b/tools/manager-test/wman_test_main.c @@ -365,6 +365,7 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data) printf("[ - Get Interval of Auto Scan\n"); printf("] - Set Interval of Auto Scan\n"); printf("; - Remove All Wi-Fi configurations\n"); + printf(", - Get Wi-Fi passphrase\n"); printf(LOG_RED "0 - Exit \n" LOG_END); printf("ENTER - Show options menu.......\n"); @@ -602,6 +603,9 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data) case ';': rv = wman_test_reset_wifi_configurations(wifi); break; + case ',': + rv = wman_test_get_wifi_passphrase(wifi); + break; default: break; }