Update WARP Configuration And Traffic

- Added API URL
- Total Traffic
- Fix Warp Uninstall
- Update Warp
  * Warp Plus Profile
  * Warp normal Profile
  * Warp Status
  * Change Warp IP
This commit is contained in:
Whispering Wind
2024-08-21 00:45:12 +03:30
committed by GitHub
6 changed files with 118 additions and 19 deletions

View File

@ -253,17 +253,35 @@ def uninstall_warp():
@click.option('--popular-sites', '-p', is_flag=True, help='Use WARP for popular sites like Google, OpenAI, etc') @click.option('--popular-sites', '-p', is_flag=True, help='Use WARP for popular sites like Google, OpenAI, etc')
@click.option('--domestic-sites', '-d', is_flag=True, help='Use WARP for Iran domestic sites') @click.option('--domestic-sites', '-d', is_flag=True, help='Use WARP for Iran domestic sites')
@click.option('--block-adult-sites', '-x', is_flag=True, help='Block adult content (porn)') @click.option('--block-adult-sites', '-x', is_flag=True, help='Block adult content (porn)')
def configure_warp(all: bool, popular_sites: bool, domestic_sites: bool, block_adult_sites: bool): @click.option('--warp-option', '-w', type=click.Choice(['warp', 'warp plus'], case_sensitive=False), help='Specify whether to use WARP or WARP Plus')
@click.option('--warp-key', '-k', help='WARP Plus key (required if warp-option is "warp plus")')
def configure_warp(all: bool, popular_sites: bool, domestic_sites: bool, block_adult_sites: bool, warp_option: str, warp_key: str):
if warp_option == 'warp plus' and not warp_key:
print("Error: WARP Plus key is required when 'warp plus' is selected.")
return
options = { options = {
"all": all, "all": 'true' if all else 'false',
"popular_sites": popular_sites, "popular_sites": 'true' if popular_sites else 'false',
"domestic_sites": domestic_sites, "domestic_sites": 'true' if domestic_sites else 'false',
"block_adult_sites": block_adult_sites "block_adult_sites": 'true' if block_adult_sites else 'false',
"warp_option": warp_option or '',
"warp_key": warp_key or ''
} }
options = {k: 'true' if v else 'false' for k, v in options.items()} cmd_args = [
run_cmd(['bash', Command.CONFIGURE_WARP.value, 'bash', Command.CONFIGURE_WARP.value,
options['all'], options['popular_sites'], options['domestic_sites'], options['block_adult_sites']]) options['all'],
options['popular_sites'],
options['domestic_sites'],
options['block_adult_sites'],
options['warp_option']
]
if options['warp_key']:
cmd_args.append(options['warp_key'])
run_cmd(cmd_args)
@cli.command('telegram') @cli.command('telegram')
@click.option('--action', '-a', required=True, help='Action to perform: start or stop', type=click.Choice(['start', 'stop'], case_sensitive=False)) @click.option('--action', '-a', required=True, help='Action to perform: start or stop', type=click.Choice(['start', 'stop'], case_sensitive=False))

