Ejemplo n.º 1
0
 def setup(self, addr, port):
     # Make sure Radicale is installed and ready
     pyctl = apis.langassist(self.app).get_interface('Python')
     users = UsersBackend(self.app)
     if not pyctl.is_installed('Radicale'):
         pyctl.install('radicale')
     # due to packaging bugs, make extra sure perms are readable
     st = os.stat('/usr/lib/python2.7/site-packages/radicale')
     for r, d, f in os.walk('/usr/lib/python2.7/site-packages/radicale'):
         for x in d:
             os.chmod(os.path.join(r, x),
                      st.st_mode & stat.S_IROTH & stat.S_IRGRP)
         for x in f:
             os.chmod(os.path.join(r, x),
                      st.st_mode & stat.S_IROTH & stat.S_IRGRP)
     if not os.path.exists('/etc/radicale/config'):
         if not os.path.isdir('/etc/radicale'):
             os.mkdir('/etc/radicale')
         open('/etc/radicale/config', 'w').write(self.default_config)
     if not os.path.isdir('/usr/lib/radicale'):
         os.mkdir('/usr/lib/radicale')
     # Add the site process
     users.add_user('radicale')
     users.add_group('radicale')
     users.add_to_group('radicale', 'radicale')
     wsgi_file = 'import radicale\n'
     wsgi_file += 'radicale.log.start()\n'
     wsgi_file += 'application = radicale.Application()\n'
     open('/etc/radicale/radicale.wsgi', 'w').write(wsgi_file)
     os.chmod('/etc/radicale/radicale.wsgi', 0766)
     s = apis.orders(self.app).get_interface('supervisor')
     if s:
         s[0].order('new', 'radicale', 'program', [
             ('directory', '/etc/radicale'), ('user', 'radicale'),
             ('command',
              'uwsgi -s /tmp/radicale.sock -C --plugin python2 --wsgi-file radicale.wsgi'
              ), ('stdout_logfile', '/var/log/radicale.log'),
             ('stderr_logfile', '/var/log/radicale.log')
         ])
     block = [
         nginx.Location(
             '/',
             nginx.Key('auth_basic',
                       '"Genesis Calendar Server (Radicale)"'),
             nginx.Key('auth_basic_user_file', '/etc/radicale/users'),
             nginx.Key('include', 'uwsgi_params'),
             nginx.Key('uwsgi_pass', 'unix:///tmp/radicale.sock'),
         )
     ]
     if not os.path.exists('/etc/radicale/users'):
         open('/etc/radicale/users', 'w').write('')
         os.chmod('/etc/radicale/users', 0766)
     WebappControl(self.app).add_reverse_proxy('radicale',
                                               '/usr/lib/radicale', addr,
                                               port, block)
     apis.networkcontrol(self.app).add_webapp(
         ('radicale', 'ReverseProxy', port))
     c = self.app.get_config(RadicaleConfig(self.app))
     c.first_run_complete = True
     c.save()
Ejemplo n.º 2
0
 def on_init(self):
     if self._relsec != None:
         if self._relsec[0] == 'add':
             apis.networkcontrol(self.app).add_webapp(self._relsec[1])
             self._relsec = None
         elif self._relsec[0] == 'del':
             apis.networkcontrol(self.app).remove_webapp(self._relsec[1])
         self._relsec = None
     self.services = []
     self.apiops = apis.webapps(self.app)
     self.mgr = WebappControl(self.app)
     self.sites = sorted(self.apiops.get_sites(), key=lambda st: st['name'])
     ats = sorted(self.apiops.get_apptypes(), key=lambda x: x.name.lower())
     self.apptypes = sorted(ats, key=lambda x: (hasattr(x, 'sort')))
     if len(self.sites) != 0:
         self.services.append(('Web Server', 'nginx'))
     if not self._current:
         self._current = self.apptypes[0]
     for apptype in self.apptypes:
         ok = False
         for site in self.sites:
             if site['type'] == apptype.name:
                 ok = True
         if ok == False:
             continue
         if hasattr(apptype, 'services'):
             for dep in apptype.services:
                 post = True
                 for svc in self.services:
                     if svc[1] == dep[1]:
                         post = False
                 if post == True:
                     self.services.append((dep[0], dep[1]))
