示例#1
0
文件: backend.py 项目: ardnet/genesis
	def add_reverse_proxy(self, name, path, addr, port, block):
		w = Webapp()
		w.name = name
		w.stype = 'ReverseProxy'
		w.path = path
		w.addr = addr
		w.port = port
		w.dbengine = None
		w.dbname = None
		w.dbuser = None
		if not block:
			block = [
				nginx.Location('/admin/media/',
					nginx.Key('root', '/usr/lib/python2.7/site-packages/django/contrib')
				),
				nginx.Location('/',
					nginx.Key('proxy_set_header', 'X-Forwarded-For $proxy_add_x_forwarded_for'),
					nginx.Key('proxy_set_header', 'Host $http_host'),
					nginx.Key('proxy_redirect', 'off'),
					nginx.If('(!-f $request_filename)',
						nginx.Key('proxy_pass', 'unix:%s'%os.path.join(path, 'gunicorn.sock')),
						nginx.Key('break', '')
					)
				)
			]
		self.nginx_add(w, block)
		self.nginx_enable(w)
示例#2
0
文件: main.py 项目: Bugsbane/genesis
 def on_submit(self, event, params, vars = None):
     if params[0] == 'dlgAdd':
         if vars.getvalue('action', '') == 'OK':
             self._setup = self._current
         self._add = None
     if params[0] == 'dlgEdit':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('cfgname', '')
             addr = vars.getvalue('cfgaddr', '')
             port = vars.getvalue('cfgport', '')
             vaddr = True
             for site in self.sites:
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if name == '':
                 self.put_message('err', 'Must choose a name')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message('err', 'Can\'t use the same port number as Genesis')
             elif not vaddr:
                 self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
             elif self._edit.ssl and port == '80':
                 self.put_message('err', 'Cannot set an HTTPS site to port 80')
             elif not self._edit.ssl and port == '443':
                 self.put_message('err', 'Cannot set an HTTP-only site to port 443')
             else:
                 w = Webapp()
                 w.name = name
                 w.stype = self._edit.stype
                 w.path = self._edit.path
                 w.addr = addr
                 w.port = port
                 w.ssl = self._edit.ssl
                 w.php = self._edit.php
                 self.mgr.nginx_edit(self._edit, w)
                 self.ncops.change_webapp(self._edit, w)
                 self.put_message('success', 'Site edited successfully')
         self._edit = None
     if params[0] == 'dlgSetup':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('name', '').lower()
             addr = vars.getvalue('addr', '')
             port = vars.getvalue('port', '80')
             vname, vaddr = True, True
             for site in self.sites:
                 if name == site.name:
                     vname = False
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if not name or not self._setup:
                 self.put_message('err', 'Name or type not selected')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message('err', 'Can\'t use the same port number as Genesis')
             elif not vaddr:
                 self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
             elif not vname:
                 self.put_message('err', 'A site with this name already exists')
             elif (not hasattr(self._setup, 'dbengines') or not self._setup.dbengines) \
             or (vars.has_key('dbtype') and vars.getvalue('dbtype', '') in ['', 'None']):
                 self.addsite(self._setup, vars, {}, True)
                 self._setup = None
             elif hasattr(self._setup, 'dbengines') and self._setup.dbengines:
                 if vars.getvalue('dbtype', ''):
                     self._setup.selected_dbengine = vars.getvalue('dbtype', '')
                 elif not hasattr(self._setup, 'selected_dbengine'):
                     self._setup.selected_dbengine = self._setup.dbengines[0]
                 dbengine = self._setup.selected_dbengine
                 on = False
                 for dbtype in self.dbops.get_dbtypes():
                     if dbengine == dbtype[0] and dbtype[2] == True:
                         on = True
                     elif dbengine == dbtype[0] and dbtype[2] == None:
                         on = True
                 if on:
                     if self.dbops.get_info(dbengine).requires_conn and \
                     not self.dbops.get_dbconn(dbengine):
                         self._dbauth = ('add', dbengine, self._setup, vars)
                         self._setup = None
                     else:
                         if vars.getvalue('dbname') and vars.getvalue('dbpass'):
                             try:
                                 self.dbops.get_interface('MariaDB').validate(
                                     vars.getvalue('dbname'), vars.getvalue('dbname'), 
                                     vars.getvalue('dbpass'), self.dbops.get_dbconn(dbengine))
                             except Exception, e:
                                 self.put_message('err', str(e))
                                 return
                         elif vars.getvalue('dbname'):
                             self.put_message('err', 'You must enter a database password if you specify a database name!')
                             return
                         elif vars.getvalue('dbpass'):
                             self.put_message('err', 'You must enter a database name if you specify a database password!')
                             return
                         self.addsite(self._setup, vars, 
                             {'engine': dbengine, 'name': vars.getvalue('dbname', vars.getvalue('name')), 
                             'user': vars.getvalue('dbname', vars.getvalue('name')), 
                             'passwd': vars.getvalue('dbpass', '')}, True)
                         self._setup = None
                 else:
                     self.put_message('err', 'The database engine for %s is not running. Please start it via the Status button.' % dbengine)
                     self._setup = None
