def post(self):
        """HTTP post method."""
        # todo: xsrf protection
        user = userinfo.get_user(self.request)
        if not user:
            self.response.out.write('Not logged in.')
            return

        try:
            # This regex is a bit sloppy but good enough.
            email = utils.get_verified_arg(
                re.compile('[a-z0-9_+.-]+@[a-z0-9.-]+$'), self.request,
                'email')
            desc = self.request.get('desc')
        except utils.InvalidValue:
            self.error(400)
            self.response.out.write('<div style="color:red">' +
                                    'Valid email address required.</div>')
            return

        user_info = user.get_user_info()
        user_info.moderator_request_email = self.request.get('email')
        user_info.moderator_request_desc = self.request.get('desc')
        if not user_info.moderator_request_admin_notes:
            user_info.moderator_request_admin_notes = ''
        user_info.moderator_request_admin_notes += (
            '%s: Requested.\n' %
            datetime.datetime.isoformat(datetime.datetime.now()))
        user_info.put()

        return self.get()
Beispiel #2
0
    def post(self):
        """HTTP post method."""
        # todo: xsrf protection
        user = userinfo.get_user(self.request)
        if not user:
            self.response.out.write("Not logged in.")
            return

        try:
            # This regex is a bit sloppy but good enough.
            email = utils.get_verified_arg(re.compile("[a-z0-9_+.-]+@[a-z0-9.-]+$"), self.request, "email")
            desc = self.request.get("desc")
        except utils.InvalidValue:
            self.error(400)
            self.response.out.write('<div style="color:red">' + "Valid email address required.</div>")
            return

        user_info = user.get_user_info()
        user_info.moderator_request_email = self.request.get("email")
        user_info.moderator_request_desc = self.request.get("desc")
        if not user_info.moderator_request_admin_notes:
            user_info.moderator_request_admin_notes = ""
        user_info.moderator_request_admin_notes += "%s: Requested.\n" % datetime.datetime.isoformat(
            datetime.datetime.now()
        )
        user_info.put()

        return self.get()
Beispiel #3
0
    def post(self):
        """HTTP post method."""
        try:
            userid = utils.get_verified_arg(self.USERID_REGEX, self.request, "userid")
        except utils.InvalidValue:
            self.error(400)
            self.response.out.write("invalid userid, must be ^%s" % self.USERID_REGEX.pattern)
            return

        self.response.headers.add_header("Set-Cookie", "footprinttest=%s;path=/" % userid)
        self.response.out.write("You are logged ")
        if userid:
            self.response.out.write("in!")
        else:
            self.response.out.write("out!")
        self.response.out.write('<br><a href="%s">Continue</a>' % self.request.url)
    def post(self):
        """HTTP post method."""
        try:
            userid = utils.get_verified_arg(self.USERID_REGEX, self.request,
                                            'userid')
        except utils.InvalidValue:
            self.error(400)
            self.response.out.write('invalid userid, must be ^%s' %
                                    self.USERID_REGEX.pattern)
            return

        self.response.headers.add_header('Set-Cookie',
                                         'footprinttest=%s;path=/' % userid)
        self.response.out.write('You are logged ')
        if userid:
            self.response.out.write('in!')
        else:
            self.response.out.write('out!')
        self.response.out.write('<br><a href="%s">Continue</a>' %
                                self.request.url)
    def get(self):
        """HTTP get method."""
        ok_pattern = re.compile('[a-z0-9_,:/-]*$')
        try:
            testType = utils.get_verified_arg(ok_pattern, self.request,
                                              'test_type') or 'all'
            responseTypes = (utils.get_verified_arg(ok_pattern, self.request,
                                                    'response_types')
                             or testapi.helpers.DEFAULT_RESPONSE_TYPES)
            remoteUrl = utils.get_verified_arg(ok_pattern, self.request, 'url')
            specialOutput = utils.get_verified_arg(ok_pattern, self.request,
                                                   'output')
            # cache=0: don't read from cache, else read from cache.
            read_from_cache = not (self.request.get('cache') == '0')
        except utils.InvalidValue:
            self.error(400)
            return

        if specialOutput == 'test_types':
            self.response.out.write(testapi.helpers.ALL_TEST_TYPES)
            return

        errors = ''
        if not remoteUrl:
            host = os.environ["HTTP_HOST"]
            if re.search(r'appspot.com', host):
                apiUrl = "http://" + host + "/api/volopps"
                errors = 'No remote url given in request, using same host: ' + apiUrl
            else:
                apiUrl = testapi.helpers.DEFAULT_TEST_URL
                errors = 'No remote url given in request, using default url: ' + apiUrl
        else:
            apiUrl = remoteUrl

        outstr = ""
        outstr += '<style>'
        outstr += 'p {font-family: Arial, sans-serif; font-size: 10pt; margin: 0;}'
        outstr += 'p.error {color: #880000;}'
        outstr += '.test {font-size: 12pt; font-weight: bold; margin-top: 12px;}'
        outstr += '.uri {font-size: 10pt; font-weight: normal; color: gray;'
        outstr += '      margin-left: 0px;}'
        outstr += '.result {font-size: 11pt; font-weight: normal; '
        outstr += '      margin-left: 8px; margin-bottom: 4px;}'
        outstr += '.fail {color: #880000;}'
        outstr += '.success {color: #008800;}'
        outstr += '.amplification {color: gray; margin-left: 16px;}'
        outstr += '</style>'
        # strip whitespace
        outstr = re.sub(r' ', '', outstr) + "\n"
        if read_from_cache:
            outstr += '<h1>Reading test: ' + testType + ' from the datastore</h1>'
        else:
            outstr += '<h1>Running test: ' + testType + '</h1>'
        outstr += '<p class="error">' + errors + '</p>'
        outstr += '<p>Response types: ' + responseTypes + '</p>'
        outstr += '<p>API url: ' + apiUrl + '</p>'
        self.response.out.write(outstr)

        final_status = 200
        responseTypes = responseTypes.split(',')
        for responseType in responseTypes:
            api_testing = testapi.helpers.ApiTesting(self)
            api_testing.run_tests(testType, apiUrl, responseType,
                                  read_from_cache)
            if api_testing.num_failures > 0 and final_status != 500:
                final_status = 500

        self.response.set_status(final_status)