View File

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
source /etc/hysteria/core/scripts/path.sh source /etc/hysteria/core/scripts/path.sh
ONLINE_API_URL='http://127.0.0.1:25413/online'
get_secret() { get_secret() {
if [ ! -f "$CONFIG_FILE" ]; then if [ ! -f "$CONFIG_FILE" ]; then
@ -19,15 +18,25 @@ get_secret() {
echo $secret echo $secret
} }
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}') convert_bytes() {
local bytes=$1
if (( bytes < 1048576 )); then
echo "$(echo "scale=2; $bytes / 1024" | bc) KB"
elif (( bytes < 1073741824 )); then
echo "$(echo "scale=2; $bytes / 1048576" | bc) MB"
elif (( bytes < 1099511627776 )); then
echo "$(echo "scale=2; $bytes / 1073741824" | bc) GB"
else
echo "$(echo "scale=2; $bytes / 1099511627776" | bc) TB"
fi
}
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')
total_ram=$(free -m | awk '/Mem:/ {print $2}') total_ram=$(free -m | awk '/Mem:/ {print $2}')
used_ram=$(free -m | awk '/Mem:/ {print $3}') used_ram=$(free -m | awk '/Mem:/ {print $3}')
secret=$(get_secret) secret=$(get_secret)
online_users=$(curl -s -H "Authorization: $secret" $ONLINE_API_URL) online_users=$(curl -s -H "Authorization: $secret" $ONLINE_API_URL)
online_user_count=$(echo $online_users | jq 'add') online_user_count=$(echo $online_users | jq 'add')
if [ "$online_user_count" == "null" ] || [ "$online_user_count" == "0" ]; then if [ "$online_user_count" == "null" ] || [ "$online_user_count" == "0" ]; then
@ -38,3 +47,24 @@ echo "CPU Usage: $cpu_usage"
echo "Total RAM: ${total_ram}MB" echo "Total RAM: ${total_ram}MB"
echo "Used RAM: ${used_ram}MB" echo "Used RAM: ${used_ram}MB"
echo "Online Users: $online_user_count" echo "Online Users: $online_user_count"
echo
echo "Total Traffic: "
if [ -f "$TRAFFIC_FILE" ]; then
total_upload=0
total_download=0
while IFS= read -r line; do
upload=$(echo $line | jq -r '.upload_bytes')
download=$(echo $line | jq -r '.download_bytes')
total_upload=$(echo "$total_upload + $upload" | bc)
total_download=$(echo "$total_download + $download" | bc)
done <<< "$(jq -c '.[]' $TRAFFIC_FILE)"
total_upload_human=$(convert_bytes $total_upload)
total_download_human=$(convert_bytes $total_download)
echo "${total_upload_human} uploaded"
echo "${total_download_human} downloaded"
fi

View File

@ -4,3 +4,4 @@ TRAFFIC_FILE="/etc/hysteria/traffic_data.json"
CONFIG_FILE="/etc/hysteria/config.json" CONFIG_FILE="/etc/hysteria/config.json"
TELEGRAM_ENV="/etc/hysteria/core/scripts/telegrambot/.env" TELEGRAM_ENV="/etc/hysteria/core/scripts/telegrambot/.env"
SINGBOX_ENV="/etc/hysteria/core/scripts/singbox/.env" SINGBOX_ENV="/etc/hysteria/core/scripts/singbox/.env"
ONLINE_API_URL="http://127.0.0.1:25413/online"

View File

@ -7,6 +7,8 @@ warp_configure_handler() {
local popular_sites=$2 local popular_sites=$2
local domestic_sites=$3 local domestic_sites=$3
local block_adult_sites=$4 local block_adult_sites=$4
local warp_option=$5
local warp_key=$6
if [ "$all" == "true" ]; then if [ "$all" == "true" ]; then
if [ "$(jq -r 'if .acl.inline | index("warps(all)") then "WARP active" else "Direct" end' "$CONFIG_FILE")" == "WARP active" ]; then if [ "$(jq -r 'if .acl.inline | index("warps(all)") then "WARP active" else "Direct" end' "$CONFIG_FILE")" == "WARP active" ]; then
@ -50,7 +52,27 @@ warp_configure_handler() {
fi fi
fi fi
if [ "$warp_option" == "warp plus" ]; then
if [ -z "$warp_key" ]; then
echo "Error: WARP Plus key is required. Exiting."
exit 1
fi
cd /etc/warp/ || { echo "Failed to change directory to /etc/warp/"; exit 1; }
WGCF_LICENSE_KEY="$warp_key" wgcf update
if [ $? -ne 0 ]; then
echo "Error: Failed to update WARP Plus configuration."
exit 1
fi
elif [ "$warp_option" == "warp" ]; then
cd /etc/warp/ || { echo "Failed to change directory to /etc/warp/"; exit 1; }
rm wgcf-account.toml && yes | wgcf register
echo "WARP configured with a new account."
fi
python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1 python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1
} }
warp_configure_handler "$1" "$2" "$3" "$4" warp_configure_handler "$1" "$2" "$3" "$4" "$5" "$6"

View File

