blob: 19c0ed4bbcdc2f6056727dcd82811c8246a6558a [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""URL endpoint to record bad bisect."""
from google.appengine.api import users
from dashboard import oauth2_decorator
from dashboard import quick_logger
from dashboard import request_handler
from dashboard import utils
from dashboard import xsrf
from dashboard.models import try_job
class BadBisectHandler(request_handler.RequestHandler):
@oauth2_decorator.DECORATOR.oauth_required
def get(self):
"""Renders bad_bisect.html."""
if not utils.IsValidSheriffUser():
self._RenderError('No permission.')
return
if not self.request.get('try_job_id'):
self._RenderError('Missing try_job_id.')
return
self.RenderHtml('bad_bisect.html',
{'try_job_id': self.request.get('try_job_id')})
@xsrf.TokenRequired
def post(self):
"""Handles post requests from bad_bisect.html."""
if not utils.IsValidSheriffUser():
self._RenderError('No permission.')
return
if not self.request.get('try_job_id'):
self._RenderError('Missing try_job_id.')
return
try_job_id = int(self.request.get('try_job_id'))
job = try_job.TryJob.get_by_id(try_job_id)
if not job:
self._RenderError('TryJob doesn\'t exist.')
return
user = users.get_current_user()
email = user.email()
if not job.bad_result_emails:
job.bad_result_emails = set()
if email not in job.bad_result_emails:
job.bad_result_emails.add(email)
job.put()
_LogFeedback(try_job_id, email)
self.RenderHtml('result.html', {
'headline': 'Confirmed bad bisect. Thank you for reporting.'})
def _RenderError(self, error):
self.RenderHtml('result.html', {'errors': [error]})
def _LogFeedback(try_job_id, email):
formatter = quick_logger.Formatter()
logger = quick_logger.QuickLogger('bad_bisect', 'report', formatter)
message = '%s marked try job %d.' % (email, try_job_id)
logger.Log(message)
logger.Save()