diff --git a/core/scripts/hysteria2/show_user_uri.sh b/core/scripts/hysteria2/show_user_uri.sh index e6b4e0c..05d7309 100644 --- a/core/scripts/hysteria2/show_user_uri.sh +++ b/core/scripts/hysteria2/show_user_uri.sh @@ -1,57 +1,86 @@ #!/bin/bash -# Source the path.sh script to load the configuration variables source /etc/hysteria/core/scripts/path.sh -# Function to show URI if Hysteria2 is installed and active show_uri() { if [ -f "$USERS_FILE" ]; then if systemctl is-active --quiet hysteria-server.service; then - # Check if the username is provided as an argument - if [ -z "$1" ]; then - echo "Usage: $0 " + local username + local generate_qrcode=false + local ip_version=4 + local show_all=false + + while [[ "$#" -gt 0 ]]; do + case $1 in + -u|--username) username="$2"; shift ;; + -qr|--qrcode) generate_qrcode=true ;; + -ip) ip_version="$2"; shift ;; + -a|--all) show_all=true ;; + *) echo "Unknown parameter passed: $1"; exit 1 ;; + esac + shift + done + + if [ -z "$username" ]; then + echo "Usage: $0 -u [-qr] [-ip <4|6>] [-a]" exit 1 fi - username=$1 - - # Validate the username if jq -e "has(\"$username\")" "$USERS_FILE" > /dev/null; then - # Get the selected user's details authpassword=$(jq -r ".\"$username\".password" "$USERS_FILE") port=$(jq -r '.listen' "$CONFIG_FILE" | cut -d':' -f2) sha256=$(jq -r '.tls.pinSHA256' "$CONFIG_FILE") obfspassword=$(jq -r '.obfs.salamander.password' "$CONFIG_FILE") - # Get IP addresses - IP=$(curl -s -4 ip.gs) - IP6=$(curl -s -6 ip.gs) + generate_uri() { + local ip_version=$1 + local ip=$2 + if [ "$ip_version" -eq 4 ]; then + echo "hy2://$username%3A$authpassword@$ip:$port?obfs=salamander&obfs-password=$obfspassword&pinSHA256=$sha256&insecure=1&sni=bts.com#$username-IPv4" + elif [ "$ip_version" -eq 6 ]; then + echo "hy2://$username%3A$authpassword@[$ip]:$port?obfs=salamander&obfs-password=$obfspassword&pinSHA256=$sha256&insecure=1&sni=bts.com#$username-IPv6" + fi + } - # Construct URI - URI="hy2://$username%3A$authpassword@$IP:$port?obfs=salamander&obfs-password=$obfspassword&pinSHA256=$sha256&insecure=1&sni=bts.com#$username-IPv4" - URI6="hy2://$username%3A$authpassword@[$IP6]:$port?obfs=salamander&obfs-password=$obfspassword&pinSHA256=$sha256&insecure=1&sni=bts.com#$username-IPv6" + if [ "$show_all" = true ]; then + IP=$(curl -s -4 ip.gs) + URI=$(generate_uri 4 "$IP") + IP6=$(curl -s -6 ip.gs) + URI6=$(generate_uri 6 "$IP6") + echo -e "\nIPv4:\n$URI\n" + echo -e "\nIPv6:\n$URI6\n" + else + if [ "$ip_version" -eq 4 ]; then + IP=$(curl -s -4 ip.gs) + URI=$(generate_uri 4 "$IP") + echo -e "\nIPv4:\n$URI\n" + elif [ "$ip_version" -eq 6 ]; then + IP6=$(curl -s -6 ip.gs) + URI6=$(generate_uri 6 "$IP6") + echo -e "\nIPv6:\n$URI6\n" + else + echo "Invalid IP version. Use 4 for IPv4 or 6 for IPv6." + exit 1 + fi + fi - # Generate QR codes - qr1=$(echo -n "$URI" | qrencode -t UTF8 -s 3 -m 2) - qr2=$(echo -n "$URI6" | qrencode -t UTF8 -s 3 -m 2) - - # Display QR codes and URIs - cols=$(tput cols) - echo -e "\nIPv4:\n" - echo "$qr1" | while IFS= read -r line; do - printf "%*s\n" $(( (${#line} + cols) / 2)) "$line" - done - - echo -e "\nIPv6:\n" - echo "$qr2" | while IFS= read -r line; do - printf "%*s\n" $(( (${#line} + cols) / 2)) "$line" - done - - echo - echo "IPv4: $URI" - echo - echo "IPv6: $URI6" - echo + if [ "$generate_qrcode" = true ]; then + cols=$(tput cols) + if [ -n "$URI" ]; then + qr1=$(echo -n "$URI" | qrencode -t UTF8 -s 3 -m 2) + echo -e "\nIPv4 QR Code:\n" + echo "$qr1" | while IFS= read -r line; do + printf "%*s\n" $(( (${#line} + cols) / 2)) "$line" + done + fi + if [ -n "$URI6" ]; then + qr2=$(echo -n "$URI6" | qrencode -t UTF8 -s 3 -m 2) + echo -e "\nIPv6 QR Code:\n" + echo "$qr2" | while IFS= read -r line; do + printf "%*s\n" $(( (${#line} + cols) / 2)) "$line" + done + fi + fi else echo "Invalid username. Please try again." fi @@ -63,5 +92,4 @@ show_uri() { fi } -# Call the function with the provided username argument -show_uri "$1" +show_uri "$@"