Пример #1
0
    def writeups(uid):
        try:
            user = User(uid)

            headers = {
                'User-Agent': 'CTFTime Writeups Filter 1.0',
            }

            r = requests.get("https://ctftime.org/writeups/rss/", headers = headers)

            if (not r.headers['content-type'].startswith("application/rss+xml")):
                raise Exception("Invalid content type received from CTFTime: {}".format(r.headers['content-type']))

            content = filter.filter_writeups(r.text, user.ctf_list)

            res = Response(
                response = content,
                status = r.status_code,
                content_type = r.headers['content-type'],
            )
        except Exception as e:
            logger.error(e)
            res = Response(
                status = HttpStatus.HTTP_500_INTERNAL_SERVER_ERROR.value
            )
        
        return res
Пример #2
0
 def test_empty_filter(self):
     empty_feed = WriteupsRssFeed.from_item_list([])
     non_empty_feed = WriteupsRssFeed.from_item_list(
         [_generate_rss_item("MyCTF")])
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(non_empty_feed), []))
     self.assertEqual(empty_feed, output)
Пример #3
0
 def test_multiple_items_dont_exist(self):
     item_list = [
         _generate_rss_item("MyCTF"),
         _generate_rss_item("MyCTF"),
         _generate_rss_item("MyCTF")
     ]
     feed = WriteupsRssFeed.from_item_list(item_list)
     empty_feed = WriteupsRssFeed.from_item_list([])
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), ["OtherCTF"]))
     self.assertEqual(empty_feed, output)
Пример #4
0
 def test_special_regex_characters(self):
     items_to_be_removed = [
         _generate_rss_item("CTF"),
         _generate_rss_item("Other"),
         _generate_rss_item("MyCTF")
     ]
     items_to_remain = [_generate_rss_item("Other|CTF")]
     item_list = items_to_be_removed + items_to_remain
     feed = WriteupsRssFeed.from_item_list(item_list)
     expected_feed = WriteupsRssFeed.from_item_list(items_to_remain)
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), ["Other|CTF"]))
     self.assertEqual(expected_feed, output)
Пример #5
0
 def test_multiple_filter_names(self):
     items_to_be_removed = [
         _generate_rss_item("MyCTF"),
         _generate_rss_item("RandomCTF"),
         _generate_rss_item("MyCTF")
     ]
     items_to_remain = [
         _generate_rss_item("OtherCTF"),
         _generate_rss_item("NewCTF"),
         _generate_rss_item("OtherCTF")
     ]
     item_list = items_to_be_removed + items_to_remain
     feed = WriteupsRssFeed.from_item_list(item_list)
     expected_feed = WriteupsRssFeed.from_item_list(items_to_remain)
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), ["OtherCTF", "NewCTF"]))
     self.assertEqual(expected_feed, output)
Пример #6
0
 def test_invalid_xml(self):
     xml = "NotXML"
     with self.assertRaises(FilterException):
         filter_writeups(xml, ["Test"])
Пример #7
0
 def test_single_item_case_insensitive(self):
     ctf_name = "MyCTF"
     feed = WriteupsRssFeed.from_item_list([_generate_rss_item(ctf_name)])
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), [ctf_name.lower()]))
     self.assertEqual(feed, output)
Пример #8
0
 def test_single_item_exists_middle_of_name(self):
     ctf_name = "My First CTF"
     feed = WriteupsRssFeed.from_item_list([_generate_rss_item(ctf_name)])
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), ["First"]))
     self.assertEqual(feed, output)
Пример #9
0
 def test_single_item_doesnt_exist(self):
     feed = WriteupsRssFeed.from_item_list([_generate_rss_item("MyCTF")])
     empty_feed = WriteupsRssFeed.from_item_list([])
     output = WriteupsRssFeed.from_xml_string(
         filter_writeups(str(feed), ["OtherCTF"]))
     self.assertEqual(empty_feed, output)
Пример #10
0
 def test_empty_feed(self):
     feed = WriteupsRssFeed.from_item_list([])
     output = WriteupsRssFeed.from_xml_string(filter_writeups(
         str(feed), []))
     self.assertEqual(feed, output)