-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Expand file tree
/
Copy pathproviders_clash.sh
More file actions
131 lines (124 loc) · 4.84 KB
/
Copy pathproviders_clash.sh
File metadata and controls
131 lines (124 loc) · 4.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh
# Copyright (C) Juewuy
[ -n "$__IS_PROVIDERS_CLASH" ] && return
__IS_PROVIDERS_CLASH=1
load_lang providers
. "$CRASHDIR"/libs/web_get_bin.sh
. "$CRASHDIR"/libs/yaml_dns.sh
# 生成clash的providers配置文件
gen_providers() {
if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then
provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/"${CORE_TYPE}"_providers.list | awk '{print $2}')"
else
provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
fi
if [ -s "$provider_temp_file" ]; then
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
else
msg_alert "\033[33m$PROVIDERS_FETCHING_TEMPLATE\033[0m"
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
[ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && {
msg_alert "\033[31m$PROVIDERS_DOWNLOAD_FAILED\033[0m"
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
setproviders
}
fi
# 生成proxy_providers模块
mkdir -p "$TMPDIR"/providers
# Keep an optional DNS section from the provider template. It is otherwise
# lost when the template is reduced to proxy providers, groups and rules.
yaml_dns_extract "$TMPDIR"/provider_temp_file >"$TMPDIR"/providers/dns.yaml
# 预创建文件并写入对应文件头
echo 'proxy-providers:' >"$TMPDIR"/providers/providers.yaml
# 切割模版文件
sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' "$TMPDIR"/provider_temp_file >"$TMPDIR"/providers/proxy-groups.yaml
yaml_top_level_section "$TMPDIR"/provider_temp_file '^rule' >"$TMPDIR"/providers/rules.yaml
rm -rf "$TMPDIR"/provider_temp_file
# 基于单订阅生成providers模块
if [ -n "$1" ]; then
gen_providers_txt "$@"
providers_tags=$1
else
# 基于全部订阅/本地文件生成
[ -s "$CRASHDIR"/configs/providers.cfg ] && {
providers_tags=''
while read -r line; do
gen_providers_txt $line
providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //')
done <"$CRASHDIR"/configs/providers.cfg
}
# 基于全部节点分享链接生成
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
mkdir -p "$CRASHDIR"/providers
awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg >"$CRASHDIR"/providers/uri_group
gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12"
providers_tags=$(echo "$providers_tags, Uri_group" | sed 's/^, //')
}
fi
# 修饰模版文件并合并
sed -i "s/{providers_tags}/$providers_tags/g" "$TMPDIR"/providers/proxy-groups.yaml
cut -c 1- "$TMPDIR"/providers/providers.yaml "$TMPDIR"/providers/proxy-groups.yaml "$TMPDIR"/providers/rules.yaml "$TMPDIR"/providers/dns.yaml >"$TMPDIR"/config.yaml
rm -rf "$TMPDIR"/providers
# 调用内核测试
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml
if [ "$?" = 0 ]; then
msg_alert "\033[32m$PROVIDERS_GEN_OK\033[0m"
mkdir -p "$CRASHDIR"/yamls
mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml
comp_box "$PROVIDERS_RESTART_ASK"
btm_box "1) $PROVIDERS_YES" \
"0) $PROVIDERS_NO"
read -r -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && {
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset "$PROVIDERS_CRON_SUB_UPDATE"
exit
}
else
rm -rf "$TMPDIR"/CrashCore
rm -rf "$TMPDIR"/config.yaml
msg_alert "\033[31m$PROVIDERS_GEN_FAILED\033[0m"
fi
}
gen_providers_txt() {
if [ -n "$(echo "$2" | grep -E '^./')" ]; then
type=file
path=$2
download_url=
else
type=http
path="./providers/$1.yaml"
download_url=$2
fi
tag=$1
interval=${3:-3}
interval2=${4:-12}
ua=${5:-clash.meta}
exclude=${6#\#}
include=${7#\#}
cat >>"$TMPDIR"/providers/providers.yaml <<EOF
${1}:
type: $type
url: "$download_url"
path: "$path"
interval: $((interval2 * 3600))
health-check:
enable: true
lazy: true
url: "https://www.gstatic.com/generate_204"
interval: $((interval * 60))
EOF
[ "$crashcore" = 'meta' ] && {
[ "$skip_cert" != "OFF" ] && skip_cert_verify='skip-cert-verify: true'
cat >>"$TMPDIR"/providers/providers.yaml <<EOF
header:
User-Agent: ["$ua"]
override:
udp: true
$skip_cert_verify
filter: "$include"
exclude-filter: "$exclude"
EOF
}
# 写入提供者
echo ' - {name: '"$tag"', type: url-test, tolerance: 100, lazy: true, use: ['"$tag"']}' >>"$TMPDIR"/providers/proxy-groups.yaml
}