Пример #1
0
    def get_class(self):
        store = MagicMock()
        classes = []
        for subcls in Blocklist.__subclasses__():
            classes.append(subcls)

        for klass in classes:
            result = Blocklist.get_class(klass.__name__, store)
            self.assertEqual(result.__class__, klass)
Пример #2
0
    def get_class(self):
        store = MagicMock()
        classes = []
        for subcls in Blocklist.__subclasses__():
            classes.append(subcls)

        for klass in classes:
            result = Blocklist.get_class(klass.__name__, store)
            self.assertEqual(result.__class__, klass)
Пример #3
0
class TestBlocklist(TestBlocklistBase):
    def setUp(self):
        super(TestBlocklist, self).setUp()
        self.bl = Blocklist(self.store, filename=self.filename)

    def test_init(self):
        self.assertEqual(self.bl.store, self.store)
        self.assertEqual(self.bl.filename, self.filename)

    def test_repr(self):
        expected = (
            "{0}({1}, filename={2})".format(
                "Blocklist",
                self.store,
                self.filename
            )
        )
        self.assertEqual(self.bl.__repr__(), expected)

    def get_class(self):
        store = MagicMock()
        classes = []
        for subcls in Blocklist.__subclasses__():
            classes.append(subcls)

        for klass in classes:
            result = Blocklist.get_class(klass.__name__, store)
            self.assertEqual(result.__class__, klass)

    def get_class_raises(self):
        store = MagicMock()
        with self.assertRaises(ValueError):
            Blocklist.get_class('nonexisting', store)

    def test_get_ips_simple(self):
        contents = dedent(
            """
            Test:1.1.1.1-2.2.2.2
            Some other Test:3.3.3.3-3.3.3.3
            """
        )
        self.tempfile.file.write(contents.encode('utf-8'))
        self.tempfile.file.flush()
        expected = [
            '1.1.1.1-2.2.2.2',
            '3.3.3.3-3.3.3.3'
        ]
        result = self.bl.get_ips()
        self.assertCountEqual(result, expected)
Пример #4
0
def get_multiple_lists():
    # Get query arguments
    cidr_notation = request.args.get('cidr', default=False)

    blocklists = request.args.get('blocklists', default=None)
    listname = request.args.get("listname", default="blocklist")
    blists = [] if not blocklists else blocklists.split(',')
    comment = request.args.get("comment", default="multilist")
    ips = []

    for blist in blists:
        try:
            bl = Blocklist.get_class(blist, store)
            ips.extend(bl.get_ips(cidr_notation=cidr_notation))
        except ValueError:
            # Silently ignore unknown blocklist
            pass

    # Make List of ips unique and sorted
    ips = list(set(ips))
    ips.sort()

    result = render_template(
        "mikrotik_addresslist.jinja2",
        ips=ips,
        listname=listname,
        comment=comment)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #5
0
def get_list(blacklist):
    # Get query arguments
    cidr_notation = request.args.get('cidr', default=False)

    # First find the right class
    bl = Blocklist.get_class(blacklist, store)
    ips = bl.get_ips(cidr_notation=cidr_notation)

    if not ips:
        raise EmptyListError("No ips found for %s" % blacklist.title())

    # If deduplicating, process
    if dedupe:
        smr = Summerizer(ips)
        ips = smr.summary()

    # Get User variables if any
    listname = request.args.get(
        "listname", default="%s_list" % bl.__class__.__name__.lower())
    comment = request.args.get(
        "comment", default="%s" % bl.__class__.__name__.title())

    result = render_template(
        "mikrotik_addresslist.jinja2",
        ips=ips,
        listname=listname,
        comment=comment
    )
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #6
0
def get_multiple_lists():
    # Get query arguments
    cidr_notation = request.args.get('cidr', default=False)

    blocklists = request.args.get('blocklists', default=None)
    listname = request.args.get("listname", default="blocklist")
    blists = [] if not blocklists else blocklists.split(',')
    comment = request.args.get("comment", default="multilist")
    ips = []

    for blist in blists:
        try:
            bl = Blocklist.get_class(blist, store)
            ips.extend(bl.get_ips(cidr_notation=cidr_notation))
        except ValueError:
            # Silently ignore unknown blocklist
            pass

    # Make List of ips unique and sorted
    ips = list(set(ips))
    ips.sort()

    result = render_template("mikrotik_addresslist.jinja2",
                             ips=ips,
                             listname=listname,
                             comment=comment)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #7
