예제 #1
0
	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)
예제 #2
0
	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'])
예제 #3
0
	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)
예제 #4
0
    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'])
예제 #5
0
	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
예제 #6
0
	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 &raquo;" />
						</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:
예제 #7
0
    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 &raquo;" />
						</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: