mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-06 11:36:50 +03:00
fix: import remote plain domain and subnet lists using chunked processing
This commit is contained in:
@@ -909,16 +909,19 @@ prepare_common_ruleset() {
|
||||
|
||||
log "Preparing a common $type ruleset for '$section' section" "debug"
|
||||
ruleset_tag=$(get_ruleset_tag "$section" "common" "$type")
|
||||
ruleset_filepath=$(create_source_rule_set "$ruleset_tag")
|
||||
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")
|
||||
case "$type" in
|
||||
domains)
|
||||
config=$(sing_box_cm_patch_dns_route_rule "$config" "$SB_FAKEIP_DNS_RULE_TAG" "rule_set" "$ruleset_tag")
|
||||
;;
|
||||
subnets) ;;
|
||||
*) log "Unsupported remote rule set type: $type" "error" ;;
|
||||
esac
|
||||
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_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
||||
case "$type" in
|
||||
domains)
|
||||
config=$(sing_box_cm_patch_dns_route_rule "$config" "$SB_FAKEIP_DNS_RULE_TAG" "rule_set" "$ruleset_tag")
|
||||
;;
|
||||
subnets) ;;
|
||||
*) log "Unsupported remote rule set type: $type" "error" ;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
configure_community_list_handler() {
|
||||
@@ -983,7 +986,8 @@ configure_local_domain_or_subnet_lists() {
|
||||
|
||||
local ruleset_tag ruleset_filepath
|
||||
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_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"
|
||||
import_domains_or_subnets_from_remote_file "$url" "$section" "domains"
|
||||
import_domains_from_remote_plain_file "$url" "$section" "domains"
|
||||
;;
|
||||
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() {
|
||||
local section="$1"
|
||||
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"
|
||||
import_domains_or_subnets_from_remote_file "$url" "$section" "subnets"
|
||||
import_subnets_from_remote_plain_file "$url" "$section" "subnets"
|
||||
;;
|
||||
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() {
|
||||
local url="$1"
|
||||
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"
|
||||
}
|
||||
|
||||
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
|
||||
get_service_proxy_address() {
|
||||
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.
|
||||
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
|
||||
log "Ruleset $ruleset_filepath already exists. Skipping." "debug"
|
||||
return 0
|
||||
log "Source ruleset $ruleset_filepath already exists" "debug"
|
||||
return 1
|
||||
fi
|
||||
|
||||
jq -n '{version: 3, rules: []}' > "$ruleset_filepath"
|
||||
|
||||
echo "$ruleset_filepath"
|
||||
}
|
||||
|
||||
#######################################
|
||||
|
||||
Reference in New Issue
Block a user