示例#3
0
		addtoblock = vars.getvalue('addtoblock', '')

		if addtoblock:
			addtoblock = nginx.loads(addtoblock, False)
		else:
			addtoblock = []
		if wa.wa_plugin == 'Website' and php == '1' and addtoblock:
			addtoblock.extend(x for x in webapp.phpblock)
		elif wa.wa_plugin == 'Website' and php == '1':
			addtoblock = webapp.phpblock

		# Setup the webapp and create an nginx serverblock
		try:
			w = Webapp()
			w.name = name
			w.stype = wa.wa_plugin
			w.path = target_path
			w.addr = vars.getvalue('addr', 'localhost')
			w.port = vars.getvalue('port', '80')
			w.php = True if wa.php is True or php is '1' else False
			self.nginx_add(site=w, 
				add=addtoblock if addtoblock else webapp.addtoblock, 
				)
		except Exception, e:
			raise PartialError('nginx serverblock couldn\'t be written - '+str(e))

		try:
			cat.put_statusmsg('Running post-install configuration...')
			specialmsg = webapp.post_install(name, target_path, vars)
		except Exception, e:
			shutil.rmtree(target_path, True)
示例#4
0
文件: main.py 项目: heinzK1X/genesis
 def on_submit(self, event, params, vars = None):
     if params[0] == 'dlgSettings':
         if vars.getvalue('action', '') == 'OK':
             size = vars.getvalue('uplsize', '10')
             snhash = vars.getvalue('snhash', '32')
             f = open('/etc/nginx/nginx.conf', 'r')
             data = f.readlines()
             f.close()
             if 'client_max_body_size' in ''.join(data):
                 for x in enumerate(data):
                     if "client_max_body_size" in x[1]:
                         data[x[0]] = "\tclient_max_body_size %sM;\n" % size
             else:
                 for x in enumerate(data):
                     if 'http {' in x[1]:
                         data.insert(x[0]+1, '\tclient_max_body_size %sM;\n' % size)
             if 'server_names_hash_bucket_size' in ''.join(data):
                 for x in enumerate(data):
                     if "server_names_hash_bucket_size" in x[1]:
                         data[x[0]] = "\tserver_names_hash_bucket_size %s;\n" % snhash
             else:
                 for x in enumerate(data):
                     if 'http {' in x[1]:
                         data.insert(x[0]+1, '\tserver_names_hash_bucket_size %s;\n' % snhash)
             phpctl = apis.langassist(self.app).get_interface('PHP')
             if phpctl:
                 phpctl.upload_size(size)
             open('/etc/nginx/nginx.conf', 'w').writelines(data)
             self.mgr.nginx_reload()
             self.put_message("success", "Settings saved successfully")
         self._settings = None
     if params[0] == 'dlgAdd':
         if vars.getvalue('action', '') == 'OK':
             self._setup = self._current
         self._add = None
     if params[0] == 'dlgEdit':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('cfgname', '')
             addr = vars.getvalue('cfgaddr', '')
             port = vars.getvalue('cfgport', '')
             vaddr = True
             for site in self.sites:
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if name == '':
                 self.put_message('err', 'Must choose a name')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message('err', 'Can\'t use the same port number as Genesis')
             elif not vaddr and (self._edit.addr != addr or self._edit.port != port):
                 self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
             elif self._edit.ssl and port == '80':
                 self.put_message('err', 'Cannot set an HTTPS site to port 80')
             elif not self._edit.ssl and port == '443':
                 self.put_message('err', 'Cannot set an HTTP-only site to port 443')
             else:
                 w = Webapp()
                 w.name = name
                 w.stype = self._edit.stype
                 w.path = self._edit.path
                 w.addr = addr
                 w.port = port
                 w.ssl = self._edit.ssl
                 w.php = self._edit.php
                 try:
                     self.mgr.nginx_edit(self._edit, w)
                 except ReloadError, e:
                     self.put_message("warn", str(e))
                 else:
                     self.ncops.change_webapp(self._edit, w)
                     self.put_message('success', 'Site edited successfully')
