diff --git a/src/core.sh b/src/core.sh index a270e52..06cdbc0 100644 --- a/src/core.sh +++ b/src/core.sh @@ -489,10 +489,42 @@ create() { msg return } + # Read old remarks before file deletion + local old_remarks="" + if [[ -f $is_json_file ]]; then + old_remarks=$(grep -E '^[[:space:]]*//[[:space:]]*remarks:' $is_json_file | sed 's/.*remarks:[[:space:]]*//') + elif [[ $is_config_file && -f $is_conf_dir/$is_config_file ]]; then + old_remarks=$(grep -E '^[[:space:]]*//[[:space:]]*remarks:' $is_conf_dir/$is_config_file | sed 's/.*remarks:[[:space:]]*//') + fi + + local is_remarks="" + if [[ ! $is_gen ]]; then + if [[ $is_change ]]; then + if [[ $old_remarks ]]; then + msg "\n当前节点备注名称为: $old_remarks" + fi + echo -ne "请输入新的节点备注名称 (回车保持不变,输入 clear 确认清除):" + read is_remarks + if [[ -z $is_remarks ]]; then + is_remarks=$old_remarks + elif [[ $is_remarks == "clear" ]]; then + is_remarks="" + fi + else + msg "\n你可以为该节点设置一个自定义备注名称(用于生成的链接末尾显示)。" + echo -ne "请输入节点备注名称 (直接回车将使用默认生成值):" + read is_remarks + fi + fi + # del old file [[ $is_config_file ]] && is_no_del_msg=1 && del $is_config_file # save json to file - cat <<<$is_new_json >$is_json_file + if [[ $is_remarks ]]; then + echo -e "// remarks: $is_remarks\n$(cat <<<$is_new_json)" >$is_json_file + else + cat <<<$is_new_json >$is_json_file + fi if [[ ! -f $is_config_json ]]; then # config.json create config.json @@ -1552,6 +1584,15 @@ info() { if [[ ! $is_protocol ]]; then get info $1 fi + local custom_remarks="" + if [[ $is_config_file ]]; then + custom_remarks=$(grep -E '^[[:space:]]*//[[:space:]]*remarks:' $is_conf_dir/"$is_config_file" | sed 's/.*remarks:[[:space:]]*//') + fi + local url_remarks="sb-$net-$is_addr" + [[ $host ]] && url_remarks="sb-$net-$host" + [[ $is_anytls_domain ]] && url_remarks="sb-$net-$is_anytls_domain" + [[ $custom_remarks ]] && url_remarks=$custom_remarks + # is_color=$(shuf -i 41-45 -n1) is_color=44 case $net in @@ -1561,7 +1602,7 @@ info() { is_can_change=(0 1 2 3 5) is_info_show=(0 1 2 3 4 6 7 8) [[ $is_protocol == 'vmess' ]] && { - is_vmess_url=$(jq -c '{v:2,ps:'\"sb-$net-$host\"',add:'\"$is_addr\"',port:'\"$is_https_port\"',id:'\"$uuid\"',aid:"0",net:'\"$net\"',host:'\"$host\"',path:'\"$path\"',tls:'\"tls\"'}' <<<{}) + is_vmess_url=$(jq -c '{v:2,ps:'\"$url_remarks\"',add:'\"$is_addr\"',port:'\"$is_https_port\"',id:'\"$uuid\"',aid:"0",net:'\"$net\"',host:'\"$host\"',path:'\"$path\"',tls:'\"tls\"'}' <<<{}) is_url=vmess://$(echo -n $is_vmess_url | base64 -w 0) } || { [[ $is_protocol == "trojan" ]] && { @@ -1570,7 +1611,7 @@ info() { is_can_change=(0 1 2 3 4) is_info_show=(0 1 2 10 4 6 7 8) } - is_url="$is_protocol://$uuid@$host:$is_https_port?encryption=none&security=tls&type=$net&host=$host&path=$path#sb-$net-$host" + is_url="$is_protocol://$uuid@$host:$is_https_port?encryption=none&security=tls&type=$net&host=$host&path=$path#$url_remarks" } [[ $is_caddy ]] && is_can_change+=(11) is_info_str=($is_protocol $is_addr $is_https_port $uuid $net $host $path 'tls') @@ -1592,21 +1633,21 @@ info() { is_info_str+=(tls h3 true) is_quic_add=",tls:\"tls\",alpn:\"h3\"" # cant add allowInsecure } - is_vmess_url=$(jq -c "{v:2,ps:\"sb-${net}-$is_addr\",add:\"$is_addr\",port:\"$port\",id:\"$uuid\",aid:\"0\",net:\"$net\",type:\"$is_type\"$is_quic_add}" <<<{}) + is_vmess_url=$(jq -c "{v:2,ps:\"$url_remarks\",add:\"$is_addr\",port:\"$port\",id:\"$uuid\",aid:\"0\",net:\"$net\",type:\"$is_type\"$is_quic_add}" <<<{}) is_url=vmess://$(echo -n $is_vmess_url | base64 -w 0) fi ;; ss) is_can_change=(0 1 4 6) is_info_show=(0 1 2 10 11) - is_url="ss://$(echo -n ${ss_method}:${ss_password} | base64 -w 0)@${is_addr}:${port}#sb-$net-${is_addr}" + is_url="ss://$(echo -n ${ss_method}:${ss_password} | base64 -w 0)@${is_addr}:${port}#$url_remarks" is_info_str=($is_protocol $is_addr $port $ss_password $ss_method) ;; trojan) is_insecure=1 is_can_change=(0 1 4) is_info_show=(0 1 2 10 4 8 20) - is_url="$is_protocol://$password@$is_addr:$port?type=tcp&security=tls&insecure=1&allowInsecure=1#sb-$net-$is_addr" + is_url="$is_protocol://$password@$is_addr:$port?type=tcp&security=tls&insecure=1&allowInsecure=1#$url_remarks" is_info_str=($is_protocol $is_addr $port $password tcp tls true) ;; hy*) @@ -1614,14 +1655,14 @@ info() { is_info_show=(0 1 2 10 8 9 20) # fix xray core for client use. is_sha256=$(openssl x509 -noout -fingerprint -sha256 -in $is_core_dir/bin/tls.cer | sed 's/.*=//;s/://g') - is_url="$is_protocol://$password@$is_addr:$port?alpn=h3&insecure=1&allowInsecure=1&pinSHA256=$is_sha256#sb-$net-$is_addr" + is_url="$is_protocol://$password@$is_addr:$port?alpn=h3&insecure=1&allowInsecure=1&pinSHA256=$is_sha256#$url_remarks" is_info_str=($is_protocol $is_addr $port $password tls h3 "true (设置, 固定证书>证书指纹(SHA-256): $is_sha256)") ;; tuic) is_insecure=1 is_can_change=(0 1 4 5) is_info_show=(0 1 2 3 10 8 9 20 21) - is_url="$is_protocol://$uuid:$password@$is_addr:$port?alpn=h3&insecure=1&allowInsecure=1&congestion_control=bbr#sb-$net-$is_addr" + is_url="$is_protocol://$uuid:$password@$is_addr:$port?alpn=h3&insecure=1&allowInsecure=1&congestion_control=bbr#$url_remarks" is_info_str=($is_protocol $is_addr $port $uuid $password tls h3 true bbr) ;; reality) @@ -1636,19 +1677,19 @@ info() { is_info_show=(${is_info_show[@]/15/}) } is_info_str=($is_protocol $is_addr $port $uuid $is_flow $is_net_type reality $is_servername chrome $is_public_key) - is_url="$is_protocol://$uuid@$is_addr:$port?encryption=none&security=reality&flow=$is_flow&type=$is_net_type&sni=$is_servername&pbk=$is_public_key&fp=chrome#sb-$net-$is_addr" + is_url="$is_protocol://$uuid@$is_addr:$port?encryption=none&security=reality&flow=$is_flow&type=$is_net_type&sni=$is_servername&pbk=$is_public_key&fp=chrome#$url_remarks" ;; anytls) is_can_change=(0 1 4) if [[ $is_anytls_domain ]]; then is_info_show=(0 1 2 10 8) is_info_str=($is_protocol $is_anytls_domain $port $password tls) - is_url="anytls://$password@$is_anytls_domain:$port#sb-$net-$is_anytls_domain" + is_url="anytls://$password@$is_anytls_domain:$port#$url_remarks" else is_insecure=1 is_info_show=(0 1 2 10 8 20) is_info_str=($is_protocol $is_addr $port $password tls true) - is_url="anytls://$password@$is_addr:$port?insecure=1&allowInsecure=1#sb-$net-$is_addr" + is_url="anytls://$password@$is_addr:$port?insecure=1&allowInsecure=1#$url_remarks" fi ;; direct) @@ -1660,7 +1701,7 @@ info() { is_can_change=(0 1 12 4) is_info_show=(0 1 2 19 10) is_info_str=($is_protocol $is_addr $port $is_socks_user $is_socks_pass) - is_url="socks://$(echo -n ${is_socks_user}:${is_socks_pass} | base64 -w 0)@${is_addr}:${port}#sb-$net-${is_addr}" + is_url="socks://$(echo -n ${is_socks_user}:${is_socks_pass} | base64 -w 0)@${is_addr}:${port}#$url_remarks" ;; esac [[ $is_dont_show_info || $is_gen || $is_dont_auto_exit ]] && return # dont show info