From 2d0d578b4f9343bd03c4b47ac0aff8d3aa317fb1 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Tue, 28 Feb 2023 17:38:35 +0800 Subject: [PATCH] fix: delete ssl dirs on resource destory --- .../src/emqx_bridge_mqtt_actions.erl | 1 + .../src/emqx_plugin_libs_ssl.erl | 18 ++++++++++++++++++ .../src/emqx_web_hook_actions.erl | 1 + 3 files changed, 20 insertions(+) diff --git a/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl b/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl index b43d44eac..67b5a7a2e 100644 --- a/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl +++ b/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl @@ -482,6 +482,7 @@ on_resource_destroy(ResId, #{<<"pool">> := PoolName}) -> ?LOG(info, "Destroying Resource ~p, ResId: ~p", [?RESOURCE_TYPE_MQTT, ResId]), case ecpool:stop_sup_pool(PoolName) of ok -> + emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId), ?LOG(info, "Destroyed Resource ~p Successfully, ResId: ~p", [?RESOURCE_TYPE_MQTT, ResId]); {error, Reason} -> ?LOG(error, "Destroy Resource ~p failed, ResId: ~p, ~p", [?RESOURCE_TYPE_MQTT, ResId, Reason]), diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs_ssl.erl b/apps/emqx_plugin_libs/src/emqx_plugin_libs_ssl.erl index d863d6981..4526dfb37 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs_ssl.erl +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs_ssl.erl @@ -21,6 +21,10 @@ save_file/2 ]). +-export([maybe_delete_dir/1, + maybe_delete_dir/2 + ]). + -type file_input_key() :: binary(). %% <<"file">> | <<"filename">> -type file_input() :: #{file_input_key() => binary()}. @@ -141,6 +145,20 @@ maybe_save_file(FileName, Content, Dir) -> error({"failed_to_save_ssl_file", FullFilename, Reason}) end. +maybe_delete_dir(SubDir, ResId) -> + Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]), + maybe_delete_dir(Dir). + +maybe_delete_dir(Dir) -> + case file:del_dir_r(Dir) of + ok -> + ok; + {error, enoent} -> + ok; + {error, Reason} -> + logger:error("Delete Resource dir ~p failed for reason: ~p", [Dir, Reason]) + end. + ensure_str(L) when is_list(L) -> L; ensure_str(B) when is_binary(B) -> unicode:characters_to_list(B, utf8). diff --git a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl b/apps/emqx_web_hook/src/emqx_web_hook_actions.erl index 351a8ba2b..e8e96748e 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl +++ b/apps/emqx_web_hook/src/emqx_web_hook_actions.erl @@ -238,6 +238,7 @@ on_resource_destroy(ResId, #{<<"pool">> := PoolName}) -> ?LOG(info, "Destroying Resource ~p, ResId: ~p", [?RESOURCE_TYPE_WEBHOOK, ResId]), case ehttpc_pool:stop_pool(PoolName) of ok -> + emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId), ?LOG(info, "Destroyed Resource ~p Successfully, ResId: ~p", [?RESOURCE_TYPE_WEBHOOK, ResId]); {error, Reason} -> ?LOG(error, "Destroy Resource ~p failed, ResId: ~p, ~p", [?RESOURCE_TYPE_WEBHOOK, ResId, Reason]),