def ztptemplate(): authOK = classes.checkAuth("ztptemplateaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() formresult = request.form # Obtain the relevant device information from the database result = classes.ztptemplatedbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" print(result['message']) return render_template("ztptemplate.html", result=result['result'], message=result['message'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def switches(): authOK = classes.checkAuth("switchaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() formresult = request.form # Obtain the relevant device information from the database result = classes.devicedbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("switch.html", result=result['result'], switchos=result['switchos'], platforms=result['platforms'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars, entryExists=result['entryExists']) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def afcswitches(): authOK = classes.checkAuth("afcswitchesaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() try: formresult = request.form except: formresult = [] result = classes.getafcSwitches(formresult) message = "" if result['afcfabrics'] == "Authentication token header required": result['afcswitches'] = [] result['afcfabric'] = "" result['afcfabrics'] = [] message = result['afcfabrics'] if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("afcswitches.html", formresult=formresult, afcfabrics=result['afcfabrics'], afcswitches=result['afcswitches'], afcfabric=result['afcfabric'], message=message, totalentries=result['totalentries'], pageoffset=result['pageoffset'], entryperpage=result['entryperpage'], authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def afcvmareinventory(): authOK = classes.checkAuth("afcvmwareinventoryaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() try: formresult = request.form except: formresult = [] queryStr = "select * from afc where infotype='vmwareinventory'" afcvmwareinventory = classes.sqlQuery(queryStr, "selectone") if afcvmwareinventory == None: afcvmwareinventory = {} afcvmwareinventory['jsondata'] = [] afcvmwareinventory[ 'message'] = "No VMWare inventory information available" if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template( "afcvmwareinventory.html", formresult=formresult, afcvmwareinventory=json.dumps(afcvmwareinventory), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def telemetry(): authOK = classes.checkAuth("telemetry", "menu") if authOK != 0: # Check on which IP address the server is listening # Obtain the active IP address s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) hostip = s.getsockname()[0] sysvars = classes.globalvars() formresult = request.form # Obtain the relevant device information from the database result = classes.telemetrydbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("telemetry.html", result=result['result'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars, hostip=hostip) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def gateways(): authOK = classes.checkAuth("mobilityaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() formresult = request.form # Obtain the relevant Mobility Controller information from the database result = classes.mobilitydbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("gateways.html", result=result['result'], platformResult=result['platformResult'], osversionResult=result['osversionResult'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def afcintegrations(): authOK = classes.checkAuth("afcintegrationsaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() try: formresult = request.form except: formresult = [] queryStr = "select * from afc where infotype='integrations'" result = classes.sqlQuery(queryStr, "selectone") if result is not None: if isinstance(result, str): result = json.loads(result) if result['jsondata'] == '"Authentication token header required"': message = "Authentication token header required" afcintegrations = "[]" else: message = "" afcintegrations = result['jsondata'] else: afcintegrations = "[]" message = "No AFC integration information available" if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("afcintegrations.html", formresult=formresult, afcintegrations=afcintegrations, authOK=authOK, message=message, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK) else: return render_template("login.html")
def ztpDeactivate(): authOK = classes.checkAuth("ztpdevice", "feature") if authOK != 0: sysvars = classes.globalvars() formresult = request.form # Obtain the relevant device information from the database result = classes.ztpDeactivate(formresult) return json.dumps(result) else: return render_template("login.html")
def psmdss (): authOK=classes.checkAuth("psmdssaccess","submenu") if authOK!=0: sysvars=classes.globalvars() url="configs/cluster/v1/distributedservicecards" psminfo=classes.getRestpsm(url) if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("psmdss.html", authOK=authOK, psminfo=psminfo, sysvars=sysvars) else: return render_template("login.html")
def psmsecuritypolicies (): authOK=classes.checkAuth("psmsecuritypoliciesccess","submenu") if authOK!=0: sysvars=classes.globalvars() url="configs/security/v1/networksecuritypolicies" psminfo=classes.getRestpsm(url) if psminfo['items']==None: psminfo['items']=[] if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("psmsecuritypolicies.html", authOK=authOK, psminfo=psminfo, sysvars=sysvars) else: return render_template("login.html")
def sysmon(): authOK=classes.checkAuth("servicesstatusaccess","submenu") if authOK!=0: sysvars=classes.globalvars() formresult=request.form if formresult: classes.processAction(formresult['name'],formresult['action']) if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("sysmon.html",authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html",authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def dsservice(): authOK = classes.checkAuth("ubtserviceaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() authMethod = [ "EAP PEAP", "EAP-TLS", "Allow All MAC", "Mac Auth", "PAP", "CHAP" ] authSource = [ "Active Directory", "Local User Database", "Guest User Repository" ] result = {} editService = {} mcInfo = {} profileInfo = {} profileresult = {} message = [] try: formresult = request.form result = classes.dsservicedbAction(formresult) queryStr = "select id, description, ipaddress from devices where ostype='Mobility Controller'" mcInfo = classes.sqlQuery(queryStr, "select") queryStr = "select * from dsprofiles" profileInfo = classes.sqlQuery(queryStr, "select") if formresult['action'] == "Edit": editService = classes.sqlQuery( "select * from dsservices where id='{}'".format( formresult['id']), "selectone") profileresult = classes.getProfile() except: formresult = [] if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("dsservice.html", result=result, formresult=formresult, mcInfo=mcInfo, profileInfo=profileInfo, editService=editService, profileresult=profileresult, authMethod=authMethod, authSource=authSource, message=message, authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def deviceattributes(): authOK=classes.checkAuth("deviceattributesaccess","submenu") if authOK!=0: sysvars=classes.globalvars() formresult=request.form dictform=formresult.to_dict(flat=True) # Obtain the relevant information from the database result=classes.deviceattributesdbAction(dictform) if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("deviceattributes.html",result=result,formresult=formresult, totalentries=int(result['totalentries']),pageoffset=int(result['pageoffset']),entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html",authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def afcfabrics(): authOK = classes.checkAuth("afcfabricsaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() afcfabricuuid = [] afcfabrics = [] message = "" try: formresult = request.form except: formresult = [] queryStr = "select * from afc where infotype='fabrics'" afcfabrics = classes.sqlQuery(queryStr, "selectone") if afcfabrics is not None: if "jsondata" in afcfabrics: try: if isinstance(afcfabrics['jsondata'], str): afcfabricNames = json.loads(afcfabrics['jsondata']) else: afcfabricNames = afcfabrics['jsondata'] for items in afcfabricNames: afcfabricuuid.append(items['uuid']) except: if isinstance(afcfabrics['jsondata'], str): message = afcfabrics['jsondata'] else: message = "Error obtaining fabric information" afcfabrics['jsondata'] = [] else: message = "No AFC integration information available" afcfabrics = [] if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("afcfabrics.html", formresult=formresult, afcfabrics=json.dumps(afcfabrics), afcfabricuuid=afcfabricuuid, message=message, authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def psmalertpolicies (): authOK=classes.checkAuth("psmalertpoliciesaccess","submenu") if authOK!=0: sysvars=classes.globalvars() url="configs/monitoring/v1/alertPolicies" psmalertpolicies=classes.getRestpsm(url) if psmalertpolicies['items']==None: psmalertpolicies['items']=[] url="configs/monitoring/v1/alertDestinations" psmalertdestinations=classes.getRestpsm(url) if psmalertdestinations['items']==None: psmalertdestinations['items']=[] if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("psmalertpolicies.html", authOK=authOK, psmalertpolicies=psmalertpolicies, psmalertdestinations=psmalertdestinations, sysvars=sysvars) else: return render_template("login.html")
def index(): authOK = classes.checkAuth("anycliaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() try: formresult = request.form except: formresult = [] queryStr = "select id, description, ipaddress, ostype, platform, osversion from devices where ostype='arubaos-switch'" devicelist = classes.sqlQuery(queryStr, "select") if formresult: if classes.checkifOnline(formresult['deviceid'], "arubaos-switch") == "Online": if formresult['cmd']: cmdResult = classes.anycli(formresult['cmd'], formresult['deviceid']) if cmdResult: cmdContent = classes.b64decode( cmdResult['result_base64_encoded']).decode('utf_8') else: cmdContent = "Could not obtain information" else: cmdResult = [] cmdContent = "No command entered..." else: cmdResult = [] cmdContent = "Switch is offline" else: cmdResult = [] cmdContent = [] if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("anycli.html", formresult=formresult, devicelist=devicelist, cmdResult=cmdResult, cmdContent=cmdContent, authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def afcauditlog(): authOK = classes.checkAuth("afcauditlogaccess", "submenu") if authOK != 0: if authOK['hasaccess'] == True: sysvars = classes.globalvars() queryStr = "select COUNT(*) as totalentries from afcaudit" navResult = classes.sqlQuery(queryStr, "selectone") authOK['hasaccess'] = "true" return render_template("afcauditlog.html", pageoffset=1, entryperpage=25, totalentries=navResult['totalentries'], authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK) else: return render_template("login.html")
def deviceimages(): authOK = classes.checkAuth("imageaccess", "submenu") message = "" filename = "" if authOK != 0: sysvars = classes.globalvars() formresult = request.form if formresult: if formresult['action'] == "Submit image" or formresult[ 'action'] == "Submit changes": # check if the post request has the file part if request.files['softwareimage']: file = request.files['softwareimage'] if file.filename == '': message = 'No file selected for uploading' if file and allowed_file(file.filename): file.save( os.path.join('/var/www/html/images/', file.filename)) message = '' filename = file.filename else: message = 'Allowed file type is swi' # Obtain the relevant device information from the database result = classes.imagedbAction(formresult, filename, message) else: # Obtain the relevant device information from the database result = classes.imagedbAction(formresult, '', '') if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("deviceimages.html", result=result['result'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def sysconf(): authOK=classes.checkAuth("sysadminaccess","submenu") if authOK!=0: sysvars=classes.globalvars() formresult=request.form try: if formresult['action']=="Submit changes": classes.submitsysConf(formresult) sysvars=classes.globalvars() except: pass if authOK['hasaccess']==True: authOK['hasaccess']="true" timezoneregion=["Africa","America","Asia","Europe","Indian","Pacific","Antarctica"] return render_template("sysconf.html",authOK=authOK, sysvars=sysvars, timezoneregion=timezoneregion) else: return render_template("noaccess.html",authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def useradmin(): authOK=classes.checkAuth("sysuseraccess","submenu") if authOK!=0: sysvars=classes.globalvars() formresult=request.form # Obtain the relevant information from the database if "selectauthsource" in formresult: if formresult['selectauthsource']=="ldap": result=classes.userldapAction(formresult) else: result=classes.userdbAction(formresult) else: result=classes.userdbAction(formresult) if authOK['hasaccess']==True: authOK['hasaccess']="true" return render_template("useradmin.html",result=result['userresult'],roleresult=result['roleresult'],formresult=formresult,totalentries=int(result['totalentries']),pageoffset=int(result['pageoffset']),entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def syspsm(): authOK=classes.checkAuth("sysadminaccess","submenu") if authOK!=0: sysvars=classes.globalvars() formresult=request.form try: if formresult['action']=="Submit changes": classes.submitIntegration(formresult) except: pass if authOK['hasaccess']==True: authOK['hasaccess']="true" psmvars=classes.obtainVars('syspsm') if isinstance(psmvars, str): psmvars=json.loads(psmvars) sysvars=classes.globalvars() return render_template("syspsm.html",authOK=authOK, psmvars=psmvars, sysvars=sysvars) else: return render_template("noaccess.html",authOK=authOK) else: return render_template("login.html")
def dhcptracker(): authOK = classes.checkAuth("dhcptrackeraccess", "submenu") if authOK != 0: sysvars = classes.globalvars() formresult = request.form try: if formresult['action'] == "Delete": classes.deleteEntry("dhcptracker", formresult['id']) except: pass result = classes.dhcpdbAction() if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("dhcptracker.html", formresult=formresult, totalentries=result['totalentries'], dhcptypeInfo=result['dhcptypeInfo'], pageoffset=0, entryperpage=25, authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def upgradescheduler(): authOK = classes.checkAuth("upgradescheduleraccess", "submenu") message = "" filename = "" upgradeStatus = { 0: 'Not started', 1: 'Upgrade initiated', 5: 'Copy software onto the switch', 10: 'Software copied successfully', 20: 'Software copied successfully: switch is rebooted', 50: 'There is another software upgrade in progress', 100: 'Software upgrade completed successfully', 110: 'Software upgrade completed successfully: reboot is required' } if authOK != 0: sysvars = classes.globalvars() formresult = request.form result = classes.upgradescheduledbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("upgradescheduler.html", upgraderesult=result['upgraderesult'], upgradestatus=upgradeStatus, switchresult=result['switchresult'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def upgradeprofiles(): authOK = classes.checkAuth("upgradeprofilesaccess", "submenu") message = "" filename = "" if authOK != 0: sysvars = classes.globalvars() formresult = request.form result = classes.upgradeprofiledbAction(formresult) if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("upgradeprofiles.html", profileresult=result['profileresult'], formresult=formresult, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def deviceinfo(): sysvars = classes.globalvars() authOK = classes.checkAuth("switchaccess", "feature") if authOK != 0: # Definition for the main device monitoring page. If no switch has been selected, only the select form is rendered (deviceinfo.html). # Based on the information that is returned from the deviceInformation definition, a cx or switch page is rendered devInfo = {} interface = "" interfaces = {} isOnline = "" try: formresult = request.form except: formresult = [] if formresult: queryStr = "select ipaddress, username, password, ostype, sysinfo, interfaces from devices where id='{}'".format( formresult['deviceid']) devInfo = classes.sqlQuery(queryStr, "selectone") if devInfo is not None: interfaces = json.loads(devInfo['interfaces']) sysinfo = json.loads(devInfo['sysinfo']) ostype = devInfo['ostype'] else: ostype = "none" sysinfo = "none" interfaces = "none" if 'interface' in formresult: interface = formresult['interface'] isOnline = classes.checkifOnline(formresult['deviceid'], ostype) else: ostype = "none" queryStr = "select id, description, ipaddress, ostype, platform, osversion from devices where ostype='arubaos-cx' or ostype='arubaos-switch' or ostype is NULL" devicelist = classes.sqlQuery(queryStr, "select") if ostype == "arubaos-cx": return render_template("deviceinfocx.html", formresult=formresult, interfaces=interfaces, interface=interface, ostype=ostype, devicelist=devicelist, isOnline=isOnline, authOK=authOK, sysvars=sysvars) elif ostype == "arubaos-switch": return render_template("deviceinfoswitch.html", devicelist=devicelist, sysinfo=sysinfo, formresult=formresult, interfaces=interfaces, interface=interface, ostype=ostype, isOnline=isOnline, authOK=authOK, sysvars=sysvars) else: return render_template("deviceinfo.html", formresult=formresult, devInfo=devInfo, devicelist=devicelist, authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def ztpdevice(): authOK = classes.checkAuth("ztpdeviceaccess", "submenu") parameterValues = {} link1 = [] link2 = [] formresult = "" if authOK != 0: sysvars = classes.globalvars() if request.form: formresult = request.form.to_dict() # If there are template parameters in the formresult, we need to convert those and get them into a proper dictionary because Python does not really understand form array submission for key in request.form.keys(): for value in request.form.getlist(key): if "parameterValues" in key: parameterKey = (key[key.find('[') + len('['):key.rfind(']')]) parameterValues.update({parameterKey: value}) elif "link1" in key: link1.append(quote(value, safe='')) elif "link2" in key: link2.append(quote(value, safe='')) formresult.update({'link1': json.dumps(link1)}) formresult.update({'link2': json.dumps(link2)}) formresult.update({'parameterValues': json.dumps(parameterValues)}) result = classes.ztpdevicedbAction(formresult) # And collect all the different ztp status information queryStr = "select distinct ztpstatus from ztpdevices" ztpstatusInfo = classes.sqlQuery(queryStr, "select") queryStr = "select id, name, filename from deviceimages" imageResult = classes.sqlQuery(queryStr, "select") queryStr = "select id, name from ztptemplates" templateResult = classes.sqlQuery(queryStr, "select") # Also need to check whether the IPAM is reachable. If not, we have to disable some buttons on the forms if "ipamenabled" in sysvars: # IPAM is enabled. Check whether IPAM is online if sysvars['ipamsystem'] == "PHPIPAM": info = { 'phpipamauth': sysvars['phpipamauth'], 'ipamipaddress': sysvars['ipamipaddress'], 'phpipamappid': sysvars['phpipamappid'], 'ipamuser': sysvars['ipamuser'], 'ipampassword': sysvars['ipampassword'] } ipamstatus = classes.checkPhpipam(info) elif sysvars['ipamsystem'] == "Infoblox": info = { 'ipamipaddress': sysvars['ipamipaddress'], 'ipamuser': sysvars['ipamuser'], 'ipampassword': sysvars['ipampassword'] } ipamstatus = classes.checkInfoblox(info) else: ipamstatus = "Online" else: ipamstatus = "Online" if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("ztpdevice.html", result=result['result'], formresult=formresult, imageResult=imageResult, templateResult=templateResult, ipamstatus=ipamstatus, ztpstatusInfo=ztpstatusInfo, totalentries=int(result['totalentries']), pageoffset=int(result['pageoffset']), entryperpage=int(result['entryperpage']), authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")
def dsprofile(): authOK = classes.checkAuth("ubtprofileaccess", "submenu") if authOK != 0: sysvars = classes.globalvars() result = {} editProfile = {} devInfo = {} cpInfo = {} mcInfo = {} message = [] authMethod = [ "EAP PEAP", "EAP-TLS", "Allow All MAC", "Mac Auth", "PAP", "CHAP" ] authSource = [ "Active Directory", "Local User Database", "Guest User Repository" ] try: formresult = request.form members = formresult.getlist("members") macauthsource = formresult.getlist("macauthsource") macauthmethod = formresult.getlist("macauthmethod") dot1xsource = formresult.getlist("dot1xsource") dot1xmethod = formresult.getlist("dot1xmethod") # Perform the database action for the dynamic segmentation profile (add, edit, delete) result, message = classes.dsprofiledbAction( formresult, members, macauthsource, macauthmethod, dot1xsource, dot1xmethod) # Obtain ArubaOS-Switch information from the database queryStr = "select id, description, ipaddress from devices where ostype='arubaos-switch'" devInfo = classes.sqlQuery(queryStr, "select") # Obtain ClearPass information queryStr = "select id, description, ipaddress from devices where ostype='ClearPass'" cpInfo = classes.sqlQuery(queryStr, "select") queryStr = "select id, description, ipaddress from devices where ostype='Mobility Controller'" mcInfo = classes.sqlQuery(queryStr, "select") if formresult['action'] == "Edit": editProfile = classes.sqlQuery( "select * from dsprofiles where id='{}'".format( formresult['id']), "selectone") except: formresult = [] if authOK['hasaccess'] == True: authOK['hasaccess'] = "true" return render_template("dsprofile.html", result=result, formresult=formresult, cpInfo=cpInfo, mcInfo=mcInfo, devInfo=devInfo, editProfile=editProfile, authMethod=authMethod, authSource=authSource, message=message, authOK=authOK, sysvars=sysvars) else: return render_template("noaccess.html", authOK=authOK, sysvars=sysvars) else: return render_template("login.html")