def add(self, **kw): """ The Add Host page """ # Confirm user authentication self.check_session() if kw.has_key('submit'): try: self.add_host(**kw) except Exception, e: if error.parse_webservice_fault(e) == "ListXMLRPCFault": e.faultString = e.faultString.replace('[ListXMLRPCFault]', '') e.message = e.faultString.split(';') else: raise values = self.mod_host_attributes({ 'submitted_info' : kw }) values['message'] = error.get_nice_error(e)
def get_results_table(self, search, gid): '''Returns the table of search results''' rows = [] networks = '' if len(search): try: networks = self.webservice.get_networks({ 'network' : search, 'exact': False }) except Exception, e: err = error.parse_webservice_fault(e) if err == 'InvalidCIDRNetwork': return '<div class="message"><div>Invalid network specified. Please search using a full CIDR network descriptor.</div></div>' else: raise used_networks_temp = self.webservice.get_networks({ 'gid' : gid }) # Put all used network names into a list for comparison used_networks = [] for network in used_networks_temp: used_networks.append(network['network'])
def edit(self, macaddr=None, **kw): """ The Add Host page """ # Confirm user authentication self.check_session() if not macaddr: self.redirect('/hosts') # Initialization values = {} if kw.has_key('submit'): try: self.edit_host(**kw) except Exception, e: if error.parse_webservice_fault(e) == "ListXMLRPCFault": e.faultString = e.faultString.replace('[ListXMLRPCFault]', '') e.message = e.faultString.split(';') else: raise values['message'] = error.get_nice_error(e)
def get_results_table(self, search, gid): '''Returns the table of search results''' rows = [] networks = '' if len(search): try: networks = self.webservice.get_networks({ 'network': search, 'exact': False }) except Exception, e: err = error.parse_webservice_fault(e) if err == 'InvalidCIDRNetwork': return '<div class="message"><div>Invalid network specified. Please search using a full CIDR network descriptor.</div></div>' else: raise used_networks_temp = self.webservice.get_networks({'gid': gid}) # Put all used network names into a list for comparison used_networks = [] for network in used_networks_temp: used_networks.append(network['network'])
def get_hosts(self, page=0, ip=None, mac=None, endmac=None, hostname=None, descriptionsearch=None, namesearch=None, network=None, uid=None, username=None, gid=None, groupname=None, expiring=False, count=False, order_by='hostname'): """ @param page: the current page the user is viewing @param show_all_hosts: default false, will only show hosts that the current user has OWNER over """ # FIXME: get this stuff out of our session... cherrypy.session.acquire_lock() try: limit = cherrypy.session['hosts_limit'] # This would be better as an argument additional_perms = str(frontend.perms.OWNER) if cherrypy.session['show_all_hosts']: additional_perms = '00000000' show_expired = cherrypy.session['show_expired_hosts'] finally: cherrypy.session.release_lock() if hostname: hostname = hostname.replace('*','%').lower() if namesearch: namesearch = namesearch.replace('*','%').lower() if mac: if '*' in mac: if endmac: raise Exception("Cannot mix wildcards and ranges on MAC addresses") mac=mac.strip() if mac[-1] != '*': raise Exception("Wildcard must appear at the end of mac: %s" % mac) tmpmac = re.sub('[:.-]','',mac[:-1]) if not re.match(r"[0-9a-fA-F]{6,11}", tmpmac): raise Exception("Must give between 6 and 11 hex digits of valid MAC address for wildcarding: %s (%s)" % (mac,tmpmac)) padding = 12-len(tmpmac) mac = tmpmac + padding*'0' endmac = tmpmac + padding*'f' values = { 'additional_perms' : str(additional_perms), 'limit' : limit, 'page' : int(page), 'show_expired' : show_expired, 'ip' : ip, 'mac' : mac, 'endmac': endmac, 'count' : count, 'uid' : uid, 'username' : username, 'descriptionsearch': descriptionsearch, 'gid' : gid, 'groupname' : groupname, 'hostname' : hostname, 'namesearch' : namesearch, 'order_by' : order_by, 'network' : network, 'expiring' : expiring } num_hosts = -1 try: hosts = self.webservice.get_hosts( values ) if count: num_hosts = hosts[0] hosts=hosts[1] except Exception, e: if error.parse_webservice_fault(e) == "NotUser": hosts = [] else: raise
def login(self, username=None, password=None, expired=None, failed=None, logged_out=None, ne=None, email=None, referer=None, **kw): '''The login page''' self.check_session(logging_in=True) if self.logged_in(): # They're already logged in self.redirect("/hosts") #if referer is None and cherrypy.request.headers.has_key('Referer'): # referer = cherrypy.request.headers['Referer'] if not username and not password: content = ''' <div id="login"><h1><a href="/" title="Powered by openIPAM" onfocus="this.blur()">openIPAM</a></h1> <form name="login" action="/login" method="post">''' if referer is not None: content += """ <input type="hidden" name="referer" value="%s"/>""" % referer if failed is not None: content += ''' <p>Invalid credentials.</p>''' if expired is not None: content += ''' <p>For your security, your session has expired.</p>''' if ne is not None: content += ''' <p>Sorry, you have not yet been authorized to use this system.</p>''' if email is not None: content += ''' %s''' % frontend.email_required_html content += ''' <p> <p> <label>Username:<br /> <input type="text" name="username" id="username" class="text" value="" size="20" /></label> </p> <p> <label>Password:<br /> <input type="password" name="password" class="text" value="" size="20" /></label> </p> <p class="submit"> <input type="submit" value="Login »" /> </p> </form> </div> ''' # <ul> # <li><a href="?action=lostpassword">Lost your password?</a></li> # </ul> return splash.wrap(content) else: # Do Authentication # validate username and password cherrypy.session.acquire_lock() try: info = self.webservice.login(username, password) # set session variables cherrypy.session['uid'] = info['uid'] cherrypy.session['username'] = info['username'] cherrypy.session['name'] = info['name'] cherrypy.session['min_permissions'] = info['min_permissions'] cherrypy.session['has_global_owner'] = ((Perms(info['min_permissions']) & perms.OWNER) == perms.OWNER) cherrypy.session['show_expired_hosts'] = True cherrypy.session['show_all_hosts'] = True cherrypy.session['show_all_records'] = False cherrypy.session['show_a_records'] = False cherrypy.session['show_cnames'] = False cherrypy.session['show_ns'] = False cherrypy.session['hosts_limit'] = DEFAULT_HOSTS_LIMIT cherrypy.session['dns_records_limit'] = DEFAULT_DNS_RECORDS_LIMIT # redirect to main page if referer is not None and 'login' not in referer: self.redirect(referer) self.redirect('/') except Exception, e: error_string = error.parse_webservice_fault(e) if error_string == "InvalidCredentials": raise cherrypy.InternalRedirect('/login?failed=true') elif error_string == "NoEmail": raise cherrypy.InternalRedirect('/login?email=required') else: raise finally:
def login(self, username=None, password=None, expired=None, failed=None, logged_out=None, ne=None, email=None, referer=None, **kw): '''The login page''' self.check_session(logging_in=True) if self.logged_in(): # They're already logged in self.redirect("/hosts") #if referer is None and cherrypy.request.headers.has_key('Referer'): # referer = cherrypy.request.headers['Referer'] if not username and not password: content = ''' <div id="login"><h1><a href="/" title="Powered by openIPAM" onfocus="this.blur()">openIPAM</a></h1> <form name="login" action="/login" method="post">''' if referer is not None: content += """ <input type="hidden" name="referer" value="%s"/>""" % referer if failed is not None: content += ''' <p>Invalid credentials.</p>''' if expired is not None: content += ''' <p>For your security, your session has expired.</p>''' if ne is not None: content += ''' <p>Sorry, you have not yet been authorized to use this system.</p>''' if email is not None: content += ''' %s''' % frontend.email_required_html content += ''' <p> <p> <label>Username:<br /> <input type="text" name="username" id="username" class="text" value="" size="20" /></label> </p> <p> <label>Password:<br /> <input type="password" name="password" class="text" value="" size="20" /></label> </p> <p class="submit"> <input type="submit" value="Login »" /> </p> </form> </div> ''' # <ul> # <li><a href="?action=lostpassword">Lost your password?</a></li> # </ul> return splash.wrap(content) else: # Do Authentication # validate username and password cherrypy.session.acquire_lock() try: info = self.webservice.login(username, password) # set session variables cherrypy.session['uid'] = info['uid'] cherrypy.session['username'] = info['username'] cherrypy.session['name'] = info['name'] cherrypy.session['min_permissions'] = info['min_permissions'] cherrypy.session['has_global_owner'] = ((Perms( info['min_permissions']) & perms.OWNER) == perms.OWNER) cherrypy.session['show_expired_hosts'] = True cherrypy.session['show_all_hosts'] = True cherrypy.session['show_all_records'] = False cherrypy.session['show_a_records'] = False cherrypy.session['show_cnames'] = False cherrypy.session['show_ns'] = False cherrypy.session['hosts_limit'] = DEFAULT_HOSTS_LIMIT cherrypy.session[ 'dns_records_limit'] = DEFAULT_DNS_RECORDS_LIMIT # redirect to main page if referer is not None and 'login' not in referer: self.redirect(referer) self.redirect('/') except Exception, e: error_string = error.parse_webservice_fault(e) if error_string == "InvalidCredentials": raise cherrypy.InternalRedirect('/login?failed=true') elif error_string == "NoEmail": raise cherrypy.InternalRedirect('/login?email=required') else: raise finally: