コード例 #1
0
ファイル: base.py プロジェクト: as784125/shinysdr
    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)
コード例 #2
0
ファイル: polecat.py プロジェクト: charmander/weasyl
 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
コード例 #3
0
ファイル: polecat.py プロジェクト: taedixon/weasyl
 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
コード例 #4
0
ファイル: auth.py プロジェクト: sporkexec/confluence
	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()
コード例 #5
0
ファイル: polecat.py プロジェクト: habnabit/polecat
 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
コード例 #6
0
ファイル: base.py プロジェクト: yellowsdr/shinysdr
 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)
コード例 #7
0
 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)
コード例 #8
0
 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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
ファイル: pastebin.py プロジェクト: david415/carml
    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)
コード例 #12
0
 def getResourceFor(self, request):
     request.setHeader('Server', 'MUDSling/%s' % mudsling.version)
     return Site.getResourceFor(self, request)
コード例 #13
0
ファイル: pypddemo.py プロジェクト: mlockett42/pypddemo
 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)
コード例 #14
0
 def getResourceFor(self, request):
     """
     Remove the server header from the response.
     """
     request.responseHeaders.removeHeader('server')
     return Site.getResourceFor(self, request)
コード例 #15
0
ファイル: server.py プロジェクト: daniellowtw/Pico
 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)
コード例 #16
0
ファイル: HydrusServer.py プロジェクト: pianomanx/hydrus
    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)
コード例 #17
0
ファイル: server.py プロジェクト: ktosiu/scratchbox
 def getResourceFor(self, request):
     self.cnt += 1
     return Site.getResourceFor(self, request)
コード例 #18
0
 def getResourceFor(self, request):
     request.setHeader('Server', SERVER_HEADER)
     return Site.getResourceFor(self, request)
コード例 #19
0
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
コード例 #20
0
 def getResourceFor(self, request):
     """
     Remove the server header from the response.
     """
     request.responseHeaders.removeHeader('server')
     return Site.getResourceFor(self, request)
コード例 #21
0
ファイル: polecat.py プロジェクト: guptaarth87/weasyl
 def getResourceFor(self, request):
     resource = Site.getResourceFor(self, request)
     now = time.time()
     request.requestHeaders.addRawHeader('X-Request-Started-At',
                                         '%0.8f' % now)
     return resource
コード例 #22
0
 def getResourceFor(self, request):
     request.setHeader('Server', 'MUDSling/%s' % mudsling.version)
     return Site.getResourceFor(self, request)
コード例 #23
0
ファイル: server.py プロジェクト: luodaobin/scratchbox
 def getResourceFor(self, request):
    self.cnt += 1
    return Site.getResourceFor(self, request)