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
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)
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)
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)
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)
def test_invalid_xml(self): xml = "NotXML" with self.assertRaises(FilterException): filter_writeups(xml, ["Test"])
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)
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)
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)
def test_empty_feed(self): feed = WriteupsRssFeed.from_item_list([]) output = WriteupsRssFeed.from_xml_string(filter_writeups( str(feed), [])) self.assertEqual(feed, output)