- #!/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"
- }
|