Beispiel #6
0
  def get(self):
    """HTTP get method."""
    ok_pattern = re.compile('[a-z0-9_,:/-]*$')
    try:
      testType = utils.get_verified_arg(ok_pattern, self.request,
                                        'test_type') or 'all'
      responseTypes = (utils.get_verified_arg(ok_pattern, self.request,
                                              'response_types') or
                       testapi.helpers.DEFAULT_RESPONSE_TYPES)
      remoteUrl = utils.get_verified_arg(ok_pattern, self.request, 'url')
      specialOutput = utils.get_verified_arg(ok_pattern, self.request,
                                             'output')
      # cache=0: don't read from cache, else read from cache.
      read_from_cache = not (self.request.get('cache') == '0')
    except utils.InvalidValue:
      self.error(400)
      return

    if specialOutput == 'test_types':
      self.response.out.write(testapi.helpers.ALL_TEST_TYPES)
      return

    errors = ''
    if not remoteUrl:
      host = os.environ["HTTP_HOST"]
      if re.search(r'appspot.com', host):
        apiUrl = "http://" + host + "/api/volopps"
        errors = 'No remote url given in request, using same host: ' + apiUrl
      else:
        apiUrl = testapi.helpers.DEFAULT_TEST_URL
        errors = 'No remote url given in request, using default url: ' + apiUrl
    else:
      apiUrl = remoteUrl

    outstr = ""
    outstr += '<style>'
    outstr += 'p {font-family: Arial, sans-serif; font-size: 10pt; margin: 0;}'
    outstr += 'p.error {color: #880000;}'
    outstr += '.test {font-size: 12pt; font-weight: bold; margin-top: 12px;}'
    outstr += '.uri {font-size: 10pt; font-weight: normal; color: gray;'
    outstr += '      margin-left: 0px;}'
    outstr += '.result {font-size: 11pt; font-weight: normal; '
    outstr += '      margin-left: 8px; margin-bottom: 4px;}'
    outstr += '.fail {color: #880000;}'
    outstr += '.success {color: #008800;}'
    outstr += '.amplification {color: gray; margin-left: 16px;}'
    outstr += '</style>'
    # strip whitespace
    outstr = re.sub(r' ', '', outstr) + "\n"
    if read_from_cache:
      outstr += '<h1>Reading test: ' + testType + ' from the datastore</h1>'
    else:
      outstr += '<h1>Running test: ' + testType + '</h1>'
    outstr += '<p class="error">' + errors + '</p>'
    outstr += '<p>Response types: ' + responseTypes + '</p>'
    outstr += '<p>API url: ' + apiUrl + '</p>'
    self.response.out.write(outstr)

    final_status = 200
    responseTypes = responseTypes.split(',')
    for responseType in responseTypes:
      api_testing = testapi.helpers.ApiTesting(self)
      api_testing.run_tests(testType, apiUrl, responseType, read_from_cache)
      if api_testing.num_failures > 0 and final_status != 500:
        final_status = 500

    self.response.set_status(final_status)