mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-10 21:46:53 +03:00
fix: import remote plain domain and subnet lists using chunked processing
This commit is contained in:
@@ -909,7 +909,9 @@ prepare_common_ruleset() {
|
|||||||
|
|
||||||
log "Preparing a common $type ruleset for '$section' section" "debug"
|
log "Preparing a common $type ruleset for '$section' section" "debug"
|
||||||
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
||||||
ruleset_filepath=$(create_source_rule_set "$ruleset_tag")
|
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_tag.json"
|
||||||
|
create_source_rule_set "$ruleset_filepath"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
config=$(sing_box_cm_add_local_ruleset "$config" "$ruleset_tag" "source" "$ruleset_filepath")
|
config=$(sing_box_cm_add_local_ruleset "$config" "$ruleset_tag" "source" "$ruleset_filepath")
|
||||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
||||||
case "$type" in
|
case "$type" in
|
||||||
@@ -919,6 +921,7 @@ prepare_common_ruleset() {
|
|||||||
subnets) ;;
|
subnets) ;;
|
||||||
*) log "Unsupported remote rule set type: $type" "error" ;;
|
*) log "Unsupported remote rule set type: $type" "error" ;;
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
configure_community_list_handler() {
|
configure_community_list_handler() {
|
||||||
@@ -983,7 +986,8 @@ configure_local_domain_or_subnet_lists() {
|
|||||||
|
|
||||||
local ruleset_tag ruleset_filepath
|
local ruleset_tag ruleset_filepath
|
||||||
ruleset_tag="$(get_ruleset_tag "$section" "local" "$type")"
|
ruleset_tag="$(get_ruleset_tag "$section" "local" "$type")"
|
||||||
ruleset_filepath=$(create_source_rule_set "$ruleset_tag")
|
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_tag.json"
|
||||||
|
create_source_rule_set "$ruleset_filepath"
|
||||||
config=$(sing_box_cm_add_local_ruleset "$config" "$ruleset_tag" "source" "$ruleset_filepath")
|
config=$(sing_box_cm_add_local_ruleset "$config" "$ruleset_tag" "source" "$ruleset_filepath")
|
||||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
||||||
|
|
||||||
@@ -1282,11 +1286,35 @@ import_domains_from_remote_domain_list_handler() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
log "Detected file extension: '$file_extension' → proceeding with processing" "debug"
|
log "Detected file extension: '$file_extension' → proceeding with processing" "debug"
|
||||||
import_domains_or_subnets_from_remote_file "$url" "$section" "domains"
|
import_domains_from_remote_plain_file "$url" "$section" "domains"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import_domains_from_remote_plain_file() {
|
||||||
|
local url="$1"
|
||||||
|
local section="$2"
|
||||||
|
local type="$3"
|
||||||
|
|
||||||
|
local tmpfile http_proxy_address items json_array
|
||||||
|
tmpfile=$(mktemp)
|
||||||
|
http_proxy_address="$(get_service_proxy_address)"
|
||||||
|
|
||||||
|
download_to_file "$url" "$tmpfile" "$http_proxy_address"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ] || [ ! -s "$tmpfile" ]; then
|
||||||
|
log "Download $url list failed" "error"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
convert_crlf_to_lf "$tmpfile"
|
||||||
|
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
||||||
|
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_tag.json"
|
||||||
|
import_plain_domain_list_to_local_source_ruleset_chunked "$tmpfile" "$ruleset_filepath"
|
||||||
|
|
||||||
|
rm -f "$tmpfile"
|
||||||
|
}
|
||||||
|
|
||||||
import_subnets_from_remote_subnet_lists() {
|
import_subnets_from_remote_subnet_lists() {
|
||||||
local section="$1"
|
local section="$1"
|
||||||
local remote_subnet_lists
|
local remote_subnet_lists
|
||||||
@@ -1316,50 +1344,11 @@ import_subnets_from_remote_subnet_list_handler() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
log "Detected file extension: '$file_extension' → proceeding with processing" "debug"
|
log "Detected file extension: '$file_extension' → proceeding with processing" "debug"
|
||||||
import_domains_or_subnets_from_remote_file "$url" "$section" "subnets"
|
import_subnets_from_remote_plain_file "$url" "$section" "subnets"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
import_domains_or_subnets_from_remote_file() {
|
|
||||||
local url="$1"
|
|
||||||
local section="$2"
|
|
||||||
local type="$3"
|
|
||||||
|
|
||||||
local tmpfile http_proxy_address items json_array
|
|
||||||
tmpfile=$(mktemp)
|
|
||||||
http_proxy_address="$(get_service_proxy_address)"
|
|
||||||
|
|
||||||
download_to_file "$url" "$tmpfile" "$http_proxy_address"
|
|
||||||
|
|
||||||
if [ $? -ne 0 ] || [ ! -s "$tmpfile" ]; then
|
|
||||||
log "Download $url list failed" "error"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
convert_crlf_to_lf "$tmpfile"
|
|
||||||
items="$(parse_domain_or_subnet_file_to_comma_string "$tmpfile" "$type")"
|
|
||||||
|
|
||||||
if [ -z "$items" ]; then
|
|
||||||
log "No valid $type found in $url" "warn"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
|
||||||
ruleset_filename="$ruleset_tag.json"
|
|
||||||
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_filename"
|
|
||||||
json_array="$(comma_string_to_json_array "$items")"
|
|
||||||
case "$type" in
|
|
||||||
domains) patch_source_ruleset_rules "$ruleset_filepath" "domain_suffix" "$json_array" ;;
|
|
||||||
subnets)
|
|
||||||
patch_source_ruleset_rules "$ruleset_filepath" "ip_cidr" "$json_array"
|
|
||||||
nft_add_set_elements_from_file_chunked "$tmpfile" "$NFT_TABLE_NAME" "$NFT_COMMON_SET_NAME"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
rm -f "$tmpfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
import_subnets_from_remote_json_file() {
|
import_subnets_from_remote_json_file() {
|
||||||
local url="$1"
|
local url="$1"
|
||||||
local json_tmpfile subnets_tmpfile http_proxy_address
|
local json_tmpfile subnets_tmpfile http_proxy_address
|
||||||
@@ -1405,6 +1394,32 @@ import_subnets_from_remote_srs_file() {
|
|||||||
rm -f "$binary_tmpfile" "$json_tmpfile" "$subnets_tmpfile"
|
rm -f "$binary_tmpfile" "$json_tmpfile" "$subnets_tmpfile"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import_subnets_from_remote_plain_file() {
|
||||||
|
local url="$1"
|
||||||
|
local section="$2"
|
||||||
|
local type="$3"
|
||||||
|
|
||||||
|
local tmpfile http_proxy_address items json_array
|
||||||
|
tmpfile=$(mktemp)
|
||||||
|
http_proxy_address="$(get_service_proxy_address)"
|
||||||
|
|
||||||
|
download_to_file "$url" "$tmpfile" "$http_proxy_address"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ] || [ ! -s "$tmpfile" ]; then
|
||||||
|
log "Download $url list failed" "error"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
convert_crlf_to_lf "$tmpfile"
|
||||||
|
|
||||||
|
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
||||||
|
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_tag.json"
|
||||||
|
import_plain_subnet_list_to_local_source_ruleset_chunked "$tmpfile" "$ruleset_filepath"
|
||||||
|
nft_add_set_elements_from_file_chunked "$tmpfile" "$NFT_TABLE_NAME" "$NFT_COMMON_SET_NAME"
|
||||||
|
|
||||||
|
rm -f "$tmpfile"
|
||||||
|
}
|
||||||
|
|
||||||
## Support functions
|
## Support functions
|
||||||
get_service_proxy_address() {
|
get_service_proxy_address() {
|
||||||
local download_lists_via_proxy
|
local download_lists_via_proxy
|
||||||
|
|||||||
@@ -14,18 +14,14 @@ get_ruleset_tag() {
|
|||||||
|
|
||||||
# Creates a new ruleset JSON file if it doesn't already exist and outputs its path.
|
# Creates a new ruleset JSON file if it doesn't already exist and outputs its path.
|
||||||
create_source_rule_set() {
|
create_source_rule_set() {
|
||||||
local ruleset_name="$1"
|
local ruleset_filepath="$1"
|
||||||
|
|
||||||
ruleset_filename="$ruleset_name.json"
|
|
||||||
ruleset_filepath="$TMP_RULESET_FOLDER/$ruleset_filename"
|
|
||||||
if file_exists "$ruleset_filepath"; then
|
if file_exists "$ruleset_filepath"; then
|
||||||
log "Ruleset $ruleset_filepath already exists. Skipping." "debug"
|
log "Source ruleset $ruleset_filepath already exists" "debug"
|
||||||
return 0
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
jq -n '{version: 3, rules: []}' > "$ruleset_filepath"
|
jq -n '{version: 3, rules: []}' > "$ruleset_filepath"
|
||||||
|
|
||||||
echo "$ruleset_filepath"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
|
|||||||
Reference in New Issue
Block a user