Recipes
Rotate Device Passwords
Automation
GET /v1/devices
POST /v1/tasks
Rotate the passwords on the devices that support the task, and track the task to completion.
You can adjust the script to your needs. Change the conditions, variables, and values to produce the output you want.
import json
import time
import requests
BASE = "https://api.securithings.com"
headers = {"Authorization": f"Bearer {access_token}"}devices = requests.get(
f"{BASE}/v1/devices",
params={"status": "online", "limit": 100},
headers=headers,
).json()["devices"]
targets = [
device["id"]
for device in devices
if device["availableTask"]["rotatePassword"]
]default_payload = {
"autoGeneratePassword": True,
"changePasswordByRole": True,
"userRoles": ["admin"],
"passwordExpiryDays": 90,
"enforceHttps": True,
"passwordLength": 12,
"includeUppercase": True,
"includeLowercase": True,
"includeNumbers": True,
"includeSymbols": False,
}response = requests.post(
f"{BASE}/v1/tasks",
json={
"taskType": "rotatePassword",
"defaultPayload": default_payload,
"devices": [
{"deviceId": device_id}
for device_id in targets
],
},
headers=headers,
)
task_id = response.json()["taskId"]while True:
task = requests.get(
f"{BASE}/v1/tasks/{task_id}",
headers=headers,
).json()
pending = [
device_task
for device_task in task["deviceTasks"]
if device_task["status"] != "completed"
]
if not pending:
break
time.sleep(30)result = {
"taskId": task_id,
"succeeded": [
{
"deviceId": device_task["deviceId"],
"deviceName": device_task["deviceName"],
}
for device_task in task["deviceTasks"]
if device_task["result"] == "succeeded"
],
"failed": [
{
"deviceId": device_task["deviceId"],
"deviceName": device_task["deviceName"],
"result": device_task["result"],
}
for device_task in task["deviceTasks"]
if device_task["result"] != "succeeded"
],
}
print(json.dumps(result, indent=2))Output
{
"taskId": "23bpozz1mpjjedtr",
"succeeded": [
{
"deviceId": "9ff559ee-38b6-11f1-81cb-465864a35d0a",
"deviceName": "192.168.2.69 - Unit"
}
],
"failed": [
{
"deviceId": "dc7d4ef1-6bf9-11f1-b083-d27bafcacdf8",
"deviceName": "192.168.2.70 - Unit",
"result": "failed"
}
]
}