示例#5
0
文件: main.py 项目: tewe/genesis
 def on_submit(self, event, params, vars=None):
     if params[0] == 'dlgAdd':
         if vars.getvalue('action', '') == 'OK':
             if hasattr(self._current,
                        'dbengine') and self._current.dbengine:
                 on = False
                 for dbtype in self.dbops.get_dbtypes():
                     if self._current.dbengine == dbtype[0] and dbtype[
                             2] == True:
                         on = True
                     elif self._current.dbengine == dbtype[0] and dbtype[
                             2] == None:
                         on = True
                 if on:
                     if self.dbops.get_info(self._current.dbengine).requires_conn and \
                     not self.dbops.get_dbconn(self._current.dbengine):
                         self._dbauth = (self._current.dbengine, '', 'add')
                     else:
                         self._setup = self._current
                 else:
                     self.put_message(
                         'err',
                         'The database engine for %s is not running. Please start it via the Status button.'
                         % self._current.dbengine)
             else:
                 self._setup = self._current
         self._add = None
     if params[0] == 'dlgEdit':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('cfgname', '')
             addr = vars.getvalue('cfgaddr', '')
             port = vars.getvalue('cfgport', '')
             vaddr = True
             for site in self.sites:
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if name == '':
                 self.put_message('err', 'Must choose a name')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message(
                     'err',
                     'Site name must not contain spaces, dots, dashes or special characters'
                 )
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message(
                     'err', 'Can\'t use the same port number as Genesis')
             elif not vaddr:
                 self.put_message(
                     'err',
                     'Site must have either a different domain/subdomain or a different port'
                 )
             else:
                 w = Webapp()
                 w.name = name
                 w.stype = self._edit.stype
                 w.path = self._edit.path
                 w.addr = addr
                 w.port = port
                 w.ssl = self._edit.ssl
                 w.php = self._edit.php
                 self.mgr.nginx_edit(self._edit, w)
                 apis.networkcontrol(self.app).change_webapp(self._edit, w)
         self._edit = None
     if params[0] == 'dlgSetup':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('name', '').lower()
             addr = vars.getvalue('addr', '')
             port = vars.getvalue('port', '80')
             vname, vaddr = True, True
             for site in self.sites:
                 if name == site.name:
                     vname = False
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if not name or not self._setup:
                 self.put_message('err', 'Name or type not selected')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message(
                     'err',
                     'Site name must not contain spaces, dots, dashes or special characters'
                 )
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message(
                     'err', 'Can\'t use the same port number as Genesis')
             elif not vaddr:
                 self.put_message(
                     'err',
                     'Site must have either a different domain/subdomain or a different port'
                 )
             elif not vname:
                 self.put_message('err',
                                  'A site with this name already exists')
             else:
                 w = WAWorker(self, 'add', name, self._current, vars)
                 w.start()
         self._setup = None
     if params[0].startswith('dlgAuth'):
         dbtype = params[0].split('dlgAuth')[1]
         if vars.getvalue('action', '') == 'OK':
             login = vars.getvalue('value', '')
             try:
                 dbauth = self._dbauth
                 self._dbauth = ('', '', '')
                 self.dbops.get_interface(dbtype).connect(
                     store=self.app.session['dbconns'], passwd=login)
                 if dbauth[2] == 'drop':
                     w = WAWorker(self, 'drop', dbauth[1])
                     w.start()
                 elif dbauth[2] == 'add':
                     self._setup = self._current
             except DBAuthFail, e:
                 self.put_message('err', str(e))
         else:
             self.put_message('info',
                              'Website %s cancelled' % self._dbauth[2])
             self._dbauth = ('', '', '')