0
def get_list(blacklist):
    # Get query arguments
    cidr_notation = request.args.get('cidr', default=False)

    # First find the right class
    bl = Blocklist.get_class(blacklist, store)
    ips = bl.get_ips(cidr_notation=cidr_notation)

    if not ips:
        raise EmptyListError("No ips found for %s" % blacklist.title())

    # If deduplicating, process
    if dedupe:
        smr = Summerizer(ips)
        ips = smr.summary()

    # Get User variables if any
    listname = request.args.get("listname",
                                default="%s_list" %
                                bl.__class__.__name__.lower())
    comment = request.args.get("comment",
                               default="%s" % bl.__class__.__name__.title())

    result = render_template("mikrotik_addresslist.jinja2",
                             ips=ips,
                             listname=listname,
                             comment=comment)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #8
0
def get_list(blacklist):
    # First find the right class
    bl = Blocklist.get_class(blacklist, store)
    ips = bl.get_ips()

    if not ips:
        raise EmptyListError(
            "No ips found for {}".format(blacklist.title())
        )

    # Get User variables if any
    listname = request.args.get(
        "listname",
        "{}_list".format(bl.__class__.__name__.lower())
    )
    comment = request.args.get(
        "comment",
        "{}".format(bl.__class__.__name__.title())
    )

    result = render_template(
        "mikrotik_addresslist.jinja2",
        ips=ips,
        listname=listname,
        comment=comment
    )
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #9
0
def handle_unknown_blacklist(exc):
    routes = ["/%s" % x.__name__.lower() for x in Blocklist.__subclasses__()]
    msg = render_template(
        'unknown_blacklist.jinja2',
        routes=routes,
        exc=exc,
    )
    response = make_response(msg, 404)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #10
0
def index():
    lists = []
    for subcls in Blocklist.__subclasses__():
        lists.append(subcls.__name__)

    result = render_template("welcome.jinja2",
                             lists=sorted(lists),
                             version=__version__)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #11
0
def index():
    lists = []
    for subcls in Blocklist.__subclasses__():
        lists.append(subcls.__name__)

    result = render_template(
        "welcome.jinja2",
        lists=sorted(lists),
        version=__version__)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #12
0
def handle_unknown_blacklist(exc):
    routes = [
        "/{}".format(x.__name__.lower()) for x in Blocklist.__subclasses__()
    ]
    msg = render_template(
        'unknown_blacklist.jinja2',
        routes=routes,
        exc=exc,
    )
    response = make_response(msg, 404)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #13
0
    def run(self):
        LOG.info("Start Blocklister-Updater")

        instances = []
        for subcls in Blocklist.__subclasses__():
            instances.append(subcls(
                self.store,
                refresh_list=timedelta(days=self.refresh_list)))

        while True:
            for instance in instances:
                if instance.fetcher.needs_update:
                    LOG.info(
                        "Updating Blocklister list {}".format(
                            instance.__class__.__name__))
                    instance.fetcher.update()
            time.sleep(self.interval)
Пример #14
0
    def run(self):
        LOG.info("Start Blocklister-Updater")

        instances = []
        for subcls in Blocklist.__subclasses__():
            instances.append(
                subcls(self.store,
                       refresh_list=timedelta(days=self.refresh_list)))

        while True:
            for instance in instances:
                try:
                    if instance.fetcher.needs_update:
                        LOG.info("Updating Blocklister list {}".format(
                            instance.__class__.__name__))
                        instance.fetcher.update()
                except FetcherException as exc:
                    LOG.error(exc)
            time.sleep(self.interval)
Пример #15
0
def get_multiple_lists():
    blocklists = request.args.get('blocklists', None)
    listname = request.args.get("listname", "blocklist")
    blists = [] if not blocklists else blocklists.split(',')
    comment = request.args.get("comment", "multilist")
    ips = []

    for blist in blists:
        try:
            bl = Blocklist.get_class(blist, store)
            ips.extend(bl.get_ips())
        except ValueError:
            # Silently ignore unknown blocklist
            pass

    result = render_template(
        "mikrotik_addresslist.jinja2",
        ips=ips,
        listname=listname,
        comment=comment)
    response = make_response(result, 200)
    response.headers['Content-Type'] = "text/plain"
    return response
