import json import urllib3 from xml.etree import ElementTree as ET import requests from passwords import * # it's fine, ssl certs are for losers anyway urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) config = json.load(open("config.json")) ET.register_namespace("hid", "http://www.hidglobal.com/VertX") ET.register_namespace("hid", "http://www.hidcorp.com/VertX") fieldnames = "CardNumber,CardFormat,PinRequired,PinCode,ExtendedAccess,ExpiryDate,Forename,Initial,Surname,Email,Phone,Custom1,Custom2,Schedule1,Schedule2,Schedule3,Schedule4,Schedule5,Schedule6,Schedule7,Schedule8".split(",") def doImportRequest(ip, params=None, files=None): """Send a request to the door control import script""" r = requests.post( 'https://' + ip + '/cgi-bin/import.cgi', params=params, files=files, auth=requests.auth.HTTPDigestAuth(DOOR_USERNAME, DOOR_PASSWORD), timeout=10, verify=False) # ignore insecure SSL xml = ET.XML(r.text) if r.status_code != 200 \ or len(xml.findall("{http://www.hidglobal.com/VertX}Error")) > 0: print("Door Updating Error: ", r.status_code, r.reason) print(r.text) sys.exit(1) def doCSVImport(doorIP, csv): """Do the CSV import procedure on a door control""" doImportRequest(doorIP, {"task": "importInit"}) doImportRequest(doorIP, {"task": "importCardsPeople", "name": "cardspeopleschedule.csv"}, {"importCardsPeopleButton": ("cardspeopleschedule.csv", csv, 'text/csv')}) doImportRequest(doorIP, {"task": "importDone"}) def doXMLRequest(doorIP, xml, prefix=b''): r = requests.get( 'https://' + doorIP + '/cgi-bin/vertx_xml.cgi', params={'XML': prefix + xml}, auth=requests.auth.HTTPDigestAuth(DOOR_USERNAME, DOOR_PASSWORD), verify=False) xml = ET.XML(r.text) # probably meed to be more sane about this if r.status_code != 200 \ or len(xml.findall("{http://www.hidglobal.com/VertX}Error")) > 0: print("Door Updating Error: ", r.status_code, r.reason) print(r.text) sys.exit(1) return xml