Ejemplo n.º 3
0
Archivo: main.py Proyecto: ajvb/genesis
	def on_init(self):
		if self._relsec != None:
			if self._relsec[0] == 'add':
				apis.networkcontrol(self.app).add_webapp(self._relsec[1])
				self._relsec = None
			elif self._relsec[0] == 'del':
				apis.networkcontrol(self.app).remove_webapp(self._relsec[1])
			self._relsec = None
		self.services = []
		self.apiops = apis.webapps(self.app)
		self.mgr = WebappControl(self.app)
		self.sites = sorted(self.apiops.get_sites(), 
			key=lambda st: st['name'])
		ats = sorted(self.apiops.get_apptypes(), key=lambda x: x.name.lower())
		self.apptypes = sorted(ats, key=lambda x: (hasattr(x, 'sort')))
		if len(self.sites) != 0:
			self.services.append(('Web Server', 'nginx'))
		if not self._current:
			self._current = self.apptypes[0]
		for apptype in self.apptypes:
			ok = False
			for site in self.sites:
				if site['type'] == apptype.name:
					ok = True
			if ok == False:
				continue
			if hasattr(apptype, 'services'):
				for dep in apptype.services:
					post = True
					for svc in self.services:
						if svc[1] == dep[1]:
							post = False
					if post == True:
						self.services.append((dep[0], dep[1]))
Ejemplo n.º 4
0
 def setup(self, addr, port):
     # Make sure Radicale is installed and ready
     pyctl = apis.langassist(self.app).get_interface('Python')
     users = UsersBackend(self.app)
     if not pyctl.is_installed('Radicale'):
         pyctl.install('radicale')
     # due to packaging bugs, make extra sure perms are readable
     st = os.stat('/usr/lib/python2.7/site-packages/radicale')
     for r, d, f in os.walk('/usr/lib/python2.7/site-packages/radicale'):
         for x in d:
             os.chmod(os.path.join(r, x), st.st_mode | stat.S_IROTH | stat.S_IRGRP)
         for x in f:
             os.chmod(os.path.join(r, x), st.st_mode | stat.S_IROTH | stat.S_IRGRP)
     if not os.path.exists('/etc/radicale/config'):
         if not os.path.isdir('/etc/radicale'):
             os.mkdir('/etc/radicale')
         open('/etc/radicale/config', 'w').write(self.default_config)
     if not os.path.isdir('/usr/lib/radicale'):
         os.mkdir('/usr/lib/radicale')
     # Add the site process
     users.add_user('radicale')
     users.add_group('radicale')
     users.add_to_group('radicale', 'radicale')
     wsgi_file = 'import radicale\n'
     wsgi_file += 'radicale.log.start()\n'
     wsgi_file += 'application = radicale.Application()\n'
     open('/etc/radicale/radicale.wsgi', 'w').write(wsgi_file)
     os.chmod('/etc/radicale/radicale.wsgi', 0766)
     s = self.app.get_backend(apis.services.IServiceManager)
     s.edit('radicale',
         {
             'stype': 'program',
             'directory': '/etc/radicale',
             'user': '******',
             'command': 'uwsgi -s /tmp/radicale.sock -C --plugin python2 --wsgi-file radicale.wsgi',
             'stdout_logfile': '/var/log/radicale.log',
             'stderr_logfile': '/var/log/radicale.log'
         }
     )
     s.enable('radicale', 'supervisor')
     block = [
         nginx.Location('/',
             nginx.Key('auth_basic', '"Genesis Calendar Server (Radicale)"'),
             nginx.Key('auth_basic_user_file', '/etc/radicale/users'),
             nginx.Key('include', 'uwsgi_params'),
             nginx.Key('uwsgi_pass', 'unix:///tmp/radicale.sock'),
         )
     ]
     if not os.path.exists('/etc/radicale/users'):
         open('/etc/radicale/users', 'w').write('')
         os.chmod('/etc/radicale/users', 0766)
     WebappControl(self.app).add_reverse_proxy('radicale', 
         '/usr/lib/radicale', addr, port, block)
     apis.networkcontrol(self.app).add_webapp(('radicale', 'ReverseProxy', port))
     c = self.app.get_config(RadicaleConfig(self.app))
     c.first_run_complete = True
     c.save()