Пример #16
0
class TestBlocklist(TestBlocklistBase):
    def setUp(self):
        super(TestBlocklist, self).setUp()
        self.bl = Blocklist(self.store, filename=self.filename)

    def test_init(self):
        self.assertEqual(self.bl.store, self.store)
        self.assertEqual(self.bl.filename, self.filename)

    def test_repr(self):
        expected = (
            "{0}({1}, filename={2})".format(
                "Blocklist",
                self.store,
                self.filename
            )
        )
        self.assertEqual(self.bl.__repr__(), expected)

    def get_class(self):
        store = MagicMock()
        classes = []
        for subcls in Blocklist.__subclasses__():
            classes.append(subcls)

        for klass in classes:
            result = Blocklist.get_class(klass.__name__, store)
            self.assertEqual(result.__class__, klass)

    def get_class_raises(self):
        store = MagicMock()
        with self.assertRaises(ValueError):
            Blocklist.get_class('nonexisting', store)

    def test_get_ips_simple(self):
        self.maxDiff = None
        contents = dedent(
            """
            Test:1.1.1.1-2.2.2.2
            Some other Test:3.3.3.3-3.3.3.3
            """
        )
        self.tempfile.file.write(contents.encode('utf-8'))
        self.tempfile.file.flush()
        expected = ["1.1.1.1-2.2.2.2", "3.3.3.3-3.3.3.3"]
        result = self.bl.get_ips()
        if sys.version_info[0] == 3:  # noqa
            self.assertCountEqual(result, expected)
        else:
            self.assertItemsEqual(result, expected)

    def test_get_ips_cidr(self):
        self.maxDiff = None
        contents = dedent(
            """
            Test:1.1.1.1-2.2.2.2
            Some other Test:3.3.3.3-3.3.3.3
            """
        )
        self.tempfile.file.write(contents.encode('utf-8'))
        self.tempfile.file.flush()
        expected = [
            IPv4Network(u'1.1.1.1/32'),
            IPv4Network(u'1.1.1.2/31'),
            IPv4Network(u'1.1.1.4/30'),
            IPv4Network(u'1.1.1.8/29'),
            IPv4Network(u'1.1.1.16/28'),
            IPv4Network(u'1.1.1.32/27'),
            IPv4Network(u'1.1.1.64/26'),
            IPv4Network(u'1.1.1.128/25'),
            IPv4Network(u'1.1.2.0/23'),
            IPv4Network(u'1.1.4.0/22'),
            IPv4Network(u'1.1.8.0/21'),
            IPv4Network(u'1.1.16.0/20'),
            IPv4Network(u'1.1.32.0/19'),
            IPv4Network(u'1.1.64.0/18'),
            IPv4Network(u'1.1.128.0/17'),
            IPv4Network(u'1.2.0.0/15'),
            IPv4Network(u'1.4.0.0/14'),
            IPv4Network(u'1.8.0.0/13'),
            IPv4Network(u'1.16.0.0/12'),
            IPv4Network(u'1.32.0.0/11'),
            IPv4Network(u'1.64.0.0/10'),
            IPv4Network(u'1.128.0.0/9'),
            IPv4Network(u'2.0.0.0/15'),
            IPv4Network(u'2.2.0.0/23'),
            IPv4Network(u'2.2.2.0/31'),
            IPv4Network(u'2.2.2.2/32'),
            IPv4Network(u'3.3.3.3/32'),
        ]
        result = self.bl.get_ips(cidr_notation=True)
        if sys.version_info[0] == 3:  # noqa
            self.assertCountEqual(result, expected)
        else:
            self.assertItemsEqual(result, expected)
Пример #17
0
 def setUp(self):
     self.client = app.test_client()
     self.classes = []
     for subcls in Blocklist.__subclasses__():
         self.classes.append(subcls)
