Example #1
0
    def test_app_auth_with_valid_pubkey_by_multipart_form(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = read_file(make_tests_data_path('user_rsa_key'))
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        response = yield client.fetch(url,
                                      method='POST',
                                      headers=headers,
                                      body=body)
        data = json.loads(to_str(response.body))
        self.assertIsNone(data['status'])
        self.assertIsNotNone(data['id'])
        self.assertIsNotNone(data['encoding'])

        url = url.replace('http', 'ws')
        ws_url = url + 'ws?id=' + data['id']
        ws = yield tornado.websocket.websocket_connect(ws_url)
        msg = yield ws.read_message()
        self.assertEqual(to_str(msg, data['encoding']), banner)
        ws.close()
Example #2
0
    def test_app_auth_with_pubkey_cannot_be_decoded(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = 'h' * 1024
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        body = body.encode('utf-8')
        # added some gbk bytes to the privatekey, make it cannot be decoded
        body = body[:-100] + b'\xb4\xed\xce\xf3' + body[-100:]
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        response = yield client.fetch(url,
                                      method='POST',
                                      headers=headers,
                                      body=body)
        data = json.loads(to_str(response.body))
        self.assertIsNone(data['id'])
        self.assertIsNone(data['encoding'])
        self.assertTrue(data['status'].startswith('Invalid private key'))
Example #3
0
 def test_app_post_form_with_large_body_size_by_multipart_form(self):
     privatekey = 'h' * (2 * max_body_size)
     files = [('privatekey', 'user_rsa_key', privatekey)]
     content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                    files)
     headers = {
         'Content-Type': content_type,
         'content-length': str(len(body))
     }
     response = self.sync_post('/', body, headers=headers)
     self.assertIn(response.code, [400, 599])
Example #4
0
    def test_app_post_form_with_large_body_size_by_multipart_form(self):
        privatekey = 'h' * (2 * max_body_size)
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type, 'content-length': str(len(body))
        }

        with self.assertRaises(HTTPError) as ctx:
            yield self.async_post('/', body, headers=headers)
        self.assertIn('Bad Request', ctx.exception.message)
Example #5
0
 def test_app_auth_with_pubkey_exceeds_key_max_size(self):
     url = self.get_url('/')
     privatekey = 'h' * (handler.KEY_MAX_SIZE * 2)
     files = [('privatekey', 'user_rsa_key', privatekey)]
     content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                    files)
     headers = {
         'Content-Type': content_type, 'content-length': str(len(body))
     }
     if swallow_http_errors:
         response = yield self.async_post(url, body, headers=headers)
         self.assertIn(b'Invalid private key', response.body)
     else:
         with self.assertRaises(HTTPError) as ctx:
             yield self.async_post(url, body, headers=headers)
         self.assertIn('Bad Request', ctx.exception.message)
Example #6
0
    def test_app_post_form_with_large_body_size(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = 'h' * (2 * max_body_size)
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }

        with self.assertRaises(HTTPError):
            yield client.fetch(url, method='POST', headers=headers, body=body)
Example #7
0
    def test_app_auth_with_pubkey_exceeds_key_max_size(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = 'h' * (handler.KEY_MAX_SIZE * 2)
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        with self.assertRaises(HTTPError) as ctx:
            yield client.fetch(url, method='POST', headers=headers, body=body)
        self.assertEqual(ctx.exception.code, 400)
        self.assertIn('Invalid private key', ctx.exception.message)
Example #8
0
 def test_app_auth_with_pubkey_cannot_be_decoded_by_multipart_form(self):
     url = self.get_url('/')
     privatekey = 'h' * 1024
     files = [('privatekey', 'user_rsa_key', privatekey)]
     content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                    files)
     body = body.encode('utf-8')
     # added some gbk bytes to the privatekey, make it cannot be decoded
     body = body[:-100] + b'\xb4\xed\xce\xf3' + body[-100:]
     headers = {
         'Content-Type': content_type, 'content-length': str(len(body))
     }
     if swallow_http_errors:
         response = yield self.async_post(url, body, headers=headers)
         self.assertIn(b'Invalid unicode', response.body)
     else:
         with self.assertRaises(HTTPError) as ctx:
             yield self.async_post(url, body, headers=headers)
         self.assertIn('Bad Request', ctx.exception.message)
Example #9
0
    def test_app_auth_with_pubkey_cannot_be_decoded_by_multipart_form(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = 'h' * 1024
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        body = body.encode('utf-8')
        # added some gbk bytes to the privatekey, make it cannot be decoded
        body = body[:-100] + b'\xb4\xed\xce\xf3' + body[-100:]
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        with self.assertRaises(HTTPError) as exc:
            yield client.fetch(url, method='POST', headers=headers, body=body)
            self.assertIn('Bad Request (Invalid unicode', exc.msg)
Example #10
0
    def test_app_auth_with_pubkey_exceeds_key_max_size(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = 'h' * (handler.KEY_MAX_SIZE * 2)
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        response = yield client.fetch(url,
                                      method='POST',
                                      headers=headers,
                                      body=body)
        data = json.loads(to_str(response.body))
        self.assertIsNone(data['id'])
        self.assertIsNone(data['encoding'])
        self.assertTrue(data['status'].startswith('Invalid private key'))
Example #11
0
    def test_app_auth_with_invalid_pubkey_for_user_robey(self):
        url = self.get_url('/')
        client = self.get_http_client()
        response = yield client.fetch(url)
        self.assertEqual(response.code, 200)

        privatekey = read_file(os.path.join(base_dir, 'tests', 'user_rsa_key'))
        privatekey = privatekey[:100] + 'bad' + privatekey[100:]
        files = [('privatekey', 'user_rsa_key', privatekey)]
        content_type, body = encode_multipart_formdata(self.body_dict.items(),
                                                       files)
        headers = {
            'Content-Type': content_type,
            'content-length': str(len(body))
        }
        response = yield client.fetch(url,
                                      method='POST',
                                      headers=headers,
                                      body=body)
        data = json.loads(to_str(response.body))
        self.assertIsNotNone(data['status'])
        self.assertIsNone(data['id'])
        self.assertIsNone(data['encoding'])