Ejemplo n.º 5
0
    def on_session_start(self):
        apis.networkcontrol(self.app).session_start()
        self._adding_widget = None
        self._failed = []

        # start widget manager and show SSL warning if applicable
        self._mgr = apis.dashboard.WidgetManager(self.app)
        if self.app.gconfig.get('genesis', 'ssl') == '0':
            self.put_message('warn', 'Please enable SSL to ensure secure communication with the server')
Ejemplo n.º 6
0
    def on_session_start(self):
        apis.networkcontrol(self.app).session_start()
        self._adding_widget = None
        self._failed = []

        # start widget manager and show SSL warning if applicable
        self._mgr = apis.dashboard.WidgetManager(self.app)
        if self.app.gconfig.get('genesis', 'ssl') == '0':
            self.put_message(
                'warn',
                'Please enable SSL to ensure secure communication with the server'
            )
Ejemplo n.º 7
0
Archivo: main.py Proyecto: tewe/genesis
 def on_init(self):
     if self._relsec != None:
         if self._relsec[0] == 'add':
             apis.networkcontrol(self.app).add_webapp(self._relsec[1])
             self._relsec = None
         elif self._relsec[0] == 'del':
             apis.networkcontrol(self.app).remove_webapp(self._relsec[1])
         self._relsec = None
     self.services = []
     self.apiops = apis.webapps(self.app)
     self.dbops = apis.databases(self.app)
     self.mgr = WebappControl(self.app)
     self.sites = sorted(self.apiops.get_sites(), key=lambda st: st.name)
     ats = sorted([x.plugin_info for x in self.apiops.get_apptypes()],
                  key=lambda x: x.name.lower())
     self.apptypes = sorted(ats, key=lambda x: (hasattr(x, 'sort')))
     if len(self.sites) != 0:
         self.services.append({
             "name": 'Web Server',
             "binary": 'nginx',
             "ports": []
         })
         for x in self.sites:
             if x.php:
                 self.services.append({
                     "name": 'PHP FastCGI',
                     "binary": 'php-fpm',
                     "ports": []
                 })
                 break
     if not self._current:
         self._current = self.apptypes[0] if len(self.apptypes) else None
     for apptype in self.apptypes:
         ok = False
         for site in self.sites:
             if site.stype == apptype.wa_plugin:
                 ok = True
         if ok == False:
             continue
         if hasattr(apptype, 'services'):
             for dep in apptype.services:
                 post = True
                 for svc in self.services:
                     if svc['binary'] == dep['binary']:
                         post = False
                 if post == True:
                     self.services.append({
                         "name": dep['name'],
                         "binary": dep['binary'],
                         "ports": []
                     })
Ejemplo n.º 8
0
Archivo: main.py Proyecto: tewe/genesis
	def on_init(self):
		if self._relsec != None:
			if self._relsec[0] == 'add':
				apis.networkcontrol(self.app).add_webapp(self._relsec[1])
				self._relsec = None
			elif self._relsec[0] == 'del':
				apis.networkcontrol(self.app).remove_webapp(self._relsec[1])
			self._relsec = None
		self.services = []
		self.apiops = apis.webapps(self.app)
		self.dbops = apis.databases(self.app)
		self.mgr = WebappControl(self.app)
		self.sites = sorted(self.apiops.get_sites(), 
			key=lambda st: st.name)
		ats = sorted([x.plugin_info for x in self.apiops.get_apptypes()], key=lambda x: x.name.lower())
		self.apptypes = sorted(ats, key=lambda x: (hasattr(x, 'sort')))
		if len(self.sites) != 0:
			self.services.append(
				{
					"name": 'Web Server',
					"binary": 'nginx',
					"ports": []
				}
			)
			for x in self.sites:
				if x.php:
					self.services.append(
						{
							"name": 'PHP FastCGI',
							"binary": 'php-fpm',
							"ports": []
						}
					)
					break
		if not self._current:
			self._current = self.apptypes[0] if len(self.apptypes) else None
		for apptype in self.apptypes:
			ok = False
			for site in self.sites:
				if site.stype == apptype.wa_plugin:
					ok = True
			if ok == False:
				continue
			if hasattr(apptype, 'services'):
				for dep in apptype.services:
					post = True
					for svc in self.services:
						if svc['binary'] == dep['binary']:
							post = False
					if post == True:
						self.services.append({"name": dep['name'], "binary": dep['binary'], "ports": []})
