---
# System prepended metadata

title: VAPIX Bash

---

# Overview



## 佈置
- [連接 Github](https://hackmd.io/@5giotlead/tb-repo)
- 下載檔案
```
git clone git@github.com:5giotlead/apim.git
```
- 執行 `vapix.sh` 檔案
```
./vapix.sh
```
- 若無權限，給檔案加上權限，重新執行
```
chmod +x vapix.sh
```

## vapix .sh code
:::spoiler
```shell=
#!/bin/bash

DEFAULT_USER="swae"
DEFAULT_PASS="5Giotlead"
DEFAULT_IP="192.168.1.57"
DEFAULT_HTTP_METHOD="POST"

declare -A API_MAP
declare -A API_JSON

API_CATEGORIES=("Custom" "Applications" "AOA")
API_MAP["Custom,1"]="/axis-cgi/customhttpheader.cgi"
API_JSON["Custom,1"]="true"
API_MAP["Applications,1"]="/axis-cgi/applications/list.cgi"
API_JSON["Applications,1"]="false"
API_MAP["AOA,1"]="/local/objectanalytics/control.cgi"
API_JSON["AOA,1"]="true"

echo "Choose one auth type: "
echo "1) Basic"
echo "2) Digest"
read -p "(1/2) > " auth_choice

case "$auth_choice" in
    1) auth_method="basic" ;;
    2) auth_method="digest" ;;
    *) echo "Invalid! Please enter 1 or 2"; exit 1 ;;
esac

echo "Choose API category:"
for idx in "${!API_CATEGORIES[@]}"; do
    echo "$((idx+1))) ${API_CATEGORIES[$idx]}"
done
read -p "Category number > " cat_choice
cat_idx=$((cat_choice-1))
if [[ -z "${API_CATEGORIES[$cat_idx]}" ]]; then
    echo "Invalid category!"
    exit 1
fi
category="${API_CATEGORIES[$cat_idx]}"

echo "Choose API:"
api_count=0
for key in "${!API_MAP[@]}"; do
    IFS=',' read -r cat api_idx <<< "$key"
    if [[ "$cat" == "$category" ]]; then
        api_count=$((api_count+1))
        echo "$api_count) ${API_MAP[$key]}"
        api_keys[$api_count]="$key"
    fi
done

read -p "API number > " api_choice
api_key="${api_keys[$api_choice]}"
use_api="${API_MAP[$api_key]}"
use_json="${API_JSON[$api_key]}"
use_jq=""
if [[ "$use_json" == "true" ]]; then
    use_jq="| jq ."
fi

read -p "Username: [$DEFAULT_USER]: " -r username
username="${username:-$DEFAULT_USER}"

read -s -p "Password: (Default is filled in)" -r password
password="${password:-$DEFAULT_PASS}"
echo

read -p "HTTP Method? [$DEFAULT_HTTP_METHOD]: " -r http_method
http_method="${http_method:-$DEFAULT_HTTP_METHOD}"

read -p "Target IP address? [$DEFAULT_IP]: " -r ip_addr
ip_addr="${ip_addr:-$DEFAULT_IP}"

if [[ $use_json == "true" ]]; then
    read -e -p "A json file path for JSON input parameters: " json_path
    curl_cmd="curl -u $username:$password --$auth_method -X $http_method -H \"Content-Type: application/json\" -d @$json_path http://$ip_addr$use_api $use_jq"
else
    curl_cmd="curl -u $username:$password --$auth_method -X $http_method http://$ip_addr$use_api $use_jq"
fi

echo "Issue HTTP Request:"
echo "$curl_cmd"
eval $curl_cmd
```
:::

## 使用範例 (Custom HTTP header API)
```
Choose one auth type:
1) Basic
2) Digest
(1/2) > 2
Choose API category:
1) Custom
2) Applications
3) AOA
Category number > 1
Choose API:
1) /axis-cgi/customhttpheader.cgi
API number > 1
Username: [swae]:
Password: (Default is filled in)
HTTP Method? [POST]:
Target IP address? [192.168.1.57]:
A json file path for JSON input parameters: ListCustomHeaders.json
Issue HTTP Request:
curl -u swae:5Giotlead --digest -X POST -H "Content-Type: application/json" -d @ListCustomHeaders.json http://192.168.1.57/axis-cgi/customhttpheader.cgi | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   381  100   381    0     0  58778      0 --:--:-- --:--:-- --:--:-- 63500
100  1083    0  1004  100    79  28568   2247 --:--:-- --:--:-- --:--:-- 30815
{
  "apiVersion": "1.0",
  "context": "OptionalContext",
  "method": "list",
  "data": {
    "X-Content-Type-Options": "nosniff",
    "X-Frame-Options": "SAMEORIGIN",
    "X-XSS-Protection": "1; mode=block",
    "Content-Security-Policy": "default-src 'self'; frame-ancestors 'self'; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://*.axis.com mediastream: blob:; script-src 'self' https://*.googletagmanager.com https://www.google-analytics.com https://ssl.google-analytics.com https://*.axis.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://*.google-analytics.com https://*.googletagmanager.com https://*.axis.com data: blob:; media-src 'self' mediastream: blob:; object-src 'none'",
    "Referrer-Policy": "strict-origin-when-cross-origin",
    "Access-Control-Allow-Headers": "authorization",
    "Access-Control-Allow-Origin": "http://192.168.1.223:8080",
    "Access-Control-Expose-Headers": "WWW-Authenticate",
    "Access-Control-Allow-Credentials": "true"
  }
}
```