Пример #18
0
class TestBlocklist(TestBlocklistBase):
    def setUp(self):
        super(TestBlocklist, self).setUp()
        self.bl = Blocklist(self.store, filename=self.filename)

    def test_init(self):
        self.assertEqual(self.bl.store, self.store)
        self.assertEqual(self.bl.filename, self.filename)

    def test_repr(self):
        expected = ("{0}({1}, filename={2})".format("Blocklist", self.store,
                                                    self.filename))
        self.assertEqual(self.bl.__repr__(), expected)

    def get_class(self):
        store = MagicMock()
        classes = []
        for subcls in Blocklist.__subclasses__():
            classes.append(subcls)

        for klass in classes:
            result = Blocklist.get_class(klass.__name__, store)
            self.assertEqual(result.__class__, klass)

    def get_class_raises(self):
        store = MagicMock()
        with self.assertRaises(ValueError):
            Blocklist.get_class('nonexisting', store)

    def test_get_ips_simple(self):
        self.maxDiff = None
        contents = dedent("""
            Test:1.1.1.1-2.2.2.2
            Some other Test:3.3.3.3-3.3.3.3
            """)
        self.tempfile.file.write(contents.encode('utf-8'))
        self.tempfile.file.flush()
        expected = ["1.1.1.1-2.2.2.2", "3.3.3.3-3.3.3.3"]
        result = self.bl.get_ips()
        if sys.version_info[0] == 3:  # noqa
            self.assertCountEqual(result, expected)
        else:
            self.assertItemsEqual(result, expected)

    def test_get_ips_cidr(self):
        self.maxDiff = None
        contents = dedent("""
            Test:1.1.1.1-2.2.2.2
            Some other Test:3.3.3.3-3.3.3.3
            """)
        self.tempfile.file.write(contents.encode('utf-8'))
        self.tempfile.file.flush()
        expected = [
            IPv4Network(u'1.1.1.1/32'),
            IPv4Network(u'1.1.1.2/31'),
            IPv4Network(u'1.1.1.4/30'),
            IPv4Network(u'1.1.1.8/29'),
            IPv4Network(u'1.1.1.16/28'),
            IPv4Network(u'1.1.1.32/27'),
            IPv4Network(u'1.1.1.64/26'),
            IPv4Network(u'1.1.1.128/25'),
            IPv4Network(u'1.1.2.0/23'),
            IPv4Network(u'1.1.4.0/22'),
            IPv4Network(u'1.1.8.0/21'),
            IPv4Network(u'1.1.16.0/20'),
            IPv4Network(u'1.1.32.0/19'),
            IPv4Network(u'1.1.64.0/18'),
            IPv4Network(u'1.1.128.0/17'),
            IPv4Network(u'1.2.0.0/15'),
            IPv4Network(u'1.4.0.0/14'),
            IPv4Network(u'1.8.0.0/13'),
            IPv4Network(u'1.16.0.0/12'),
            IPv4Network(u'1.32.0.0/11'),
            IPv4Network(u'1.64.0.0/10'),
            IPv4Network(u'1.128.0.0/9'),
            IPv4Network(u'2.0.0.0/15'),
            IPv4Network(u'2.2.0.0/23'),
            IPv4Network(u'2.2.2.0/31'),
            IPv4Network(u'2.2.2.2/32'),
            IPv4Network(u'3.3.3.3/32'),
        ]
        result = self.bl.get_ips(cidr_notation=True)
        if sys.version_info[0] == 3:  # noqa
            self.assertCountEqual(result, expected)
        else:
            self.assertItemsEqual(result, expected)
Пример #19
0
 def setUp(self):
     super(TestBlocklist, self).setUp()
     self.bl = Blocklist(self.store, filename=self.filename)
Пример #20
0
 def get_class_raises(self):
     store = MagicMock()
     with self.assertRaises(ValueError):
         Blocklist.get_class('nonexisting', store)
Пример #21
0
 def get_class_raises(self):
     store = MagicMock()
     with self.assertRaises(ValueError):
         Blocklist.get_class('nonexisting', store)
Пример #22
0
 def setUp(self):
     super(TestBlocklist, self).setUp()
     self.bl = Blocklist(self.store, filename=self.filename)
Пример #23
0
 def setUp(self):
     self.client = app.test_client()
     self.classes = []
     for subcls in Blocklist.__subclasses__():
         self.classes.append(subcls)