Ejemplo n.º 9
0
 def setup(self, addr, port):
     # Add the site process
     block = [
         nginx.Location('/',
             nginx.Key('proxy_pass', 'http://127.0.0.1:33411'),
             nginx.Key('proxy_set_header', 'X-Real-IP $remote_addr'),
             nginx.Key('proxy_set_header', 'Host $host'),
             nginx.Key('proxy_buffering', 'off')
         )
     ]
     WebappControl(self.app).add_reverse_proxy('mailpile', 
         '/var/lib/mailpile', addr, port, block)
     apis.networkcontrol(self.app).add_webapp(('mailpile', 'ReverseProxy', port))
     self.setup_complete = True
Ejemplo n.º 10
0
 def setup(self, addr, port):
     # Make sure Radicale is installed and ready
     pyctl = apis.langassist(self.app).get_interface('Python')
     users = UsersBackend(self.app)
     if not pyctl.is_installed('radicale'):
         pyctl.install('radicale')
     if not pyctl.is_installed('uWSGI'):
         pyctl.install('uwsgi')
     if not os.path.exists('/etc/radicale/config'):
         if not os.path.isdir('/etc/radicale'):
             os.mkdir('/etc/radicale')
         open('/etc/radicale/config', 'w').write(self.default_config)
     if not os.path.isdir('/usr/lib/radicale'):
         os.mkdir('/usr/lib/radicale')
     # Add the site process
     users.add_user('radicale')
     users.add_group('radicale')
     users.add_to_group('radicale', 'radicale')
     wsgi_file = 'import radicale\n'
     wsgi_file += 'radicale.log.start()\n'
     wsgi_file += 'application = radicale.Application()\n'
     open('/etc/radicale/radicale.wsgi', 'w').write(wsgi_file)
     s = apis.orders(self.app).get_interface('supervisor')
     if s:
         s[0].order('new', 'radicale', 'program', 
             [('directory', '/etc/radicale'), ('user', 'radicale'), 
             ('command', 'uwsgi -s /tmp/radicale.sock -C --wsgi-file radicale.wsgi'),
             ('stdout_logfile', '/var/log/radicale.log'),
             ('stderr_logfile', '/var/log/radicale.log')])
     block = [
         nginx.Location('/',
             nginx.Key('auth_basic', '"Genesis Calendar Server (Radicale)"'),
             nginx.Key('auth_basic_user_file', '/etc/radicale/users'),
             nginx.Key('include', 'uwsgi_params'),
             nginx.Key('uwsgi_pass', 'unix:///tmp/radicale.sock'),
         )
     ]
     if not os.path.exists('/etc/radicale/users'):
         open('/etc/radicale/users', 'w').write('')
     WebappControl(self.app).add_reverse_proxy('radicale', 
         '/usr/lib/radicale', addr, port, block)
     apis.networkcontrol(self.app).add_webapp(('radicale', 'ReverseProxy', port))
     c = self.app.get_config(RadicaleConfig(self.app))
     c.first_run_complete = True
     c.save()
Ejemplo n.º 11
0
Archivo: main.py Proyecto: 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 = ('', '', '')
Ejemplo n.º 12
0
 def update_services(self):
     apis.networkcontrol(self.app).port_changed(self.plugin_info)
