keitaro-api-skill/scripts/keitaro-cli.sh

260 lines
8.3 KiB
Bash
Executable File

#!/bin/bash
# Keitaro API CLI Helper
# Makes it easier to interact with Keitaro API from command line
set -e
# Load credentials from .env if it exists
if [ -f "$(dirname "$0")/.env" ]; then
export $(grep -v '^#' "$(dirname "$0")/.env" | xargs)
fi
# Check for required environment variables
if [ -z "$KEITARO_DOMAIN" ] || [ -z "$KEITARO_API_KEY" ]; then
echo "Error: KEITARO_DOMAIN and KEITARO_API_KEY must be set"
echo "Either set them as environment variables or create a .env file"
exit 1
fi
BASE_URL="https://${KEITARO_DOMAIN}/admin_api/v1"
# Helper function to make API requests
keitaro_request() {
local method=$1
local endpoint=$2
local data=$3
if [ -n "$data" ]; then
response=$(curl -s -w "\n%{http_code}" -X "$method" \
-H "Api-Key: $KEITARO_API_KEY" \
-H "Content-Type: application/json" \
-d "$data" \
"${BASE_URL}${endpoint}")
else
response=$(curl -s -w "\n%{http_code}" -X "$method" \
-H "Api-Key: $KEITARO_API_KEY" \
"${BASE_URL}${endpoint}")
fi
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 300 ]; then
echo "$body" | jq . 2>/dev/null || echo "$body"
else
echo "Error $http_code:" >&2
echo "$body" | jq . 2>/dev/null || echo "$body" >&2
return 1
fi
}
# Command dispatcher
case "$1" in
# Affiliate Networks
"networks:list")
keitaro_request GET "/affiliate_networks"
;;
"networks:get")
[ -z "$2" ] && echo "Usage: $0 networks:get <id>" && exit 1
keitaro_request GET "/affiliate_networks/$2"
;;
"networks:create")
[ -z "$2" ] && echo "Usage: $0 networks:create <name> [postback_url]" && exit 1
data="{\"name\":\"$2\""
[ -n "$3" ] && data="$data,\"postback_url\":\"$3\""
data="$data}"
keitaro_request POST "/affiliate_networks" "$data"
;;
"networks:delete")
[ -z "$2" ] && echo "Usage: $0 networks:delete <id>" && exit 1
keitaro_request DELETE "/affiliate_networks/$2"
;;
# Offers
"offers:list")
keitaro_request GET "/offers"
;;
"offers:get")
[ -z "$2" ] && echo "Usage: $0 offers:get <id>" && exit 1
keitaro_request GET "/offers/$2"
;;
"offers:create")
[ -z "$2" ] && echo "Usage: $0 offers:create '<json>'" && exit 1
keitaro_request POST "/offers" "$2"
;;
"offers:clone")
[ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 offers:clone <id> <new_name>" && exit 1
keitaro_request POST "/offers/$2/clone" "{\"name\":\"$3\"}"
;;
# Campaigns
"campaigns:list")
keitaro_request GET "/campaigns?offset=0&limit=100"
;;
"campaigns:get")
[ -z "$2" ] && echo "Usage: $0 campaigns:get <id>" && exit 1
keitaro_request GET "/campaigns/$2"
;;
"campaigns:create")
[ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 campaigns:create <name> <alias>" && exit 1
keitaro_request POST "/campaigns" "{\"name\":\"$2\",\"alias\":\"$3\"}"
;;
"campaigns:enable")
[ -z "$2" ] && echo "Usage: $0 campaigns:enable <id>" && exit 1
keitaro_request POST "/campaigns/$2/enable"
;;
"campaigns:disable")
[ -z "$2" ] && echo "Usage: $0 campaigns:disable <id>" && exit 1
keitaro_request POST "/campaigns/$2/disable"
;;
"campaigns:streams")
[ -z "$2" ] && echo "Usage: $0 campaigns:streams <id>" && exit 1
keitaro_request GET "/campaigns/$2/streams"
;;
# Domains
"domains:list")
keitaro_request GET "/domains"
;;
"domains:get")
[ -z "$2" ] && echo "Usage: $0 domains:get <id>" && exit 1
keitaro_request GET "/domains/$2"
;;
"domains:create")
[ -z "$2" ] && echo "Usage: $0 domains:create <name>" && exit 1
keitaro_request POST "/domains" "{\"name\":\"$2\",\"state\":\"active\"}"
;;
"domains:check")
[ -z "$2" ] && echo "Usage: $0 domains:check <id>" && exit 1
keitaro_request POST "/domains/$2/check"
;;
"domains:ip")
keitaro_request GET "/domains/ip"
;;
# Landing Pages
"landings:list")
keitaro_request GET "/landing_pages"
;;
"landings:get")
[ -z "$2" ] && echo "Usage: $0 landings:get <id>" && exit 1
keitaro_request GET "/landing_pages/$2"
;;
# Statistics
"stats:clicks")
[ -z "$2" ] && echo "Usage: $0 stats:clicks '<json>'" && exit 1
keitaro_request POST "/clicks/log" "$2"
;;
"stats:conversions")
[ -z "$2" ] && echo "Usage: $0 stats:conversions '<json>'" && exit 1
keitaro_request POST "/conversions/log" "$2"
;;
# Bot List
"botlist:get")
keitaro_request GET "/botlist"
;;
"botlist:add")
[ -z "$2" ] && echo "Usage: $0 botlist:add '<json_array>'" && exit 1
keitaro_request POST "/botlist/add" "{\"ips\":$2}"
;;
"botlist:remove")
[ -z "$2" ] && echo "Usage: $0 botlist:remove '<json_array>'" && exit 1
keitaro_request POST "/botlist/exclude" "{\"ips\":$2}"
;;
# Groups
"groups:list")
[ -z "$2" ] && echo "Usage: $0 groups:list <type> (campaigns|offers|landings|domains)" && exit 1
keitaro_request GET "/groups?type=$2"
;;
"groups:create")
[ -z "$2" ] || [ -z "$3" ] && echo "Usage: $0 groups:create <name> <type>" && exit 1
keitaro_request POST "/groups" "{\"name\":\"$2\",\"type\":\"$3\"}"
;;
# Integrations
"fb:list")
keitaro_request GET "/integrations/facebook"
;;
"fb:get")
[ -z "$2" ] && echo "Usage: $0 fb:get <id>" && exit 1
keitaro_request GET "/integrations/facebook/$2"
;;
# Help
"help"|"--help"|"-h"|"")
cat << EOF
Keitaro API CLI Helper
Usage: $0 <command> [arguments]
Affiliate Networks:
networks:list - List all affiliate networks
networks:get <id> - Get network by ID
networks:create <name> [url] - Create network
networks:delete <id> - Delete network
Offers:
offers:list - List all offers
offers:get <id> - Get offer by ID
offers:create '<json>' - Create offer (pass JSON)
offers:clone <id> <new_name> - Clone offer
Campaigns:
campaigns:list - List all campaigns
campaigns:get <id> - Get campaign by ID
campaigns:create <name> <alias> - Create campaign
campaigns:enable <id> - Enable campaign
campaigns:disable <id> - Disable campaign
campaigns:streams <id> - Get campaign streams
Domains:
domains:list - List all domains
domains:get <id> - Get domain by ID
domains:create <name> - Create domain
domains:check <id> - Check domain status
domains:ip - Get server IP
Landing Pages:
landings:list - List all landing pages
landings:get <id> - Get landing page by ID
Statistics:
stats:clicks '<json>' - Query click statistics
stats:conversions '<json>' - Query conversions
Bot List:
botlist:get - Get bot list
botlist:add '<json_array>' - Add IPs to bot list
botlist:remove '<json_array>' - Remove IPs from bot list
Groups:
groups:list <type> - List groups by type
groups:create <name> <type> - Create group
Integrations:
fb:list - List Facebook integrations
fb:get <id> - Get Facebook integration
Examples:
$0 networks:create "MaxBounty" "https://maxbounty.com/postback"
$0 campaigns:create "Summer Sale" "summer-sale"
$0 offers:clone 123 "New Offer Name"
$0 stats:clicks '{"range":{"from":"2026-01-01","to":"2026-01-31","timezone":"UTC"},"columns":["clicks"],"metrics":["clicks"]}'
Configuration:
Set KEITARO_DOMAIN and KEITARO_API_KEY environment variables
Or create a .env file in the skill directory
EOF
;;
*)
echo "Unknown command: $1"
echo "Run '$0 help' for usage information"
exit 1
;;
esac