def _set_data_(self, data, *args, **kwargs): if isinstance(data, QtGui.QTextDocument): self._docViewer_.setDocument(data) elif isinstance(data, str): from html.parser import HTMLParser parser = HTMLParser(convert_charrefs=True) parser.feed(data) parser.close() if parser.get_starttag_text() is None: self._docViewer_.document().setPlainText(data) else: self._docViewer_.document().setHtml(data) if data.find("<?xml version=") >= 0: self._highlighter_ = xmlutils.XmlSyntaxHighlighter( self._docViewer_.document()) else: self._highlighter_ = None else: raise TypeError( "Expecting a QTextDdocument or a str; got %s instead" % type(data).__name__) if kwargs.get("show", True): self.activateWindow()
def test_generate_body_with_dummy_data_html(self): """Check to make sure that the last tag is an html tag""" test_email_data = [{'Author': 'Test Author', 'Journal': 'Test Journal', 'PubDate': datetime.datetime.now().date(), 'Title': 'Test Title', 'Link': 'https://www.altmetric.com/details/101571224'}] test_email_address = '*****@*****.**' test_body = api_parser.generate_body(test_email_data, 30, test_email_address) parser = HTMLParser() parser.feed(test_body) test_output = parser.get_starttag_text() parser.close() self.assertEqual(test_output, '<a href="mailto:[email protected]">')
def validTextHTML(self, strText): isHTML = False parser = HTMLParser() parser.feed(strText) tagHtml = parser.get_starttag_text() if tagHtml: isHTML = True return isHTML
def submit(request): ret = {} has_html = False if request.POST: d = request.POST.dict() name = d.get("name", None) secret_key = d.get("secret_key", None) if name and is_user_data_valid(name): parser = HTMLParser() parser.feed(name) parser.close() if parser.get_starttag_text(): ret["flag"] = FLAGS["scoreboard_hacking"][0] has_html = True if name and secret_key and not has_html: if not is_user_data_valid(name, data_type=DataType.SHORT_NAME): ret["error"] = "Too much data" elif not is_user_data_valid(secret_key, data_type=DataType.PASSWORD): ret["error"] = "Too much data" elif get_leader(name.strip().lower()): # If they also proved the correct secret key, update that entry in the database secret_key = hashlib.sha512( secret_key.encode('utf-8')).hexdigest() leader = get_leader(name.strip().lower(), secret_key) if leader: session = get_unauth_session(request) if not session.lifetime_hacker_bucks: ret["error"] = "What makes you think you belong on the leaderboard?" else: # Update the leader with the new info # Create a set of claimed flags and combine the loaded leader with the current session leader_claimed_flags = json.loads(leader.claimed_flags) claimed_flags = list( set(leader_claimed_flags + session.claimed_flags)) leader.lifetime_hacker_bucks = calc_lifetime_hacker_bucks_from_claimed_flags( claimed_flags) leader.num_flags_found = len(claimed_flags) leader.claimed_flags = json.dumps(claimed_flags) # This will overwrite their hacker bucks. Only an issue if they didn't load first leader.hacker_bucks = session.hacker_bucks leader.remote_ip = session.remote_ip leader.percent_complete = int( (leader.num_flags_found) / len(FLAGS) * 100) leader.playtime = str(timezone.now() - leader.session_creation_time) leader_purchased_challenges = json.loads( leader.purchased_challenges) for challenge_id, challenge in session.challenges.items( ): if challenge.purchased: leader_purchased_challenges.append( challenge_id) leader_purchased_challenges = list( set(leader_purchased_challenges)) leader.purchased_challenges = json.dumps( leader_purchased_challenges) # Update the changes leader.save() else: ret["error"] = "Already a leader with that name. To update, provide the correct password." else: name = name.strip() session = get_unauth_session(request) if not session.lifetime_hacker_bucks: ret["error"] = "What makes you think you belong on the leaderboard?" else: leader = LeaderboardEntry() leader.lifetime_hacker_bucks = session.lifetime_hacker_bucks leader.num_flags_found = len(session.claimed_flags) leader.claimed_flags = json.dumps(session.claimed_flags) leader.hacker_bucks = session.hacker_bucks leader.percent_complete = int( (leader.num_flags_found / len(FLAGS)) * 100) leader.name = name.lower() leader.display_name = name leader.remote_ip = session.remote_ip leader.session_creation_time = session.creation_time leader.secret_key = hashlib.sha512( secret_key.encode('utf-8')).hexdigest() leader.playtime = str(timezone.now() - session.creation_time) # Get the list of purchased challenge IDs purchased_challenges = [] for challenge_id, challenge in session.challenges.items(): if challenge.purchased: purchased_challenges.append(challenge_id) leader.purchased_challenges = json.dumps( purchased_challenges) leader.save() elif not has_html: ret["error"] = "No name/secret key provided for leaderboard entry" return HttpResponse(json.dumps(ret))
def handle_data(self, data): search = re.match('HOS', data) if(search): print(HTMLParser.get_starttag_text(self)) print ("Encountered some data :", data)
def submit(request): ret = {} has_html = False if request.POST: d = request.POST.dict() name = d.get("name", None) secret_key = d.get("secret_key", None) if name and is_user_data_valid(name): parser = HTMLParser() parser.feed(name) parser.close() if parser.get_starttag_text(): ret["flag"] = FLAGS["scoreboard_hacking"][0] has_html = True if name and secret_key and not has_html: if not is_user_data_valid(name, data_type=DataType.SHORT_NAME): ret["error"] = "Too much data" elif not is_user_data_valid(secret_key, data_type=DataType.PASSWORD): ret["error"] = "Too much data" elif get_leader(name.strip().lower()): # If they also proved the correct secret key, update that entry in the database secret_key = hashlib.sha512(secret_key.encode('utf-8')).hexdigest() leader = get_leader(name.strip().lower(), secret_key) if leader: session = get_unauth_session(request) if not session.lifetime_hacker_bucks: ret["error"] = "What makes you think you belong on the leaderboard?" else: # Update the leader with the new info # Create a set of claimed flags and combine the loaded leader with the current session leader_claimed_flags = json.loads(leader.claimed_flags) claimed_flags = list(set(leader_claimed_flags + session.claimed_flags)) leader.lifetime_hacker_bucks = calc_lifetime_hacker_bucks_from_claimed_flags(claimed_flags) leader.num_flags_found = len(claimed_flags) leader.claimed_flags = json.dumps(claimed_flags) # This will overwrite their hacker bucks. Only an issue if they didn't load first leader.hacker_bucks = session.hacker_bucks leader.remote_ip = session.remote_ip leader.percent_complete = int((leader.num_flags_found) / len(FLAGS) * 100) leader.playtime = str(timezone.now() - leader.session_creation_time) leader_purchased_challenges = json.loads(leader.purchased_challenges) for challenge_id, challenge in session.challenges.items(): if challenge.purchased: leader_purchased_challenges.append(challenge_id) leader_purchased_challenges = list(set(leader_purchased_challenges)) leader.purchased_challenges = json.dumps(leader_purchased_challenges) # Update the changes leader.save() else: ret["error"] = "Already a leader with that name. To update, provide the correct password." else: name = name.strip() session = get_unauth_session(request) if not session.lifetime_hacker_bucks: ret["error"] = "What makes you think you belong on the leaderboard?" else: leader = LeaderboardEntry() leader.lifetime_hacker_bucks = session.lifetime_hacker_bucks leader.num_flags_found = len(session.claimed_flags) leader.claimed_flags = json.dumps(session.claimed_flags) leader.hacker_bucks = session.hacker_bucks leader.percent_complete = int((leader.num_flags_found / len(FLAGS)) * 100) leader.name = name.lower() leader.display_name = name leader.remote_ip = session.remote_ip leader.session_creation_time = session.creation_time leader.secret_key = hashlib.sha512(secret_key.encode('utf-8')).hexdigest() leader.playtime = str(timezone.now() - session.creation_time) # Get the list of purchased challenge IDs purchased_challenges = [] for challenge_id, challenge in session.challenges.items(): if challenge.purchased: purchased_challenges.append(challenge_id) leader.purchased_challenges = json.dumps(purchased_challenges) leader.save() elif not has_html: ret["error"] = "No name/secret key provided for leaderboard entry" return HttpResponse(json.dumps(ret))