def getResourceFor(self, request): """overrides Site""" # TODO remove unsafe-inline (not that it really matters as we are not doing sloppy templating) # TODO: Once we know our own hostname(s), or if we start using the same port for WebSockets, tighten the connect-src policy request.setHeader(b'Referrer-Policy', b'no-referrer') request.setHeader(b'X-Content-Type-Options', b'nosniff') return Site.getResourceFor(self, request)
def getResourceFor(self, request): "Fetch a resource and measure the time until it's finished writing." resource = Site.getResourceFor(self, request) now = time.time() request.requestHeaders.addRawHeader('X-Request-Started-At', '%0.8f' % now) request.notifyFinish().addBoth(self._recordRequestTime, now, request) self._activeRequests.add(request) return resource
def getResourceFor(self, request): userpass = self.check_userpass_auth(self, request) if userpass == AUTH_SUCCESS: return PurgeAuthCredentials() cookie = self.check_cookie_auth(self, request) if cookie == AUTH_SUCCESS: return Site.getResourceFor(self, request) return RequestAuthenticationResource()
def getResourceFor(self, request): "Fetch a resource and measure the time until it's finished writing." resource = Site.getResourceFor(self, request) if self.endpointFunc is None: endpoint = None else: endpoint, _ = self.endpointFunc(request.path) request.notifyFinish().addBoth( self._recordRequestTime, time.time(), endpoint, request) self._activeRequests.add(request) return resource
def getResourceFor(self, request): """overrides Site""" # TODO remove unsafe-inline (not that it really matters as we are not doing sloppy templating) # TODO: Once we know our own hostname(s), or if we start using the same port for WebSockets, tighten the connect-src policy request.setHeader(b'Content-Security-Policy', b';'.join([ b"default-src 'self' 'unsafe-inline'", b"connect-src 'self' ws://*:* wss://*:*", b"img-src 'self' data: blob:", b"media-src http: https: file: blob:", # client audio tools wish to load user-specified audio b"object-src 'none'", b"base-uri 'self'", ])) request.setHeader(b'Referrer-Policy', b'no-referrer') request.setHeader(b'X-Content-Type-Options', b'nosniff') return Site.getResourceFor(self, request)
def getResourceFor(self, request): # Scan well-known search paths first search_paths = ['build-out', 'build-gen',] for search_path in search_paths: resource = self.resource prepath = copy.copy(request.prepath) postpath = copy.copy(request.postpath) postpath.insert(0, search_path) while postpath and not resource.isLeaf: path_element = postpath.pop(0) prepath.append(path_element) resource = resource.getChildWithDefault(path_element, request) if resource and not isinstance(resource, NoResource): return resource # Fallback to normal handling return Site.getResourceFor(self, request)
def getResourceFor(self, request): # Scan well-known search paths first search_paths = ["build-out", "build-gen"] for search_path in search_paths: resource = self.resource prepath = copy.copy(request.prepath) postpath = copy.copy(request.postpath) postpath.insert(0, search_path) while postpath and not resource.isLeaf: path_element = postpath.pop(0) prepath.append(path_element) resource = resource.getChildWithDefault(path_element, request) if resource and not isinstance(resource, NoResource): return resource # Fallback to normal handling return Site.getResourceFor(self, request)
def getResourceFor(self, request): # type: (Request) -> Resource """ Check if a route matches this request. Fall back to Twisted default lookup behavior otherwise. :param request: Twisted request instance :return: Resource to handle this request """ request.site = self for route_re, resource in self.routes.items(): path = request.path.decode() match = route_re.match(path) if match: request.path_args = match.groupdict() or match.groups() return resource return Site.getResourceFor(self, request)
def getResourceFor(self, request): "Override Site so we can track active requests" if request.requestHeaders.hasHeader('user-agent'): ua = ' '.join(request.requestHeaders.getRawHeaders('user-agent')) print('{}: Serving request to User-Agent "{}".'.format(time.asctime(), ua)) else: print('{}: Serving request with no incoming User-Agent header.'.format(time.asctime())) # track requsts currently being serviced, so we can nicely # shut them off self.active_requests.append(request) request.notifyFinish().addBoth(self._forget_request, request) # see if we've reached the maximum requests self._request_count += 1 if self._max_requests is not None: if self._request_count >= self._max_requests: d = self.gracefully_stop() d.addBoth(lambda x: reactor.stop()) # call through to parent return Site.getResourceFor(self, request)
def getResourceFor(self, request): "Override Site so we can track active requests" if request.requestHeaders.hasHeader('user-agent'): ua = ' '.join(request.requestHeaders.getRawHeaders('user-agent')) print('{}: Serving request to User-Agent "{}".'.format(time.asctime(), ua)) else: print('{}: Serving request with no incoming User-Agent header.'.format(time.asctime())) # track requsts currently being serviced, so we can nicely # shut them off self.active_requests.add(request) request.notifyFinish().addBoth(self._forget_request, request) # see if we've reached the maximum requests self._request_count += 1 if self._max_requests is not None: if self._request_count >= self._max_requests: d = self.gracefully_stop() d.addBoth(lambda x: reactor.stop()) # call through to parent return Site.getResourceFor(self, request)
def getResourceFor(self, request): request.setHeader('Server', 'MUDSling/%s' % mudsling.version) return Site.getResourceFor(self, request)
def getResourceFor(self, request): request.setHeader('server', 'PYPDDemo/1.0') request.setHeader('cache-control: ', 'cache-control: private, max-age=0, no-cache') return Site.getResourceFor(self, request)
def getResourceFor(self, request): """ Remove the server header from the response. """ request.responseHeaders.removeHeader('server') return Site.getResourceFor(self, request)
def getResourceFor(self, request): request.setHeader('X-Frame-Options', 'DENY') request.setHeader('X-XSS-Protection', '1') request.setHeader('X-Content-Type-Options','nosniff') request.setHeader('Server', 'None') return Site.getResourceFor(self, request)
def getResourceFor(self, request: Request): request.setHeader('Server', self._server_version_string) request.setHeader('Hydrus-Server', self._server_version_string) return Site.getResourceFor(self, request)
def getResourceFor(self, request): self.cnt += 1 return Site.getResourceFor(self, request)
def getResourceFor(self, request): request.setHeader('Server', SERVER_HEADER) return Site.getResourceFor(self, request)
class TestClient(object): def __init__(self, resource): self.site = Site(resource) def get(self, path_with_params, status=None): return self.request(path_with_params, method='GET', status=status) def post(self, path_with_params, content=None, content_type=None, status=None): return self.request(path_with_params, method='POST', content=content, content_type=content_type, status=status) def delete(self, path_with_params, status=None): return self.request(path_with_params, method='DELETE', status=status) def patch(self, path_with_params, content=None, content_type=None, status=None): return self.request(path_with_params, method='PATCH', content=content, content_type=content_type, status=None) def put(self, path_with_params, content=None, content_type=None, status=None): return self.request(path_with_params, method='PUT', content=content, content_type=content_type, status=status) def head(self, path_with_params, status=None): return self.request(path_with_params, method='HEAD', status=status) def options(self, path_with_params, status=None): return self.request(path_with_params, method='OPTIONS', status=status) @defer.inlineCallbacks def request(self, req_or_path_with_params, status=None, **request_kwargs): if isinstance(req_or_path_with_params, TestRequest): req = req_or_path_with_params else: path, params = self.parse_url(req_or_path_with_params) req = TestRequest(path, params=params, **request_kwargs) resp = yield self._handle_request(req) if status is not None: assert resp.status_code == status, resp.status_code defer.returnValue(resp) def _handle_request(self, request): ''' Resolves a test request. ''' finished = request.notifyFinish() def extract_response(none): return TestResponse(request.responseCode or 200, request.responseHeaders, ''.join(request.written)) def _render(resource): result = resource.render(request) if isinstance(result, str): request.write(result) request.finish() return finished elif result is NOT_DONE_YET: return finished else: raise ValueError("Unexpected return value: %r" % (result,)) resource_handler = self.site.getResourceFor(request) d = _render(resource_handler) d.addCallback(extract_response) return d def parse_url(self, path_with_params): parts = path_with_params.split('?') if len(parts) == 2: path, param_str = parts params = parse_qs(param_str) else: path, = parts params = {} return path, params
def getResourceFor(self, request): resource = Site.getResourceFor(self, request) now = time.time() request.requestHeaders.addRawHeader('X-Request-Started-At', '%0.8f' % now) return resource