示例#6
0
文件: main.py 项目: ardnet/genesis
 def on_submit(self, event, params, vars = None):
     if params[0] == 'dlgSettings':
         if vars.getvalue('action', '') == 'OK':
             size = vars.getvalue('uplsize', '10')
             f = open('/etc/nginx/nginx.conf', 'r')
             data = f.readlines()
             f.close()
             if 'client_max_body_size' in ''.join(data):
                 for x in enumerate(data):
                     if "client_max_body_size" in x[1]:
                         data[x[0]] = "\tclient_max_body_size %sM;\n" % size
             else:
                 for x in enumerate(data):
                     if 'http {' in x[1]:
                         data.insert(x[0]+1, '\tclient_max_body_size %sM;\n' % size)
             phpctl = apis.langassist(self.app).get_interface('PHP')
             if phpctl:
                 phpctl.upload_size(size)
             open('/etc/nginx/nginx.conf', 'w').writelines(data)
             self.mgr.nginx_reload()
             self.put_message("success", "Settings saved successfully")
         self._settings = None
     if params[0] == 'dlgAdd':
         if vars.getvalue('action', '') == 'OK':
             self._setup = self._current
         self._add = None
     if params[0] == 'dlgEdit':
         if vars.getvalue('action', '') == 'OK':
             name = vars.getvalue('cfgname', '')
             addr = vars.getvalue('cfgaddr', '')
             port = vars.getvalue('cfgport', '')
             vaddr = True
             for site in self.sites:
                 if addr == site.addr and port == site.port:
                     vaddr = False
             if name == '':
                 self.put_message('err', 'Must choose a name')
             elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
                 self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
             elif addr == '':
                 self.put_message('err', 'Must choose an address')
             elif port == '':
                 self.put_message('err', 'Must choose a port (default 80)')
             elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                 self.put_message('err', 'Can\'t use the same port number as Genesis')
             elif not vaddr:
                 self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
             elif self._edit.ssl and port == '80':
                 self.put_message('err', 'Cannot set an HTTPS site to port 80')
             elif not self._edit.ssl and port == '443':
                 self.put_message('err', 'Cannot set an HTTP-only site to port 443')
             else:
                 w = Webapp()
                 w.name = name
                 w.stype = self._edit.stype
                 w.path = self._edit.path
                 w.addr = addr
                 w.port = port
                 w.ssl = self._edit.ssl
                 w.php = self._edit.php
                 try:
                     self.mgr.nginx_edit(self._edit, w)
                 except ReloadError, e:
                     self.put_message("warn", str(e))
                 else:
                     self.ncops.change_webapp(self._edit, w)
                     self.put_message('success', 'Site edited successfully')
示例#7
0
文件: backend.py 项目: ardnet/genesis
		addtoblock = vars.getvalue('addtoblock', '')

		if addtoblock:
			addtoblock = nginx.loads(addtoblock, False)
		else:
			addtoblock = []
		if wa.wa_plugin == 'Website' and php == '1' and addtoblock:
			addtoblock.extend(x for x in webapp.phpblock)
		elif wa.wa_plugin == 'Website' and php == '1':
			addtoblock = webapp.phpblock

		# Setup the webapp and create an nginx serverblock
		try:
			w = Webapp()
			w.name = name
			w.stype = wa.wa_plugin
			w.path = target_path
			w.addr = vars.getvalue('addr', 'localhost')
			w.port = vars.getvalue('port', '80')
			w.php = True if wa.php is True or php is '1' else False
			w.version = wa.version.rsplit('-', 1)[0] if wa.website_updates else None
			w.dbengine = dbinfo['engine'] if dbinfo else None
			w.dbname = dbinfo['name'] if dbinfo else None
			w.dbuser = dbinfo['user'] if dbinfo else None
			self.nginx_add(site=w, 
				add=addtoblock if addtoblock else webapp.addtoblock, 
				)
		except Exception, e:
			raise PartialError('nginx serverblock couldn\'t be written - '+str(e))

		try:
