Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepy
linenumberstrue
import requests
import base64
  
#HTTP call method
def httpCall(method,url,headers,data):
    if method == "POST":
        resp = requests.post(url, headers=headers, data=data)
    if method == "GET":
        resp = requests.get(url, headers=headers, data=data)
    if method == "PUT":
        resp = requests.put(url, headers=headers, data=data)
    
    print "HTTPCall response: " + str(resp.status_code)
    #check for failures on httpCall
    if resp.status_code != 200:
        print "HTTPCall error detail: " + str(resp.json())
    
    print	  
    return resp.json()
  
#############################################################################
# Configure Chariot URL and MQTT Distributor users to migrate
#############################################################################

#Set URL for you Chariot installation
chariotUrl = "http://localhost:8080"
  
#Create Chariot username:password dictionary for all MQTT Distributor users to be migrated
migratedistributorUsersmigrateDistributorUsers = {
 	"admin":"password",
 	"user1":"password1",
 	"user2":"password2"
 	}
  
#############################################################################
headers = {}
 
#Accept Chariot EULA
print "Accept Chariot EULA"
url = chariotUrl + "/eula"
headers["accept"] = "application/json;api-version=1.0"
headers["content-type"] = "application/json"
data = "{\"isAccepted\": true}"
http_response = httpCall("POST",url,headers,data)
  
#Chariot login using admin user to get bearer token valid for 90 minutes
print "Chariot login and get bearer token"
url = chariotUrl + "/login"
headers["accept"] = "application/json;api-version=1.0"
headers["Authorization"] = "Basic " + base64.b64encode("admin:password")
data = {}
http_response = httpCall("POST",url,headers,data)
accessToken = http_response["access_token"]
  
#Read Distributor users
print "Read MQTT Distributor users"
print
distributorUsers = system.cirruslink.distributor.readConfig("Users")
  
#Create new format Access Control Lists (ACLs)
for i in range(len(distributorUsers)):
    subscribeList = ""
    publishList = ""  
    userName = distributorUsers[i]["Username"]
    #check to see if MQTT Distributor user is included in migration list
    if userName in migratedistributorUsersmigrateDistributorUsers.keys():
    	print "Migrating MQTT Distributor User: " + userName   
    	password = list(migratedistributorUsersmigrateDistributorUsers.values())[list(migratedistributorUsersmigrateDistributorUsers.keys()).index(userName)]
    	acls = distributorUsers[i]["ACLs"]
    	acl_list = acls.split(",")
    	for i in range(len(acl_list)):
    	    #check for leading spaces
    	    if acl_list[i][:1] == " ":
    	        acl_list[i] = acl_list[i][1:len(acl_list[i])]
    	    #check for R subscriptions
    	    if acl_list[i][:2] == "R ":
    	        subscription = acl_list[i][2:len(acl_list[i])]
    	        subscription = "\"" + subscription + "\""
    	        subscribeList = subscribeList + subscription + ","
    	    #check for W subscriptions
    	    if acl_list[i][:2] == "W ":
    	        publish = acl_list[i][2:len(acl_list[i])]
    	        publish = "\"" + publish + "\""
    	        publishList = publishList + publish + ","
    	    #check for RW subscription
    	    if acl_list[i][:2] == "RW":
    	        subscription = acl_list[i][3:len(acl_list[i])]
    	        subscription = "\"" + subscription + "\""
    	        subscribeList = subscribeList + subscription + ","
    	        publish = acl_list[i][3:len(acl_list[i])]
    	        publish = "\"" + publish + "\""
    	        publishList = publishList + publish + ","
                  
    	#create Chariot user
    	url = chariotUrl + "/mqttusers"
    	headers["accept"] = "application/json;api-version=1.0"
    	headers["content-type"] = "application/json"
    	headers["Authorization"] = "Bearer " + accessToken
    	data = "[{\"username\":\"" + userName + "\"," + "\"password\":\"" + password + "\"," + "\"acl\":{\"publishTopics\":[" + publishList[:-1] +"],\"subscribeTopics\":[" + subscribeList[:-1] + "]}}]"
    	print "Creating MQTT Credentials: " + str(data)
    	http_response = httpCall("POST",url,headers,data)
    
    else:
      	print "Not migrating MQTT Distributor User: " + userName
		print  
  
#Read Chariot MQtt Users
print "Reading Chariot MQTT Credentials"
url = chariotUrl + "/mqttusers"
headers["accept"] = "application/json;api-version=1.0"
headers["Authorization"] = "Bearer " + accessToken
data = {}
chariotMqttUsers = httpCall("GET",url,headers,data)
print "Chariot MQTT Credentials: " + str(chariotMqttUsers)

...