Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: net/tools/testserver/testserver.py

Issue 12235003: Split out policy code from net/tools/testserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Saving a file, sherlock? ;) Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """This is a simple HTTP/FTP/TCP/UDP/BASIC_AUTH_PROXY/WEBSOCKET server used for 6 """This is a simple HTTP/FTP/TCP/UDP/BASIC_AUTH_PROXY/WEBSOCKET server used for
7 testing Chrome. 7 testing Chrome.
8 8
9 It supports several test URLs, as specified by the handlers in TestPageHandler. 9 It supports several test URLs, as specified by the handlers in TestPageHandler.
10 By default, it listens on an ephemeral port and sends the port number back to 10 By default, it listens on an ephemeral port and sends the port number back to
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 self.ClientRedirectHandler, 264 self.ClientRedirectHandler,
265 self.MultipartHandler, 265 self.MultipartHandler,
266 self.MultipartSlowHandler, 266 self.MultipartSlowHandler,
267 self.GetSSLSessionCacheHandler, 267 self.GetSSLSessionCacheHandler,
268 self.CloseSocketHandler, 268 self.CloseSocketHandler,
269 self.RangeResetHandler, 269 self.RangeResetHandler,
270 self.DefaultResponseHandler] 270 self.DefaultResponseHandler]
271 post_handlers = [ 271 post_handlers = [
272 self.EchoTitleHandler, 272 self.EchoTitleHandler,
273 self.EchoHandler, 273 self.EchoHandler,
274 self.DeviceManagementHandler,
275 self.PostOnlyFileHandler] + get_handlers 274 self.PostOnlyFileHandler] + get_handlers
276 put_handlers = [ 275 put_handlers = [
277 self.EchoTitleHandler, 276 self.EchoTitleHandler,
278 self.EchoHandler] + get_handlers 277 self.EchoHandler] + get_handlers
279 head_handlers = [ 278 head_handlers = [
280 self.FileHandler, 279 self.FileHandler,
281 self.DefaultResponseHandler] 280 self.DefaultResponseHandler]
282 281
283 self._mime_types = { 282 self._mime_types = {
284 'crx' : 'application/x-chrome-extension', 283 'crx' : 'application/x-chrome-extension',
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 with 400 to CONNECT requests.""" 1574 with 400 to CONNECT requests."""
1576 1575
1577 contents = "Your client has issued a malformed or illegal request." 1576 contents = "Your client has issued a malformed or illegal request."
1578 self.send_response(400) # bad request 1577 self.send_response(400) # bad request
1579 self.send_header('Content-Type', 'text/html') 1578 self.send_header('Content-Type', 'text/html')
1580 self.send_header('Content-Length', len(contents)) 1579 self.send_header('Content-Length', len(contents))
1581 self.end_headers() 1580 self.end_headers()
1582 self.wfile.write(contents) 1581 self.wfile.write(contents)
1583 return True 1582 return True
1584 1583
1585 def DeviceManagementHandler(self):
1586 """Delegates to the device management service used for cloud policy."""
1587
1588 if not self._ShouldHandleRequest("/device_management"):
1589 return False
1590
1591 raw_request = self.ReadRequestBody()
1592
1593 if not self.server._device_management_handler:
1594 import device_management
1595 policy_path = os.path.join(self.server.data_dir, 'device_management')
1596 self.server._device_management_handler = (
1597 device_management.TestServer(policy_path, self.server.policy_keys))
1598
1599 http_response, raw_reply = (
1600 self.server._device_management_handler.HandleRequest(self.path,
1601 self.headers,
1602 raw_request))
1603 self.send_response(http_response)
1604 if (http_response == 200):
1605 self.send_header('Content-Type', 'application/x-protobuffer')
1606 self.end_headers()
1607 self.wfile.write(raw_reply)
1608 return True
1609
1610 # called by the redirect handling function when there is no parameter 1584 # called by the redirect handling function when there is no parameter
1611 def sendRedirectHelp(self, redirect_name): 1585 def sendRedirectHelp(self, redirect_name):
1612 self.send_response(200) 1586 self.send_response(200)
1613 self.send_header('Content-Type', 'text/html') 1587 self.send_header('Content-Type', 'text/html')
1614 self.end_headers() 1588 self.end_headers()
1615 self.wfile.write('<html><body><h1>Error: no redirect destination</h1>') 1589 self.wfile.write('<html><body><h1>Error: no redirect destination</h1>')
1616 self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name) 1590 self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name)
1617 self.wfile.write('</body></html>') 1591 self.wfile.write('</body></html>')
1618 1592
1619 # called by chunked handling function 1593 # called by chunked handling function
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1875 self.options.record_resume, 1849 self.options.record_resume,
1876 self.options.tls_intolerant) 1850 self.options.tls_intolerant)
1877 print 'HTTPS server started on %s:%d...' % (host, server.server_port) 1851 print 'HTTPS server started on %s:%d...' % (host, server.server_port)
1878 else: 1852 else:
1879 server = HTTPServer((host, port), TestPageHandler) 1853 server = HTTPServer((host, port), TestPageHandler)
1880 print 'HTTP server started on %s:%d...' % (host, server.server_port) 1854 print 'HTTP server started on %s:%d...' % (host, server.server_port)
1881 1855
1882 server.data_dir = self.__make_data_dir() 1856 server.data_dir = self.__make_data_dir()
1883 server.file_root_url = self.options.file_root_url 1857 server.file_root_url = self.options.file_root_url
1884 server_data['port'] = server.server_port 1858 server_data['port'] = server.server_port
1885 server._device_management_handler = None
1886 server.policy_keys = self.options.policy_keys
1887 elif self.options.server_type == SERVER_WEBSOCKET: 1859 elif self.options.server_type == SERVER_WEBSOCKET:
1888 # Launch pywebsocket via WebSocketServer. 1860 # Launch pywebsocket via WebSocketServer.
1889 logger = logging.getLogger() 1861 logger = logging.getLogger()
1890 logger.addHandler(logging.StreamHandler()) 1862 logger.addHandler(logging.StreamHandler())
1891 # TODO(toyoshim): Remove following os.chdir. Currently this operation 1863 # TODO(toyoshim): Remove following os.chdir. Currently this operation
1892 # is required to work correctly. It should be fixed from pywebsocket side. 1864 # is required to work correctly. It should be fixed from pywebsocket side.
1893 os.chdir(self.__make_data_dir()) 1865 os.chdir(self.__make_data_dir())
1894 websocket_options = WebSocketOptions(host, port, '.') 1866 websocket_options = WebSocketOptions(host, port, '.')
1895 if self.options.cert_and_key_file: 1867 if self.options.cert_and_key_file:
1896 websocket_options.use_tls = True 1868 websocket_options.use_tls = True
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2029 self.option_parser.add_option('--ssl-bulk-cipher', action='append', 2001 self.option_parser.add_option('--ssl-bulk-cipher', action='append',
2030 help='Specify the bulk encryption ' 2002 help='Specify the bulk encryption '
2031 'algorithm(s) that will be accepted by the ' 2003 'algorithm(s) that will be accepted by the '
2032 'SSL server. Valid values are "aes256", ' 2004 'SSL server. Valid values are "aes256", '
2033 '"aes128", "3des", "rc4". If omitted, all ' 2005 '"aes128", "3des", "rc4". If omitted, all '
2034 'algorithms will be used. This option may ' 2006 'algorithms will be used. This option may '
2035 'appear multiple times, indicating ' 2007 'appear multiple times, indicating '
2036 'multiple algorithms should be enabled.'); 2008 'multiple algorithms should be enabled.');
2037 self.option_parser.add_option('--file-root-url', default='/files/', 2009 self.option_parser.add_option('--file-root-url', default='/files/',
2038 help='Specify a root URL for files served.') 2010 help='Specify a root URL for files served.')
2039 self.option_parser.add_option('--policy-key', action='append',
2040 dest='policy_keys',
2041 help='Specify a path to a PEM-encoded '
2042 'private key to use for policy signing. May '
2043 'be specified multiple times in order to '
2044 'load multipe keys into the server. If the '
2045 'server has multiple keys, it will rotate '
2046 'through them in at each request a '
2047 'round-robin fashion. The server will '
2048 'generate a random key if none is specified '
2049 'on the command line.')
2050 2011
2051 2012
2052 if __name__ == '__main__': 2013 if __name__ == '__main__':
2053 sys.exit(ServerRunner().main()) 2014 sys.exit(ServerRunner().main())
OLDNEW
« chrome/browser/policy/test/policy_testserver.py ('K') | « net/tools/testserver/device_management.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698