示例#8
0
文件: main.py 项目: tewe/genesis
	def on_submit(self, event, params, vars = None):
		if params[0] == 'dlgAdd':
			if vars.getvalue('action', '') == 'OK':
				if hasattr(self._current, 'dbengine') and self._current.dbengine:
					on = False
					for dbtype in self.dbops.get_dbtypes():
						if self._current.dbengine == dbtype[0] and dbtype[2] == True:
							on = True
						elif self._current.dbengine == dbtype[0] and dbtype[2] == None:
							on = True
					if on:
						if self.dbops.get_info(self._current.dbengine).requires_conn and \
						not self.dbops.get_dbconn(self._current.dbengine):
							self._dbauth = (self._current.dbengine, '', 'add')
						else:
							self._setup = self._current
					else:
						self.put_message('err', 'The database engine for %s is not running. Please start it via the Status button.' % self._current.dbengine)
				else:
					self._setup = self._current
			self._add = None
		if params[0] == 'dlgEdit':
			if vars.getvalue('action', '') == 'OK':
				name = vars.getvalue('cfgname', '')
				addr = vars.getvalue('cfgaddr', '')
				port = vars.getvalue('cfgport', '')
				vaddr = True
				for site in self.sites:
					if addr == site.addr and port == site.port:
						vaddr = False
				if name == '':
					self.put_message('err', 'Must choose a name')
				elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
					self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
				elif addr == '':
					self.put_message('err', 'Must choose an address')
				elif port == '':
					self.put_message('err', 'Must choose a port (default 80)')
				elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
					self.put_message('err', 'Can\'t use the same port number as Genesis')
				elif not vaddr:
					self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
				else:
					w = Webapp()
					w.name = name
					w.stype = self._edit.stype
					w.path = self._edit.path
					w.addr = addr
					w.port = port
					w.ssl = self._edit.ssl
					w.php = self._edit.php
					self.mgr.nginx_edit(self._edit, w)
					apis.networkcontrol(self.app).change_webapp(self._edit, w)
			self._edit = None
		if params[0] == 'dlgSetup':
			if vars.getvalue('action', '') == 'OK':
				name = vars.getvalue('name', '').lower()
				addr = vars.getvalue('addr', '')
				port = vars.getvalue('port', '80')
				vname, vaddr = True, True
				for site in self.sites:
					if name == site.name:
						vname = False
					if addr == site.addr and port == site.port:
						vaddr = False
				if not name or not self._setup:
					self.put_message('err', 'Name or type not selected')
				elif re.search('\.|-|`|\\\\|\/|^test$|[ ]', name):
					self.put_message('err', 'Site name must not contain spaces, dots, dashes or special characters')
				elif addr == '':
					self.put_message('err', 'Must choose an address')
				elif port == '':
					self.put_message('err', 'Must choose a port (default 80)')
				elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
					self.put_message('err', 'Can\'t use the same port number as Genesis')
				elif not vaddr:
					self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
				elif not vname:
					self.put_message('err', 'A site with this name already exists')
				else:
					w = WAWorker(self, 'add', name, self._current, vars)
					w.start()
			self._setup = None
		if params[0].startswith('dlgAuth'):
			dbtype = params[0].split('dlgAuth')[1]
			if vars.getvalue('action', '') == 'OK':
				login = vars.getvalue('value', '')
				try:
					dbauth = self._dbauth
					self._dbauth = ('','','')
					self.dbops.get_interface(dbtype).connect(
						store=self.app.session['dbconns'],
						passwd=login)
					if dbauth[2] == 'drop':
						w = WAWorker(self, 'drop', dbauth[1])
						w.start()
					elif dbauth[2] == 'add':
						self._setup = self._current
				except DBAuthFail, e:
					self.put_message('err', str(e))
			else:
				self.put_message('info', 'Website %s cancelled' % self._dbauth[2])
				self._dbauth = ('','','')
示例#9
0
		php = vars.getvalue('php', '')
		addtoblock = vars.getvalue('addtoblock', '')

		if addtoblock:
			addtoblock = nginx.loads(addtoblock, False)
		else:
			addtoblock = []
		if webapp.name == 'Website' and php == '1' and addtoblock:
			addtoblock.extend(x for x in webapp.phpblock)

		# Setup the webapp and create an nginx serverblock
		try:
			w = Webapp()
			w.name = name
			w.stype = webapp.name
			w.path = target_path
			w.addr = vars.getvalue('addr', 'localhost')
			w.port = vars.getvalue('port', '80')
			w.php = True if webapp.php is True or php is '1' else False
			self.nginx_add(site=w, 
				add=addtoblock if addtoblock else webapp.addtoblock, 
				)
		except Exception, e:
			raise PartialError('nginx serverblock couldn\'t be written - '+str(e))

		try:
			cat.put_statusmsg('Running post-install configuration...')
			specialmsg = webapp.post_install(name, target_path, vars)
		except Exception, e:
			shutil.rmtree(target_path, True)