@ -1,14 +1,11 @@
#!/bin/bash #!/bin/bash
# Source the path.sh script to load the CONFIG_FILE and CLI_PATH variables
source /etc/hysteria/core/scripts/path.sh source /etc/hysteria/core/scripts/path.sh
# Check if WARP is active
if systemctl is-active --quiet wg-quick@wgcf.service; then if systemctl is-active --quiet wg-quick@wgcf.service; then
echo "Uninstalling WARP..." echo "Uninstalling WARP..."
bash <(curl -fsSL git.io/warp.sh) dwg bash <(curl -fsSL git.io/warp.sh) dwg
# Check if the config file exists
if [ -f "$CONFIG_FILE" ]; then if [ -f "$CONFIG_FILE" ]; then
default_config='["reject(geosite:ir)", "reject(geoip:ir)", "reject(geosite:category-ads-all)", "reject(geoip:private)", "reject(geosite:google@ads)"]' default_config='["reject(geosite:ir)", "reject(geoip:ir)", "reject(geosite:category-ads-all)", "reject(geoip:private)", "reject(geosite:google@ads)"]'
@ -28,6 +25,14 @@ if systemctl is-active --quiet wg-quick@wgcf.service; then
jq 'del(.outbounds[] | select(.name == "warps" and .type == "direct" and .direct.mode == 4 and .direct.bindDevice == "wgcf"))' "$CONFIG_FILE" > /etc/hysteria/config_temp.json && mv /etc/hysteria/config_temp.json "$CONFIG_FILE" jq 'del(.outbounds[] | select(.name == "warps" and .type == "direct" and .direct.mode == 4 and .direct.bindDevice == "wgcf"))' "$CONFIG_FILE" > /etc/hysteria/config_temp.json && mv /etc/hysteria/config_temp.json "$CONFIG_FILE"
if [ "$(jq -r 'if .acl.inline | index("reject(geosite:category-porn)") then "Blocked" else "Not blocked" end' "$CONFIG_FILE")" == "Blocked" ]; then
jq 'del(.acl.inline[] | select(. == "reject(geosite:category-porn)"))' "$CONFIG_FILE" > /etc/hysteria/config_temp.json && mv /etc/hysteria/config_temp.json "$CONFIG_FILE"
echo "Adult content blocking removed."
fi
jq '.resolver.tls.addr = "1.1.1.1:853"' "$CONFIG_FILE" > /etc/hysteria/config_temp.json && mv /etc/hysteria/config_temp.json "$CONFIG_FILE"
echo "DNS resolver address changed to 1.1.1.1:853."
python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1 python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1
echo "WARP uninstalled and configurations reset to default." echo "WARP uninstalled and configurations reset to default."
else else

25
menu.sh
View File

@ -240,6 +240,10 @@ warp_configure_handler() {
echo "2. Use WARP for popular sites" echo "2. Use WARP for popular sites"
echo "3. Use WARP for domestic sites" echo "3. Use WARP for domestic sites"
echo "4. Block adult content" echo "4. Block adult content"
echo "5. WARP (Plus) Profile"
echo "6. WARP (Normal) Profile"
echo "7. WARP Status Profile"
echo "8. Change IP address"
echo "0. Cancel" echo "0. Cancel"
read -p "Select an option: " option read -p "Select an option: " option
@ -249,11 +253,30 @@ warp_configure_handler() {
2) python3 $CLI_PATH configure-warp --popular-sites ;; 2) python3 $CLI_PATH configure-warp --popular-sites ;;
3) python3 $CLI_PATH configure-warp --domestic-sites ;; 3) python3 $CLI_PATH configure-warp --domestic-sites ;;
4) python3 $CLI_PATH configure-warp --block-adult-sites ;; 4) python3 $CLI_PATH configure-warp --block-adult-sites ;;
5)
echo "Please enter your WARP Plus key:"
read -r warp_key
if [ -z "$warp_key" ]; then
echo "Error: WARP Plus key cannot be empty. Exiting."
return
fi
python3 $CLI_PATH configure-warp --warp-option "warp plus" --warp-key "$warp_key"
;;
6) python3 $CLI_PATH configure-warp --warp-option "warp" ;;
7) cd /etc/warp/ && wgcf status ;;
8)
old_ip=$(curl -s --interface wgcf --connect-timeout 0.5 http://v4.ident.me)
echo "Current IP address: $old_ip"
echo "Restarting $service_name..."
systemctl restart "$service_name"
sleep 5
new_ip=$(curl -s --interface wgcf --connect-timeout 0.5 http://v4.ident.me)
echo "New IP address: $new_ip"
;;
0) echo "WARP configuration canceled." ;; 0) echo "WARP configuration canceled." ;;
*) echo "Invalid option. Please try again." ;; *) echo "Invalid option. Please try again." ;;
esac esac
else else
# Notify user if the service is not active
echo "$service_name is not active. Please start the service before configuring WARP." echo "$service_name is not active. Please start the service before configuring WARP."
fi fi
} }