def setup_app(command, conf, variables): """Place any commands to setup baruwa here""" # Don't reload the app if it was loaded under the testing environment if not pylons.test.pylonsapp: load_environment(conf.global_conf, conf.local_conf) # Create the tables if they don't already exist print '-' * 100 log.info("Creating tables") Base.metadata.create_all(bind=Session.bind) basepath = os.path.dirname(os.path.dirname(__file__)) # Create the custom functions print '-' * 100 log.info("Creating custom functions") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'functions.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() try: conn = Session.connection() conn.execute(text(sql)) Session.commit() except ProgrammingError: Session.rollback() defaultserver = Session.query(Server)\ .filter(Server.hostname == 'default')\ .all() # Create the Mailscanner SQL config views print '-' * 100 log.info("Populating initial sql") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'integration.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() for sqlcmd in sql.split(';'): if sqlcmd: try: sqlcmd = "%s;" % sqlcmd Session.execute(text(sqlcmd)) Session.commit() except ProgrammingError: Session.rollback() if not defaultserver: log.info("Creating the default settings node") dfls = Server('default', True) Session.add(dfls) confserial = ConfigSettings('confserialnumber', 'ConfSerialNumber', 0) confserial.value = 1 confserial.server_id = 1 Session.add(confserial) Session.commit() log.info("Default settings node created !")
def update_ms_serial(logger): """Update MS configuration serial""" try: msconf = Session.query(ConfigSettings)\ .filter(ConfigSettings.internal == u'confserialnumber').one() msconf.value = int(msconf.value) + 1 except NoResultFound: msconf = ConfigSettings('confserialnumber', 'ConfSerialNumber', 0) msconf.value = 1 msconf.server_id = 1 Session.add(msconf) Session.commit() # Session.close() logger.info('Scanner serial number updated: %s' % str(msconf.value))
def update_ms_serial(logger): """Update MS configuration serial""" try: msconf = Session.query(ConfigSettings)\ .filter(ConfigSettings.internal == 'confserialnumber').one() msconf.value = int(msconf.value) + 1 except NoResultFound: msconf = ConfigSettings( 'confserialnumber', 'ConfSerialNumber', 0) msconf.value = 1 msconf.server_id = 1 Session.add(msconf) Session.commit() # Session.close() logger.info('Scanner serial number updated: %s' % str(msconf.value))
def setup_app(command, conf, variables): """Place any commands to setup baruwa here""" # Don't reload the app if it was loaded under the testing environment if not pylons.test.pylonsapp: load_environment(conf.global_conf, conf.local_conf) # Create the tables if they don't already exist print '-' * 100 log.info("Creating tables") Base.metadata.create_all(bind=Session.bind) basepath = os.path.dirname(os.path.dirname(__file__)) # Create the custom functions print '-' * 100 log.info("Creating custom functions") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'functions.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() try: conn = Session.connection() conn.execute(text(sql)) Session.commit() except ProgrammingError: Session.rollback() defaultserver = Session.query(Server)\ .filter(Server.hostname == 'default')\ .all() # Create the Mailscanner SQL config views print '-' * 100 log.info("Populating initial sql") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'integration.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() for sqlcmd in sql.split(';'): if sqlcmd: try: sqlcmd = "%s;" % sqlcmd Session.execute(text(sqlcmd)) Session.commit() except ProgrammingError: Session.rollback() if not defaultserver: log.info("Creating the default settings node") dfls = Server('default', True) Session.add(dfls) confserial = ConfigSettings('confserialnumber', 'ConfSerialNumber', 0) confserial.value = 1 confserial.server_id = 1 Session.add(confserial) Session.commit() log.info("Default settings node created !") admin = Session.query(User).filter(User.account_type==1).all() if not admin: def timeout_handler(signum, frame): raise TimeoutException() old_handler = signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(30) try: create_user = raw_input('Do you want to configure ' 'an admin account? (Y/N): ') except (TimeoutException, EOFError): sys.exit(0) finally: signal.signal(signal.SIGALRM, old_handler) signal.alarm(0) if str(create_user).lower() == 'y': print '-' * 100 log.info("Creating initial admin account") value_map = {'username': True, 'password1': True, 'password2': True, 'firstname': False, 'lastname': False, 'email': True} values = {} def get_input(field, required): "Get user input" prompt = "Please enter the %s:" % field while 1: if field in ['password1', 'password2']: value = getpass.getpass(prompt=prompt) else: value = raw_input(prompt) if not required: break if required and value.strip() != "": if not field in ['email', 'password1', 'password2']: break if field == 'email': if not ADDRESS_RE.match(value): print "Please provide a valid email address." else: break if field == 'password1': try: cracklib.VeryFascistCheck(value) except ValueError, message: print str(message) else: break if field == 'password2': if values['password1'] == value: break else: print 'password2 does not match password1' return value for attr in value_map: value = get_input(attr, value_map[attr]) values[attr] = value user = User(values['username'], values['email']) for name in ['firstname', 'lastname']: if values[name]: setattr(user, name, values[name]) user.internal = True user.active = True user.local = True user.account_type = 1 user.set_password(values['password1']) Session.add(user) Session.commit()
def section(self, serverid=1, sectionid='1'): "Settings section" server = self._get_server(serverid) if not server: abort(404) if not int(sectionid) in CONFIG_SECTIONS: abort(404) c.serverid = serverid c.sectionid = sectionid c.scanner = server c.sections = CONFIG_SECTIONS c.form = settings_forms[sectionid](request.POST, csrf_context=session) if not request.POST: for field in c.form: if (sectionid == '1' and '_' in field.name and not field.name == 'csrf_token'): internal = global_settings_dict[field.name] else: internal = field.name conf = self._get_setting(serverid, internal) if conf: attr = getattr(c.form, field.name) attr.data = conf.value updated = None if request.POST and c.form.validate(): for field in c.form: if field.data and not field.name == 'csrf_token': if sectionid == '1': if '_' in field.name: external = global_settings_dict[field.name] internal = external else: external = CONFIG_RE.sub(u'', unicode(field.label.text)) internal = field.name else: external = CONFIG_RE.sub(u'', unicode(field.label.text)) internal = field.name conf = self._get_setting(serverid, internal) if conf is None: if field.data != field.default: conf = ConfigSettings(internal=internal, external=external, section=sectionid) conf.value = field.data conf.server = server updated = True Session.add(conf) Session.commit() subs = dict(svr=server.hostname, s=external, a=conf.value) info = HOSTSETTING_MSG % subs audit_log(c.user.username, 3, info, request.host, request.remote_addr, now()) else: if conf.value != field.data: conf.value = field.data updated = True Session.add(conf) Session.commit() subs = dict(svr=conf.server.hostname, s=external, a=conf.value) info = HOSTSETTING_MSG % subs audit_log(c.user.username, 2, info, request.host, request.remote_addr, now()) if updated: flash( _('%(settings)s updated') % dict(settings=CONFIG_SECTIONS[int(sectionid)])) update_serial.delay() else: flash_info(_('No configuration changes made')) #redirect(url('settings-scanner', serverid=serverid)) return render('/settings/section.html')
def setup_app(command, conf, variables): """Place any commands to setup baruwa here""" # Don't reload the app if it was loaded under the testing environment if not pylons.test.pylonsapp: load_environment(conf.global_conf, conf.local_conf) # Create the tables if they don't already exist print '-' * 100 log.info("Creating tables") Base.metadata.create_all(bind=Session.bind) basepath = os.path.dirname(os.path.dirname(__file__)) # Create the custom functions print '-' * 100 log.info("Creating custom functions") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'functions.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() try: conn = Session.connection() conn.execute(text(sql)) Session.commit() except ProgrammingError: Session.rollback() defaultserver = Session.query(Server)\ .filter(Server.hostname == 'default')\ .all() # Create the Mailscanner SQL config views print '-' * 100 log.info("Populating initial sql") sqlfile = os.path.join(basepath, 'baruwa', 'config', 'sql', 'integration.sql') if os.path.exists(sqlfile): with open(sqlfile, 'r') as handle: sql = handle.read() for sqlcmd in sql.split(';'): if sqlcmd: try: sqlcmd = "%s;" % sqlcmd Session.execute(text(sqlcmd)) Session.commit() except ProgrammingError: Session.rollback() if not defaultserver: log.info("Creating the default settings node") dfls = Server('default', True) Session.add(dfls) confserial = ConfigSettings('confserialnumber', 'ConfSerialNumber', 0) confserial.value = 1 confserial.server_id = 1 Session.add(confserial) Session.commit() log.info("Default settings node created !") admin = Session.query(User).filter(User.account_type == 1).all() if not admin: def timeout_handler(signum, frame): raise TimeoutException() old_handler = signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(30) try: create_user = raw_input('Do you want to configure ' 'an admin account? (Y/N): ') except (TimeoutException, EOFError): sys.exit(0) finally: signal.signal(signal.SIGALRM, old_handler) signal.alarm(0) if str(create_user).lower() == 'y': print '-' * 100 log.info("Creating initial admin account") value_map = { 'username': True, 'password1': True, 'password2': True, 'firstname': False, 'lastname': False, 'email': True } values = {} def get_input(field, required): "Get user input" prompt = "Please enter the %s:" % field while 1: if field in ['password1', 'password2']: value = getpass.getpass(prompt=prompt) else: value = raw_input(prompt) if not required: break if required and value.strip() != "": if not field in ['email', 'password1', 'password2']: break if field == 'email': if not ADDRESS_RE.match(value): print "Please provide a valid email address." else: break if field == 'password1': try: cracklib.VeryFascistCheck(value) except ValueError, message: print str(message) else: break if field == 'password2': if values['password1'] == value: break else: print 'password2 does not match password1' return value for attr in value_map: value = get_input(attr, value_map[attr]) values[attr] = value user = User(values['username'], values['email']) for name in ['firstname', 'lastname']: if values[name]: setattr(user, name, values[name]) user.internal = True user.active = True user.local = True user.account_type = 1 user.set_password(values['password1']) Session.add(user) Session.commit()
def section(self, serverid=1, sectionid='1'): "Settings section" server = self._get_server(serverid) if not server: abort(404) if not int(sectionid) in CONFIG_SECTIONS: abort(404) c.serverid = serverid c.sectionid = sectionid c.scanner = server c.sections = CONFIG_SECTIONS c.form = settings_forms[sectionid](request.POST, csrf_context=session) if not request.POST: for field in c.form: if (sectionid == '1' and '_' in field.name and not field.name == 'csrf_token'): internal = global_settings_dict[field.name] else: internal = field.name conf = self._get_setting(serverid, internal) if conf: attr = getattr(c.form, field.name) attr.data = conf.value updated = None if request.POST and c.form.validate(): for field in c.form: if field.data and not field.name == 'csrf_token': if sectionid == '1': if '_' in field.name: external = global_settings_dict[field.name] internal = external else: external = CONFIG_RE.sub('', field.label.text) internal = field.name else: external = CONFIG_RE.sub('', field.label.text) internal = field.name conf = self._get_setting(serverid, internal) if conf is None: if field.data != field.default: conf = ConfigSettings( internal=internal, external=external, section=sectionid ) conf.value = field.data conf.server = server updated = True Session.add(conf) Session.commit() subs = dict(svr=server.hostname, s=external, a=conf.value) info = HOSTSETTING_MSG % subs audit_log(c.user.username, 3, info, request.host, request.remote_addr, datetime.now()) else: if conf.value != field.data: conf.value = field.data updated = True Session.add(conf) Session.commit() subs = dict(svr=conf.server.hostname, s=external, a=conf.value) info = HOSTSETTING_MSG % subs audit_log(c.user.username, 2, info, request.host, request.remote_addr, datetime.now()) if updated: flash(_('%(settings)s updated') % dict( settings=CONFIG_SECTIONS[int(sectionid)])) update_serial.delay() else: flash_info(_('No configuration changes made')) #redirect(url('settings-scanner', serverid=serverid)) return render('/settings/section.html')
def section(self, serverid=1, sectionid='1'): "Settings section" server = self._get_server(serverid) if not server: abort(404) if not int(sectionid) in CONFIG_SECTIONS: abort(404) c.serverid = serverid c.sectionid = sectionid c.scanner = server c.sections = CONFIG_SECTIONS c.form = settings_forms[sectionid](request.POST, csrf_context=session) if not request.method == 'POST': for field in c.form: if (sectionid == '1' and '_' in field.name and not field.name == 'csrf_token'): internal = global_settings_dict[field.name] else: internal = field.name conf = self._get_setting(serverid, internal) if conf: attr = getattr(c.form, field.name) attr.data = conf.value updated = None if request.method == 'POST' and c.form.validate(): for field in c.form: if field.type == 'SelectMultipleField' or \ (field.data and not field.name == 'csrf_token'): if sectionid == '1': if '_' in field.name: external = global_settings_dict[field.name] internal = external else: external = CONFIG_RE.sub(u'', unicode(field.label.text)) internal = field.name else: external = CONFIG_RE.sub(u'', unicode(field.label.text)) internal = field.name conf = self._get_setting(serverid, internal) if conf is None: if (field.type == 'SelectMultipleField' and len(field.data) and field.data != field.default)\ or (field.type != 'SelectMultipleField' and field.data != field.default): check_field(field) conf = ConfigSettings( internal=internal, external=external, section=sectionid ) conf.value = field.data conf.server = server updated = True Session.add(conf) Session.commit() subs = dict(svr=server.hostname, s=external, a=conf.value) info = auditmsgs.HOSTSETTING_MSG % subs audit_log(c.user.username, 3, unicode(info), request.host, request.remote_addr, arrow.utcnow().datetime) else: subs = dict(svr=conf.server.hostname, s=external, a=conf.value) info = auditmsgs.HOSTSETTING_MSG % subs check_value = get_check_value(field.type, conf.value) if check_value != field.data: # stored value not equal to updated value if (field.type == 'SelectMultipleField' and len(field.data) and field.data != field.default) or \ (field.type != 'SelectMultipleField' and field.data != field.default): # not a default, we can update check_field(field) conf.value = field.data updated = True Session.add(conf) Session.commit() audit_log(c.user.username, 2, unicode(info), request.host, request.remote_addr, arrow.utcnow().datetime) else: # is the default lets delete the stored value Session.delete(conf) Session.commit() updated = True audit_log(c.user.username, 4, unicode(info), request.host, request.remote_addr, arrow.utcnow().datetime) if updated: flash(_('%(settings)s updated') % dict( settings=CONFIG_SECTIONS[int(sectionid)])) create_ms_settings.apply_async(exchange=FANOUT_XCHG) update_serial.delay() else: flash_info(_('No configuration changes made')) # redirect(url('settings-scanner', serverid=serverid)) elif request.method == 'POST' and not c.form.validate(): msg = _("Error detected, check the settings below") flash_alert(msg) log.info(msg) return self.render('/settings/section.html')