Ejemplo n.º 13
0
Archivo: main.py Proyecto: ajvb/genesis
	def on_submit(self, event, params, vars = None):
		if params[0] == 'dlgAdd':
			if vars.getvalue('action', '') == 'OK':
				if hasattr(self._current, 'dbengine'):
					on = False
					for dbtype in apis.databases(self.app).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:
						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', '')
				if name == '':
					self.put_message('err', 'Must choose a name')
				elif re.search('\.|-|[ ]', name):
					self.put_message('err', 'Site name must not contain spaces, dots or dashes')
				elif vars.getvalue('cfgaddr', '') == '':
					self.put_message('err', 'Must choose an address')
				elif vars.getvalue('cfgport', '') == '':
					self.put_message('err', 'Must choose a port (default 80)')
				elif vars.getvalue('cfgport') == self.app.gconfig.get('genesis', 'bind_port', ''):
					self.put_message('err', 'Can\'t use the same port number as Genesis')
				else:
					self.mgr.nginx_edit(
						origname=self._edit['name'], 
						name=vars.getvalue('cfgname'), 
						stype=self._edit['type'], 
						path=self._edit['path'], 
						addr=vars.getvalue('cfgaddr'), 
						port=vars.getvalue('cfgport'),
						ssl=self._edit['ssl'],
						php=self._edit['php']
						)
					apis.networkcontrol(self.app).change_webapp(
						self._edit['name'], vars.getvalue('cfgname'), 
						self._edit['type'], vars.getvalue('cfgport'))
			self._edit = None
		if params[0] == 'dlgSetup':
			if vars.getvalue('action', '') == 'OK':
				name = vars.getvalue('name', '').lower()
				port = vars.getvalue('port', '80')
				samename = False
				for site in self.sites:
					if name == site['name']:
						samename = True
				if not name or not self._setup:
					self.put_message('err', 'Name or type not selected')
				elif samename is True:
					self.put_message('err', 'A site with this name already exists')
				elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
					self.put_message('err', 'Can\'t use the same port number as Genesis')
				elif re.search('\.|-|[ ]', name):
					self.put_message('err', 'Site name must not contain spaces, dots or dashes')
				else:
					w = WAWorker(self, 'add', name, self._current, vars)
					w.start()
					
			self._setup = None
Ejemplo n.º 14
0
             self.put_message('err', 'Site must have either a different domain/subdomain or a different port')
         elif self.site.ssl and hostport == '80':
             self.put_message('err', 'Cannot set an HTTPS site to port 80')
         elif not self.site.ssl and hostport == '443':
             self.put_message('err', 'Cannot set an HTTP-only site to port 443')
         else:
             w = Webapp()
             w.name = self.site.name
             w.stype = self.site.stype
             w.path = self.site.path
             w.addr = hostname
             w.port = hostport
             w.ssl = self.site.ssl
             w.php = False
             WebappControl(self.app).nginx_edit(self.site, w)
             apis.networkcontrol(self.app).change_webapp(self.site, w)
             self.put_message('success', 'Site edited successfully')
     self._editsrv = None
 if params[0] == 'dlgChpasswd':
     passwd = vars.getvalue('chpasswd', '')
     if vars.getvalue('action', '') == 'OK':
         if not passwd:
             self.put_message('err', 'Must choose a password')
         elif passwd != vars.getvalue('chpasswdb',''):
             self.put_message('err', 'Passwords must match')
         else:
             try:
                 self._rc.edit_user(self._edit, passwd)
                 self.put_message('success', 'Password changed successfully')
             except Exception, e:
                 self.app.log.error('Calendar password for %s could not be changed. Error: %s' % (self._edit,str(e)))
Ejemplo n.º 15
0
Archivo: main.py Proyecto: tewe/genesis
 def on_session_start(self):
     self._mgr = RepositoryManager(self.app.log, self.app.config)
     self._nc = apis.networkcontrol(self.app)
     self._reloadfw = False
