Beispiel #1
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:
            answer = discussion_models.Feedback.insert_answer_for(
                answer_text, question, user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True
                answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(
                    video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Beispiel #2
0
    def post(self):

        user = users.get_current_user()

        if not user:
            self.redirect(users.create_login_url(self.request.uri))
            return

        if not is_honeypot_empty(self.request):
            # Honeypot caught a spammer (in case this is ever public or spammers
            # have google accounts)!
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:
            if len(answer_text) > 500:
                answer_text = answer_text[0:500] # max answer length, also limited by client

            answer = models_discussion.Feedback()
            answer.author = user
            answer.content = answer_text
            answer.targets = [video.key(), question.key()]
            answer.types = [models_discussion.FeedbackType.Answer]
            db.put(answer)

            notification.new_answer_for_video_question(video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Beispiel #3
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:
            answer = discussion_models.Feedback.insert_answer_for(answer_text,
                                                                  question,
                                                                  user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True
                answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Beispiel #4
0
    def make_answer(self, content, question, user_data):
        answer = discussion_models.Feedback.insert_answer_for(
            content, question, user_data)
        notification.new_answer_for_video_question(question.video(), question,
                                                   answer)

        return answer
    def make_answer(self, content, question, user_data):
        answer = discussion_models.Feedback.insert_answer_for(content,
                                                              question,
                                                              user_data)
        notification.new_answer_for_video_question(question.video(),
                                                   question,
                                                   answer)

        return answer
Beispiel #6
0
    def post(self):

        user_data = models.UserData.current()

        if not user_data:
            self.redirect(util.create_login_url(self.request.uri))
            return

        if not util_discussion.is_honeypot_empty(self.request):
            # Honeypot caught a spammer (in case this is ever public or spammers
            # have google accounts)!
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:

            answer = models_discussion.Feedback(parent=user_data)
            answer.set_author(user_data)
            answer.content = answer_text
            answer.targets = [video.key(), question.key()]
            answer.types = [models_discussion.FeedbackType.Answer]

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True

            # We don't limit answer.content length, which means we're vulnerable to
            # RequestTooLargeErrors being thrown if somebody submits a POST over the GAE
            # limit of 1MB per entity.  This is *highly* unlikely for a legitimate piece of feedback,
            # and we're choosing to crash in this case until someone legitimately runs into this.
            # See Issue 841.
            answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(
                    video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Beispiel #7
0
    def post(self):

        user_data = models.UserData.current()

        if not user_data:
            self.redirect(util.create_login_url(self.request.uri))
            return

        if not util_discussion.is_honeypot_empty(self.request):
            # Honeypot caught a spammer (in case this is ever public or spammers
            # have google accounts)!
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:

            answer = models_discussion.Feedback(parent=user_data)
            answer.set_author(user_data)
            answer.content = answer_text
            answer.targets = [video.key(), question.key()]
            answer.types = [models_discussion.FeedbackType.Answer]

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True

            # We don't limit answer.content length, which means we're vulnerable to
            # RequestTooLargeErrors being thrown if somebody submits a POST over the GAE
            # limit of 1MB per entity.  This is *highly* unlikely for a legitimate piece of feedback,
            # and we're choosing to crash in this case until someone legitimately runs into this.
            # See Issue 841.
            answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)