#!/bin/sh
|
|
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
query_gw () {
|
|
local ip=$1
|
|
local req=$2
|
|
|
|
# first try https
|
|
ret=$(curl https://"$ip"/ubus -d "$req") 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
echo "$ret"
|
|
return 0
|
|
fi
|
|
|
|
# try with --insecure
|
|
if [ "$(uci get wgclient.@client[0].try_insecure)" -eq '1' ]; then
|
|
ret=$(curl --insecure https://"$ip"/ubus -d "$req") 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
echo "$ret"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# try with http
|
|
if [ "$(uci get wgclient.@client[0].try_http)" -eq '1' ]; then
|
|
ret=$(curl http://"$ip"/ubus -d "$req") 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
echo "$ret"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
request_token () {
|
|
local ip=$1
|
|
local user=$2
|
|
local password=$3
|
|
|
|
json_init
|
|
json_add_string "jsonrpc" "2.0"
|
|
json_add_int "id" "1"
|
|
json_add_string "method" "call"
|
|
json_add_array "params"
|
|
json_add_string "" "00000000000000000000000000000000"
|
|
json_add_string "" "session"
|
|
json_add_string "" "login"
|
|
json_add_object
|
|
json_add_string "username" "$user"
|
|
json_add_string "password" "$password"
|
|
json_close_object
|
|
json_close_array
|
|
req=$(json_dump)
|
|
ret=$(query_gw "$ip" "$req") 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
json_load "$ret"
|
|
json_get_vars result result
|
|
json_select result
|
|
json_select 2
|
|
json_get_var ubus_rpc_session ubus_rpc_session
|
|
echo "$ubus_rpc_session"
|
|
}
|
|
|
|
wg_rpcd_get_usage () {
|
|
local token=$1
|
|
local ip=$2
|
|
local secret=$3
|
|
|
|
json_init
|
|
json_add_string "jsonrpc" "2.0"
|
|
json_add_int "id" "1"
|
|
json_add_string "method" "call"
|
|
json_add_array "params"
|
|
json_add_string "" "$token"
|
|
json_add_string "" "wginstaller"
|
|
json_add_string "" "get_usage"
|
|
json_add_object
|
|
json_close_object
|
|
json_close_array
|
|
req=$(json_dump)
|
|
ret=$(query_gw "$ip" "$req") 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
# return values
|
|
json_load "$ret"
|
|
json_get_vars result result
|
|
json_select result
|
|
json_select 2
|
|
json_get_var num_interfaces num_interfaces
|
|
echo "num_interfaces: ${num_interfaces}"
|
|
}
|
|
|
|
wg_error_handling () {
|
|
local response_code=$1
|
|
|
|
case "$response_code" in
|
|
1) logger -t "wginstaller" "Server rejected request since the public key is already used!" ;;
|
|
*) logger -t "wginstaller" "Unknown Error Code!";;
|
|
esac
|
|
}
|
|
|
|
wg_rpcd_register () {
|
|
local token=$5
|
|
local ip=$6
|
|
local mtu=$7
|
|
local public_key=$8
|
|
|
|
json_init
|
|
json_add_string "jsonrpc" "2.0"
|
|
json_add_int "id" "1"
|
|
json_add_string "method" "call"
|
|
json_add_array "params"
|
|
json_add_string "" "$token"
|
|
json_add_string "" "wginstaller"
|
|
json_add_string "" "register"
|
|
json_add_object
|
|
json_add_int "mtu" "$mtu"
|
|
json_add_string "public_key" "$public_key"
|
|
json_close_object
|
|
json_close_array
|
|
req=$(json_dump)
|
|
ret=$(query_gw "$ip" "$req") 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
json_load "$ret"
|
|
json_get_vars result result
|
|
json_select result
|
|
json_select 2
|
|
json_get_var response_code response_code
|
|
if [ "$response_code" -ne 0 ]; then
|
|
wg_error_handling "$response_code"
|
|
return 1
|
|
fi
|
|
json_get_var gw_pubkey gw_pubkey
|
|
json_get_var gw_ipv4 gw_ipv4
|
|
json_get_var gw_ipv6 gw_ipv6
|
|
json_get_var gw_port gw_port
|
|
export "$1=$gw_pubkey"
|
|
export "$2=$gw_ipv4"
|
|
export "$3=$gw_ipv6"
|
|
export "$4=$gw_port"
|
|
}
|