Ejemplo n.º 16
0
    def on_submit(self, event, params, vars=None):
        if params[0] == 'dlgAdd':
            if vars.getvalue('action', '') == 'OK':
                if hasattr(self._current, 'dbengine'):
                    on = False
                    for dbtype in apis.databases(self.app).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:
                        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', '')
                if name == '':
                    self.put_message('err', 'Must choose a name')
                elif re.search('\.|-|[ ]', name):
                    self.put_message(
                        'err',
                        'Site name must not contain spaces, dots or dashes')
                elif vars.getvalue('cfgaddr', '') == '':
                    self.put_message('err', 'Must choose an address')
                elif vars.getvalue('cfgport', '') == '':
                    self.put_message('err', 'Must choose a port (default 80)')
                elif vars.getvalue('cfgport') == self.app.gconfig.get(
                        'genesis', 'bind_port', ''):
                    self.put_message(
                        'err', 'Can\'t use the same port number as Genesis')
                else:
                    self.mgr.nginx_edit(origname=self._edit['name'],
                                        name=vars.getvalue('cfgname'),
                                        stype=self._edit['type'],
                                        path=self._edit['path'],
                                        addr=vars.getvalue('cfgaddr'),
                                        port=vars.getvalue('cfgport'),
                                        ssl=self._edit['ssl'],
                                        php=self._edit['php'])
                    apis.networkcontrol(self.app).change_webapp(
                        self._edit['name'], vars.getvalue('cfgname'),
                        self._edit['type'], vars.getvalue('cfgport'))
            self._edit = None
        if params[0] == 'dlgSetup':
            if vars.getvalue('action', '') == 'OK':
                name = vars.getvalue('name', '').lower()
                port = vars.getvalue('port', '80')
                samename = False
                for site in self.sites:
                    if name == site['name']:
                        samename = True
                if not name or not self._setup:
                    self.put_message('err', 'Name or type not selected')
                elif samename is True:
                    self.put_message('err',
                                     'A site with this name already exists')
                elif port == self.app.gconfig.get('genesis', 'bind_port', ''):
                    self.put_message(
                        'err', 'Can\'t use the same port number as Genesis')
                elif re.search('\.|-|[ ]', name):
                    self.put_message(
                        'err',
                        'Site name must not contain spaces, dots or dashes')
                else:
                    w = WAWorker(self, 'add', name, self._current, vars)
                    w.start()

            self._setup = None
Ejemplo n.º 17
0
Archivo: main.py Proyecto: 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 = ('','','')
Ejemplo n.º 18
0
 def on_session_start(self):
     self._mgr = RepositoryManager(self.app.log, self.app.config)
     self._nc = apis.networkcontrol(self.app)
     self._wa = apis.webapps(self.app)
     self._info = None
     self._metoo = []
Ejemplo n.º 19
0
 def update_services(self):
     apis.networkcontrol(self.app).port_changed(self.plugin_info)
Ejemplo n.º 20
0
             self.put_message('err',
                              'Cannot set an HTTPS site to port 80')
         elif not self.site.ssl and hostport == '443':
             self.put_message(
                 'err', 'Cannot set an HTTP-only site to port 443')
         else:
             w = Webapp()
             w.name = self.site.name
             w.stype = self.site.stype
             w.path = self.site.path
             w.addr = hostname
             w.port = hostport
             w.ssl = self.site.ssl
             w.php = False
             WebappControl(self.app).nginx_edit(self.site, w)
             apis.networkcontrol(self.app).change_webapp(self.site, w)
             self.put_message('success', 'Site edited successfully')
     self._editsrv = None
 if params[0] == 'dlgChpasswd':
     passwd = vars.getvalue('chpasswd', '')
     if vars.getvalue('action', '') == 'OK':
         if not passwd:
             self.put_message('err', 'Must choose a password')
         elif passwd != vars.getvalue('chpasswdb', ''):
             self.put_message('err', 'Passwords must match')
         else:
             try:
                 self._rc.edit_user(self._edit, passwd)
                 self.put_message('success',
                                  'Password changed successfully')
             except Exception, e:
Ejemplo n.º 21
0
 def on_session_start(self):
     self._mgr = RepositoryManager(self.app.log, self.app.config)
     self._nc = apis.networkcontrol(self.app)
     self._wa = apis.webapps(self.app)
     self._info = None
     self._metoo = []
Ejemplo n.º 22
0
 def on_session_start(self):
     self._mgr = RepositoryManager(self.app.log, self.app.config)
     self._nc = apis.networkcontrol(self.app)
     self._reloadfw = False