# encoding: utf-8 # Author: Zhang Huangbin import sys import types import web from libs.policyd import core session = web.config.get('_session') mapCategoryToTable = { # listcategory: table_name, 'ip': 'whitelist', 'sender': 'whitelist_sender', 'dnsname': 'whitelist_dnsname', } # # End Validators ################## class Whitelist(core.PolicydWrap): def list(self, listcategory='ip', cur_page=1): self.listcategory = web.safestr(listcategory) self.cur_page = int(cur_page) self.count = self.db.query("""SELECT COUNT(*) as total FROM %s""" % (mapCategoryToTable[listcategory]) ) # Set correct cur_page. self.total = self.count[0].total or 0 if self.cur_page > self.total: self.cur_page = self.total if self.cur_page >= 1: self.entries = self.db.select(mapCategoryToTable[listcategory], offset=(self.cur_page - 1) * session.pageSizeLimit, limit=session.pageSizeLimit, order='_whitelist ASC', ) else: self.entries = self.db.select(mapCategoryToTable[listcategory], order='_whitelist ASC',) return (self.total, self.entries.list()) def delete(self, listcategory='ip', records=[],): if type(records) is not types.ListType: return (False, 'INVALID_RECORD') # sql try: self.db.delete( mapCategoryToTable[listcategory], where='_whitelist in ' + web.sqlquote(records), ) return (True,) except Exception, e: return (False, str(e)) def add(self, form): records = [] # Convert records to set(). if isinstance(form, types.ListType): records = set(form) else: # Records submitted from web form (type: web.utils.Storage) records = set(form.get('record', '').splitlines()) # Get different whitelist categories. ipAddrs = [] senders = [] dnsnames = [] for v in records: if core.isWblistIP(v): ipAddrs += [web.safestr(v)] elif core.isWblistSender(v): senders += [web.safestr(v)] elif core.isWblistDnsName(v): dnsnames += [web.safestr(v)] # INSERT records. for entry in ipAddrs: try: self.db.insert('whitelist', _whitelist=entry,) except Exception, e: # Duplicate entry. #if e.args[0] == ER.DUP_ENTRY: pass for entry in senders: try: self.db.insert('whitelist_sender', _whitelist=entry,) except Exception, e: # Duplicate entry. #if e.args[0] == ER.DUP_ENTRY: pass for entry in dnsnames: try: self.db.insert('whitelist_dnsname', _whitelist=entry,) except Exception, e: # Duplicate entry. #if e.args[0] == ER.DUP_ENTRY: pass return (True,)