Skip to content

Instantly share code, notes, and snippets.

@turtlemonvh
Created June 18, 2020 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save turtlemonvh/c131c998b2e1a3e0d9192b5093062cdb to your computer and use it in GitHub Desktop.
Save turtlemonvh/c131c998b2e1a3e0d9192b5093062cdb to your computer and use it in GitHub Desktop.
Create Ionic API key
#!/usr/bin/env bash
## Script for creating an API key
## Use
# $ bash createapikey.sh
#Tenant ID: 5e7e32613961387979fcfd54
#Username or email address: timothy.vanheest+ionic.billing-demo.7@gmail.com
#Password:
#>> Fetching user info
#>> Creating API Key
#>> API Key Details
#bearer token = XXXXX
#hmac public = XXXXX
#hmac private = XXXXX=
read -p 'Tenant ID: ' tenantid
read -p 'Username or email address: ' username
read -sp 'Password: ' password
extract_json_field() { python -c "import sys, json; print(json.load(sys.stdin)[\"$1\"])"; }
echo
echo ">> Fetching user info"
userinfo_response=$(curl -s -X GET -u $username:$password https://api.deveng.ionic.engineering/v2/$tenantid/scim/Users/Me)
userid=$(echo $userinfo_response | extract_json_field id)
apikey_request_body() {
cat << EOF
{
"name":"Devx",
"scopes":[
"access:api",
"analytics:all","analytics:applications","analytics:enrollments","analytics:metrics","analytics:policies","analytics:userlifecycle",
"apikey:create","apikey:delete","apikey:manage","apikey:read","apikey:update",
"applications:create","applications:delete","applications:manage","applications:read","applications:update",
"billing:manage","billing:read",
"devices:delete","devices:manage","devices:read","devices:update",
"downloads:read",
"groups:create","groups:delete","groups:manage","groups:read","groups:update",
"keyservers:conns:update","keyservers:creds:create","keyservers:creds:delete","keyservers:creds:manage","keyservers:creds:read","keyservers:creds:update","keyservers:manage","keyservers:read","keyservers:state:update",
"keyspaces:read","keyspaces:update",
"manage:all",
"markings:create","markings:delete","markings:manage","markings:read","markings:update",
"onboarding:user",
"policies:create","policies:delete","policies:manage","policies:publish","policies:read","policies:simulate","policies:update",
"read:all",
"roles:create","roles:delete","roles:manage","roles:read","roles:update",
"settings:manage","settings:read","settings:update",
"users:create","users:delete","users:manage","users:read","users:update"
]
}
EOF
}
echo ">> Creating API Key"
response=$(
curl -s \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST \
-u $username:$password \
https://api.deveng.ionic.engineering/v2/$tenantid/scim/Users/$userid/apikeys \
--data "$(apikey_request_body)"
)
echo ">> API Key Details"
echo bearer token = $(echo $response | extract_json_field bearer)
echo hmac public = $(echo $response | extract_json_field id)
echo hmac private = $(echo $response | extract_json_field secret)
@turtlemonvh
Copy link
Author

Working with JSON in bash is super nasty. I messed with sed for a little while but ended up giving up and using python.

A simple python script (likely calling out to curl to make requests) would be much nicer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment