{ "name": "Jetons GH", "isActive": "1", "group": "Reveil", "mode": "schedule", "schedule": "0 * * * *", "trigger": [ "" ], "timeout": "0", "object_id": null, "isVisible": "0", "display": { "name": "", "icon": "<\/i>" }, "order": "9999", "description": "Rafraichi toutes les heures les tokens GH dans les équipements du plugin GoogleCast", "configuration": { "timeDependency": 0, "has_return": 0, "logmode": "default", "allowMultiInstance": "0", "syncmode": "0", "timeline::enable": "0" }, "state": "stop", "elements": [ { "name": null, "type": "code", "options": [], "order": "0", "subElements": [ { "name": null, "type": "code", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "code", "subtype": null, "expression": "\/\/ Objectif : Mettre à jour les Google Home Tokens\n\/\/ Auteur : Mguyard\n\n\/\/ Chemin des scripts\n$PATH = \"\/var\/www\/Gcast\";\n\n\/\/ Recupere l'Access Token\n$GH_accesstoken = shell_exec($PATH . \"\/get_tokens.py | grep '\\[*\\] Access token' | awk -F ': ' '{print $2}'\");\n$scenario->setLog(\"Access Token Extracted = \".$GH_accesstoken);\n\n\/\/ Recupere les Tokens\n$JSON = json_decode(shell_exec($PATH . \"\/grpcurl -H 'authorization: Bearer \" . $GH_accesstoken . \"' -import-path \" . $PATH . \" -proto \" . $PATH . \"\/google\/internal\/home\/foyer\/v1.proto googlehomefoyer-pa.googleapis.com:443 google.internal.home.foyer.v1.StructuresService\/GetHomeGraph | jq '[.home.devices[] | {deviceName, localAuthToken}]'\"), TRUE);\n\/\/$scenario->setLog(\"JSON Receive = \" . var_export($JSON, TRUE)); \/\/ Uncomment to DEBUG\n\n\/\/ Boucle sur l'ensemble des equipements GoogleCast pour verifier si le JSON contient le token de cet equipement\n\/\/ et l'ajouter dans le plugin au niveau de l'équipement\nforeach (eqLogic::byType('googlecast') as $eqLogic) {\n\tif ($eqLogic->getConfiguration('cast_type') == 'cast') {\n\t\t\/\/ L'equipement est de type \"cast\"\n \t$friendlyName = $eqLogic->getConfiguration('friendly_name');\n \t$scenario->setLog(\"GoogleCast Device Friendly Name = \" . $friendlyName);\n \t\/\/ Pour chacun des tokens recu on verifie si un equipement possede le meme nom\n \tforeach($JSON as $JSONeq) {\n \tif ($JSONeq['deviceName'] == $friendlyName) {\n\t\t\t\t$scenario->setLog(\"Find a Device Match in Google Tokens: \" . $JSONeq['deviceName'] . '\/' . $friendlyName);\n \t$scenario->setLog(\"Token : \" . $JSONeq['localAuthToken']);\n \t\/\/ On verifie que le token ne soit pas vide\n \tif ( ! empty($JSONeq)) {\n \t$actualToken = $eqLogic->getConfiguration('ga_token');\n \tif ( $actualToken != $JSONeq['localAuthToken'] ) {\n \t\t$scenario->setLog(\"Attempt to remplace token : \" . $actualToken . \" (OLD) by \" . $JSONeq['localAuthToken'] . \" (NEW)\");\n \t\t$eqLogic->setConfiguration('ga_token', $JSONeq['localAuthToken']);\n \t$eqLogic->save();\n \tif ($eqLogic->getConfiguration('ga_token') == $JSONeq['localAuthToken']) {\n \t$scenario->setLog(\"Token updated\");\n } else {\n \t$scenario->setLog(\"\/!\\ Failed to update Token\");\n }\n } else {\n \t$scenario->setLog(\"Bypass Token - Token is still valid\"); \n }\n } else {\n \t$scenario->setLog(\"Bypass Token - Token is empty\");\n }\n } else {\n \t\/\/$scenario->setLog(\"Device Not Match : \" . $JSONeq['deviceName'] . '\/' . $friendlyName); \/\/ Uncomment to DEBUG\n }\n }\n $scenario->setLog(\"---------------------------------\");\n }\n}", "options": [], "order": "0" } ] } ] } ] }