43 lines
1.3 KiB
Bash
Executable File
43 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# FILE: wgapi:back/api/dashboard/index.cgi
|
|
# DESCRIPTION: Recieves incoming dashboard API requests
|
|
# USAGE: serve
|
|
# ERRORS:
|
|
# 3: Bad usage
|
|
# 4: Missing vars vile
|
|
|
|
CONFIG_FILE='/etc/wgapi/config'
|
|
[ -f "${CONFIG_FILE}" ] || exit 4
|
|
source "${CONFIG_FILE}"
|
|
|
|
case "${REQUEST_METHOD}" in
|
|
|
|
# List peers
|
|
'GET')
|
|
printf '%s requested peer listing...\n' "${REMOTE_ADDR}" >>"${LOGFILE}"
|
|
# Create token if needed
|
|
token="$(grep "${REMOTE_ADDR}" "${TOKENS_FILE}" | cut -f2)"
|
|
if [ "${token}" == "" ]; then
|
|
printf 'Creating token for %s...\n' "${REMOTE_ADDR}" >>"${LOGFILE}"
|
|
token="$(</dev/urandom tr -dc '[:alnum:]' | fold -w 64 | head -n 1)"
|
|
printf '%s\t%s\n' "${REMOTE_ADDR}" "${token}" >>"${TOKENS_FILE}"
|
|
fi
|
|
if peers="[$("${LIB_DIR}/wg_peer_list" "${REMOTE_ADDR}" json)]"; then
|
|
printf '{"token":"%s","peers":%s}' "${token}" "${peers}" | "${LIB_DIR}/http_res" 200 'application/json'
|
|
printf 'Sent peers to user %s\n' "${REMOTE_ADDR}" >>"${LOGFILE}"
|
|
else
|
|
printf 'ERROR: Failed to lookup user: %s\n' "${REMOTE_ADDR}" >>"${LOGFILE}"
|
|
printf 'Failed to lookup user' | "${LIB_DIR}/http_res" 500
|
|
fi
|
|
;;
|
|
|
|
# Add peer
|
|
'POST') ./add "${REMOTE_ADDR}" "${QUERY_STRING}";;
|
|
|
|
# Delete peer
|
|
'DELETE') ./delete "${REMOTE_ADDR}" "${QUERY_STRING}";;
|
|
|
|
# Bad request
|
|
*) printf 'Invalid HTTP verb' | "${LIB_DIR}/http_res" 405;;
|
|
|
|
esac && exit 0 |