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)