#!/usr/bin/python
#
#
# This script is used to simulate MDM configurationfor Android device.
# Currently support:
# 1. Password enforcement
# 2. Camera enable/disable
# 3. Encryption enable/disable
# 4. Time to lock
#
import os
import sys
import json
import base64
import ConfigParser
sys.path.append('/opt/emserver/portal/www/cgi-py/')
import hostapi
import esutil
ADMIN_DN=""
ADMIN_PASSWD=""
ADMIN_INFO=""
SERVER_IP=""
SERVER_PORT=""
passwd_map = {'1' : '32768', '2' : '65536', '3' : '131072','4' : '262144', '5' : '327680', '6' : '393216'}
def usage():
print ("configure.py [account id][username] [policy name] [profile name]")
if __name__ == "__main__":
if not 5 == len(sys.argv):
usage()
exit(0)
account_id = sys.argv[1]
username = sys.argv[2]
policy_name = sys.argv[3]
profile_name = sys.argv[4]
configfile =open("/etc/sysconfig/mes.json")
configinfo = configfile.read()
configfile.close()
if not configinfo:
print"configure error, stop now!!!\n"
exit(-1)
admindata = json.loads(configinfo)
ADMIN_DN = admindata['user']
ADMIN_PASSWD = admindata['password']
ADMIN_INFO = ADMIN_DN + ':' +ADMIN_PASSWD
configfile = ConfigParser.ConfigParser()
configfile.readfp(open("/opt/emserver/conf/emserver.ini"))
SERVER_IP =configfile.get("hosted", "ipaddr")
SERVER_PORT =configfile.get("hosted", "port")
profile_content =hostapi.maintain.hostedaccess.es_get_device_profile_content(username,account_id, policy_name, profile_name)
profile = json.loads(profile_content,object_hook=esutil.decode_dict)
if notprofile["profileContent"].has_key("AndroidDeviceProfile"):
profile["profileContent"]["AndroidDeviceProfile"] ={'ws-type': 'AndroidDeviceProfile', 'DisableCamera':'0', 'EncryptDevice':'0','description': 'The default personal profile', 'profilechecksum':'62718BDD6ECF1A66290BC3723514482B'}
android_settings =profile["profileContent"]["AndroidDeviceProfile"]
if android_settings.has_key("DisableCamera"):
status =raw_input("Disable Camera [%s]:" %android_settings["DisableCamera"])
android_settings["DisableCamera"] = status
if android_settings.has_key("EncryptDevice"):
status =raw_input("Encrypt Device [%s]:" % android_settings["EncryptDevice"])
android_settings["EncryptDevice"] = status
if android_settings.has_key("TimeToLock"):
status =raw_input("Time to lock [%s] :" %android_settings["TimeToLock"])
if status =="":
android_settings.pop("TimeToLock")
else:
android_settings["TimeToLock"] = status
else:
status =raw_input("Time to lock :")
if not status =="":
android_settings["TimeToLock"] = status
if android_settings.has_key("PasscodeSettings"):
password =android_settings["PasscodeSettings"]
status =raw_input("Password quality (1 - Weak 2 - Something 3 - Numeric 4 -Alphabetic 5 - alphanumeric 6 - complex) :")
password['quality'] = passwd_map[status]
if password.has_key("max_failures"):
status = raw_input("Max failures [%s] :" %password["max_failures"])
if status == "":
password.pop("max_failures")
else:
password["max_failures"] = status
else:
status = raw_input("Max failures :")
if not status == "":
password["max_failures"] = status
if password.has_key("expiration"):
status = raw_input("Expiration [%s] :" % password["expiration"])
if status == "":
password.pop("expiration")
else:
password["expiration"] = status
else:
status = raw_input("Expiration :")
if not status == "":
password["expiration"] = status
if password.has_key("history"):
status = raw_input("History [%s] :" % password["history"])
if status == "":
password.pop("history")
else:
password["history"] = status
else:
status = raw_input("History :")
if not status == "":
password["history"] = status
if password.has_key("min_length"):
status = raw_input("Min length [%s] :" %password["min_length"])
if status == "":
password.pop("min_length")
else:
password["min_length"] = status
else:
status = raw_input("Min length :")
if not status == "":
password["min_length"] = status
if password.has_key("min_letters"):
status = raw_input("Min letters [%s] :" %password["min_letters"])
if status == "":
password.pop("min_letters")
else:
password["min_letters"] = status
else:
status = raw_input("Min letters:")
if not status == "":
password["min_letters"] = status
if password.has_key("min_lower"):
status = raw_input("Min lowers [%s] :" %password["min_lower"])
if status == "":
password.pop("min_lower")
else:
password["min_lower"] = status
else:
status = raw_input("Min lowers :")
if not status == "":
password["min_lower"] = status
if password.has_key("min_non_letter"):
status = raw_input("Min non-letters [%s] :" %password["min_non_letter"])
if status == "":
password.pop("min_non_letter")
else:
password["min_non_letter"] = status
else:
status = raw_input("Min non-letters :")
if not status == "":
password["min_non_letter"] = status
if password.has_key("min_numeric"):
status = raw_input("Min numeric digits [%s]:" % password["min_numeric"])
if status == "":
password.pop("min_numeric")
else:
password["min_numeric"] = status
else:
status = raw_input("Min numeric digits :")
if not status == "":
password["min_numeric"] = status
if password.has_key("min_symbols"):
status = raw_input("Min symbols [%s] :" %password["min_symbols"])
if status == "":
password.pop("min_symbols")
else:
password["min_symbols"] = status
else:
status = raw_input("Min symbols :")
if not status == "":
password["min_symbols"] = status
if password.has_key("min_upper"):
status = raw_input("Min uppers [%s] :" %password["min_upper"])
if status == "":
password.pop("min_upper")
else:
password["min_upper"] = status
else:
status = raw_input("Min upper :")
if not status == "":
password["min_upper"] = status
else:
status =raw_input("Enable password enforcement (1 - Weak 2 - Something 3 - Numeric4 - Alphabetic 5 - alphanumeric 6 - complex) :")
if status == '1':
android_settings["PasscodeSettings"] = {}
android_settings["PasscodeSettings"]['quality'] = passwd_map["status"]
status = raw_input("Max failures :")
if not status == "":
android_settings["PasscodeSettings"]["max_failures"] =status
status = raw_input("Expiration :")
if not status == "":
android_settings["PasscodeSettings"]["expiration"] = status
status = raw_input("History :")
if not status == "":
android_settings["PasscodeSettings"]["history"] = status
status = raw_input("Min length :")
if not status == "":
android_settings["PasscodeSettings"]["min_length"] = status
status = raw_input("Min letters :")
if not status == "":
android_settings["PasscodeSettings"]["min_letters"] =status
status = raw_input("Min lowers :")
if not status == "":
android_settings["PasscodeSettings"]["min_lower"] = status
status = raw_input("Min non-letters :")
if not status == "":
android_settings["PasscodeSettings"]["min_non_letter"] =status
status = raw_input("Min numeric digits :")
if not status == "":
android_settings["PasscodeSettings"]["min_numeric"] =status
status = raw_input("Min symbols :")
if not status == "":
android_settings["PasscodeSettings"]["min_symbols"] =status
status = raw_input("Min uppers :")
ifnot status == "":
android_settings["PasscodeSettings"]["min_upper"] = status
print android_settings
cmd_get_profile = 'curl -k --user"%s" https://wrest:8085/os/v-1/account-%s/namespace-mobile/object-mobilepolicies/section-%s/section-%s-D header.txt' % (ADMIN_INFO, account_id, policy_name, profile_name)
print cmd_get_profile
bashtext =os.popen(cmd_get_profile).readlines()
result = ''
for line in bashtext:
result = result +line
print result
profile_content = json.loads(result,object_hook=esutil.decode_dict)
data =base64.encodestring(json.dumps(profile))
profile_content['data'] = data
print profile_content
timestamp = ""
fd = open("header.txt")
headers = fd.readlines()
for header in headers:
ifheader.find("Last-Modified:") == 0:
timestamp = header.strip().split("Last-Modified:")[1]
print timestamp
profile_str =json.dumps(profile_content)
cmd_put_profile = 'curl -k -X PUT--user "%s" -d \'%s\' https://wrest:8085/os/v-1/account-%s/namespace-mobile/object-mobilepolicies/section-%s/section-%s-H "If-Unmodified-Since :%s"' % (ADMIN_INFO, profile_str, account_id,policy_name, profile_name, timestamp)
print cmd_put_profile
os.popen(cmd_put_profile)