[Bash] API BLINK Amazon

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

[Bash] API BLINK Amazon

Message par Guigui »

Hello

Voici un petit programme en bash pour armer / désarmer votre système BLINK via script


Assurez-vous que jq est installé (sudo apt-get install jq sur Debian/Ubuntu).

Générez un UID ( voir le lien dans le code)
Renseigner mot de passe et email de votre compte

Il faut toujours lancer le script avec un paramètre ( ARMER ou DESARMER)

Un premier lancement vous enverra un code par SMS a renseigner

Puis après une fois votre uid associé a votre compte, vous pourrez soit armer ou désarmer directement en ligne de commande.



Bonne exploitation =)

Code : Tout sélectionner

#!/bin/bash

###############################
# SCRIPT API BLINK PAR GUIGUI #
#         VERSION 1.0         #
#          27/05/2024         #
###############################


#########################
#       VARIABLES       #
#########################


unique_id="cc746a0c-ac58-423c-a139-89990686ec34" # a generer sur https://www.uuidgenerator.net/ 

passwd="VOTRE_PASSWORD" # Conserver les guillements
email="toto@hotmail.fr" # Conserver les guillements
   
 

#########################
#    AUTHENTIFICATION   #
#########################



if [ -z $1 ] 
    then
        echo "Pas de paramètres entres. Fin du script"
        exit
fi




# Configuration
url="https://rest-prod.immedia-semi.com/api/v5/account/login"
data="{\"unique_id\": \"$unique_id\", \"password\":\"$passwd\", \"reauth\":\"true\",\"email\":\"$email\"}"
content_type="Content-Type: application/json"

# Effectuer la première requête pour obtenir les données d'authentification
# Elle est mise en boucle pour pallier a l erreur heavy load
max_attempts=5
attempt=1
sleep_time=10  # seconds

while (( attempt <= max_attempts ))
do
    response=$(curl -sSl -m 60 "$url" -X POST -H "$content_type" -d "$data")

    # Vérifier si la réponse contient le message d'erreur
    if echo "$response" | grep -q "This website is under heavy load"
        then
            sleep $sleep_time
            ((attempt++))
        else
            break
    fi
done

if (( attempt > max_attempts ))
    then
       echo "Surcharge du site"
       exit 1
fi




# Extraire les informations nécessaires de la réponse JSON
AccountID=$(echo "$response" | jq -r '.account.account_id')
ClientID=$(echo "$response" | jq -r '.account.client_id')
token=$(echo "$response" | jq -r '.auth.token')
tier=$(echo "$response" | jq -r '.account.tier')  # Nouvelle variable pour le tier




# Avoir les données du HOMESCREEN


HOMESCREEN=$(curl -sSl -m 60 --request GET  --url https://rest-$tier.immedia-semi.com/api/v3/accounts/$AccountID/homescreen  --header "token-auth: $token" )

ETAT_HOMESCREEN=$(echo $HOMESCREEN | jq -r .code)


if [ $ETAT_HOMESCREEN = 101 ] || [ $ETAT_HOMESCREEN != null ]
    then

        read -p "Veuillez entrer le code PIN recu par sms: " PIN_CODE

        # Effectuer la deuxième requête pour vérifier le code PIN en utilisant le bon host
        RESPONSE=$(curl -s -X POST "https://rest-$tier.immedia-semi.com/api/v4/account/$AccountID/client/$ClientID/pin/verify" \
          -H "Content-Type: application/json" \
          -H "TOKEN_AUTH: $token" \
          --data "{\"pin\":\"$PIN_CODE\"}")

        # Afficher la réponse
        result=$(echo "$RESPONSE" | jq ."valid")
                #echo '{"valid":true,"require_new_pin":false,"message":"Client has been successfully verified","code":1626}'

        if [ $result = true ]
            then
                echo TOKEN VALIDE
                echo relancer le programme
                exit
            else
                echo API_KO
                exit
        fi
fi


#################
#    ACTIONS    #
#################


# Actions
if [ $1 = ARM ] || [ $1 = ARMER ]
    then
        NetworkID=$(echo "$HOMESCREEN" | jq -r ."networks"[]."id")
        retour=$(curl -sSl -m 60 --request POST  --url https://rest-$tier.immedia-semi.com/api/v1/accounts/$AccountID/networks/$NetworkID/state/arm --header "token-auth: $token")
#        echo $retour | jq
fi

if [ $1 = DISARM ] || [ $1 = DESARMER ]
    then
        NetworkID=$(echo "$HOMESCREEN" | jq -r ."networks"[]."id")
        retour=$(curl -sSl -m 60 --request POST  --url https://rest-$tier.immedia-semi.com/api/v1/accounts/$AccountID/networks/$NetworkID/state/disarm --header "token-auth: $token")
#        echo $retour | jq
fi

Répondre