ovhcli 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/bin/bash
  2. # shellcheck disable=SC1090 # https://www.shellcheck.net/wiki/SC1090
  3. # shellcheck disable=SC2154 # https://www.shellcheck.net/wiki/SC2154
  4. # shellcheck disable=SC2016 # https://www.shellcheck.net/wiki/SC2016
  5. # main variables
  6. # using same config file than for Golang script
  7. OVH_API_VERSION="1.0"
  8. PATH="/usr/local/bin:${PATH}"
  9. if [ -z "${OVH_CONF}" ]; then
  10. echo "You need to load a config with 'source loadOVHConfig <name>' before running this script"
  11. exit 10
  12. fi
  13. # source all ovh keys
  14. source <( grep '=' "${OVH_CONF}" )
  15. # Create ENDPOINT
  16. case "${endpoint}" in
  17. ovh-eu) ENDPOINT="https://eu.api.ovh.com/${OVH_API_VERSION}" ;;
  18. ovh-us) ENDPOINT="https://us.api.ovh.com/${OVH_API_VERSION}" ;;
  19. ovh-ca) ENDPOINT="https://ca.api.ovh.com/${OVH_API_VERSION}" ;;
  20. *) echo "${endpoint} is not yet supported" ; exit ;;
  21. esac
  22. # Signing process
  23. # @"method" "url" "post_data" "timestamp"
  24. TIME=$( curl -s "${ENDPOINT}/auth/time" )
  25. # Method
  26. # ovhcli get vps
  27. HTTP_METHOD="${1:?need a http method}"
  28. HTTP_QUERY="${ENDPOINT}/${2:?need a query}"
  29. HTTP_PAYLOAD="${3}"
  30. CLEAR_SIGN="${application_secret}+${consumer_key}+${HTTP_METHOD^^}+${HTTP_QUERY}+${HTTP_PAYLOAD}+${TIME}"
  31. SIG='$1$'$( echo -n "${CLEAR_SIGN}" | sha1sum - | cut -d' ' -f1 )
  32. # curl call
  33. curl -sL -X "${HTTP_METHOD^^}" \
  34. -H "Content-Type:application/json;charset=utf-8" \
  35. -H "X-Ovh-Application:${application_key}" \
  36. -H "X-Ovh-Timestamp:${TIME}" \
  37. -H "X-Ovh-Signature:${SIG}" \
  38. -H "X-Ovh-Consumer:${consumer_key}" \
  39. --data "${HTTP_PAYLOAD}" "${HTTP_QUERY}" \
  40. | jq '.'
  41. exit $?