def process_request(self, request):
     app_requests = []
     if request.GET.get("request_ids", None):
         fb = FBSession(request)
         request_ids = request.GET.get("request_ids").split(",")
         logger.debug("Got app request ids: %s" % request_ids)
         for id in request_ids:
             r = Request(id=id)
             if settings.DEBUG:
                 try:
                     r.save()
                 except IntegrityError:
                     pass
             app_requests.append(r)
         fb.app_requests = app_requests
         fb.modified("AppRequestMiddleware")
    def process_request(self, request):
        """
        Writes the signed_request into the Session 
        """
        fb = FBSession(request)
        application = get_app_dict()

        if "feincms" in settings.INSTALLED_APPS:
            # if feincms is installed, try to get the application from the page
            from facebook.feincms.utils import get_application_from_request

            page_app = get_application_from_request(request)
            if application:
                application = get_app_dict(page_app)

        # default POST/GET request from facebook with a signed request
        if "signed_request" in request.POST:
            parsed_request = parseSignedRequest(request.POST["signed_request"], application["SECRET"])
            logger.debug(u"got signed_request from facebook: %s" % parsed_request)
            if "language" in parsed_request:
                language = parsed_request["user"]["locale"]
                logger.debug("language: %s" % language)
                request.LANGUAGE_CODE = language
                translation.activate(language)
            fb.signed_request = parsed_request
            logger.debug("stored signed_request")
            expires = None
            # rewrite important data
            if "oauth_token" in parsed_request:
                expires = datetime.fromtimestamp(float(parsed_request["expires"]))
                fb.store_token(parsed_request["oauth_token"], expires)
            elif "access_token" in parsed_request:
                expires = datetime.fromtimestamp(float(parsed_request["expires"]))
                fb.store_token(parsed_request["access_token"], expires)
            else:
                # The chance is good that there is already a valid token in the session.
                fb.store_token(None)

            if "user_id" in parsed_request:
                fb.user_id = parsed_request["user_id"]

            else:
                logger.debug("Signed Request didn't contain public user info.")
            if expires:
                logger.debug(
                    "Signed Request issued at: %s" % datetime.fromtimestamp(float(parsed_request["issued_at"]))
                )

        # auth via callback from facebook
        elif "code" in request.REQUEST:
            args = dict(
                client_id=application["id"],
                client_secret=application["secret"],
                code=request.REQUEST["code"],
                redirect_uri=request.build_absolute_uri()
                .split("?")[0]
                .replace(application["CANVAS-URL"], application["CANVAS-PAGE"]),
            )

            response = urllib.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args))
            raw = response.read()
            parsed = urlparse.parse_qs(raw)  # Python 2.6 parse_qs is now part of the urlparse module
            if parsed.get("access_token", None):
                expires = datetime.fromtimestamp(float(parsed["expires"][-1]))
                fb.store_token(parsed["access_token"][-1], expires)
                logger.debug("Got access token from callback: %s. Expires at %s" % (parsed, expires))
            else:
                logger.debug("facebook did not respond an accesstoken: %s" % raw)