def handleRedirect_newRequest_withCompletionHandler_()

in chef/cookbooks/cpe_nudge/files/nudge-python/resources/gurl.py [0:0]


    def handleRedirect_newRequest_withCompletionHandler_(
            self, response, request, completionHandler):
        '''Handle the redirect request'''
        def allowRedirect():
            '''Allow the redirect'''
            if completionHandler:
                completionHandler(request)
                return None
            return request

        def denyRedirect():
            '''Deny the redirect'''
            if completionHandler:
                completionHandler(None)
            return None

        newURL = request.URL().absoluteString()
        if response is None:
            # the request has changed the NSURLRequest in order to standardize
            # its format, for example, changing a request for
            # http://www.apple.com to http://www.apple.com/. This occurs because
            # the standardized, or canonical, version of the request is used for
            # cache management. Pass the request back as-is
            # (it appears that at some point Apple also defined a redirect like
            # http://developer.apple.com to https://developer.apple.com to be
            # 'merely' a change in the canonical URL.)
            # Further -- it appears that this delegate method isn't called at
            # all in this scenario, unlike NSConnectionDelegate method
            # connection:willSendRequest:redirectResponse:
            # we'll leave this here anyway in case we're wrong about that
            self.log('Allowing redirect to: %s' % newURL)
            return allowRedirect()
        # If we get here, it appears to be a real redirect attempt
        # Annoyingly, we apparently can't get access to the headers from the
        # site that told us to redirect. All we know is that we were told
        # to redirect and where the new location is.
        self.redirection.append([newURL, dict(response.allHeaderFields())])
        newParsedURL = urlparse(newURL)
        # This code was largely based on the work of Andreas Fuchs
        # (https://github.com/munki/munki/pull/465)
        if self.follow_redirects is True or self.follow_redirects == 'all':
            # Allow the redirect
            self.log('Allowing redirect to: %s' % newURL)
            return allowRedirect()
        elif (self.follow_redirects == 'https'
              and newParsedURL.scheme == 'https'):
            # Once again, allow the redirect
            self.log('Allowing redirect to: %s' % newURL)
            return allowRedirect()
        # If we're down here either the preference was set to 'none',
        # the url we're forwarding on to isn't https or follow_redirects
        # was explicitly set to False
        self.log('Denying redirect to: %s' % newURL)
        return denyRedirect()