예제 #1
0
    def get(self, request, **kwargs):
        #import pdb; pdb.set_trace()
        logger.debug("LogoutHandler.get()")
        #response = HttpResponseRedirect("/")
        args = dict(current_user=None)

        if is_mobile(request):
            template_dir = 'm'
        else:
            template_dir = 'w'
        response = HttpResponseRedirect("/")
        #response = render_to_response("%s/login_main.tmpl" % template_dir, args)
        #whfb.set_cookie(response, "fb_user", "", expires=time.time() - 86400)
        whfb.set_cookie(response, "fb_user", "", domain=config.WH_DOMAIN, path="/", expires=time.time() - 86400)
        return response
예제 #2
0
    def get(self, request, **kwargs):
        logger.debug("HomeViewHandler.get()")
        #import pdb; pdb.set_trace()
        c_user = self.current_user
        if c_user is None or c_user.get('access_token', None) is None:
            args = dict(current_user=c_user)

            if is_mobile(request):
                template_dir = 'm'
            else:
                template_dir = 'w'
            response = render_to_response("%s/login_main.tmpl" % template_dir, args)
        else:
            args = dict(access_token=c_user['access_token'])
            response = HttpResponseRedirect("/view.py?" + urllib.urlencode(args))

        if self.request.COOKIES.get("fb_user", None) is not None:
            user_id = whfb.parse_cookie(self.request.COOKIES.get("fb_user"))
            whfb.set_cookie(response, "fb_user", str(user_id), domain=config.WH_DOMAIN, path="/", expires=time.time() + 30 * 86400)
        return response
예제 #3
0
    def get(self, request, **kwargs):
        logger.debug("LoginHandler.get()")

        args = dict(client_id=config.FACEBOOK_APP_ID, 
                    redirect_uri="%s%s" % ( config.WEBSITE_HOST, request.META.get('PATH_INFO')),
                    state=config.FACEBOOK_APP_ID)

        if self.request.GET.get("code"):
            #import pdb; pdb.set_trace()
            args["client_secret"] = config.FACEBOOK_APP_SECRET
            args["code"] = self.request.GET.get("code")
            #response = cgi.parse_qs(urllib.urlopen(
            response = urlparse.parse_qs(urllib.urlopen(
                "https://graph.facebook.com/oauth/access_token?" +
                urllib.urlencode(args)).read())
            if response.get('access_token', None) is None:
                del args["client_secret"]
                del args["code"]
                return HttpResponseRedirect(
                    "https://www.facebook.com/dialog/oauth?" +
                    urllib.urlencode(args))

            access_token = response["access_token"][-1]
            access_token_expires = long(response["expires"][-1])

            # Download the user profile and cache a local instance of the
            # basic profile info
            profile = json.load(urllib.urlopen(
                "https://graph.facebook.com/me?" +
                urllib.urlencode(dict(access_token=access_token))))

            current_user = self.persistence.get_user(profile['id'])
            if current_user is None:  # no record in db
                current_user = {}
            
            current_user[u'_id'] = profile['id']
            current_user[u'name'] = profile['name']
            current_user[u'link'] = profile['link']
            current_user[u'access_token'] = access_token

            try:
                current_user[u'access_token_expires'] = long(access_token_expires)
            except:
                current_user[u'access_token_expires'] = 0

            self.persistence.save('user', current_user)

            self.client_loc_longitude = self.request.POST.get('longitude', None) or self.request.GET.get('longitude', None)
            self.client_loc_latitude = self.request.POST.get('latitude', None) or self.request.GET.get('latitude', None)
            
            if (self.client_loc_longitude is None or self.client_loc_latitude is None) and \
                    self.request.GET.get('geobrowsertried', None) is None:
                response = render_to_response('coordinate.tmpl', 
                                              {'app_url': config.WEBSITE_HOST + '/view.py', 'signed_request': None,
                                               'refresh_cnt': self.request.GET.get('c', 0), 'access_token': access_token})

            whfb.set_cookie(response, "fb_user", str(profile["id"]), path='/', domain=config.WH_DOMAIN, expires=time.time() + 30 * 86400)
            return response
        else:
            return HttpResponseRedirect(
#                "https://graph.facebook.com/oauth/authorize?" +
                "https://www.facebook.com/dialog/oauth?" +
                urllib.urlencode(args))
예제 #4
0
    def post(self, request, **kwargs):
        #import pdb; pdb.set_trace()
        flag_login= True

        self.uid = whfb.parse_cookie(request.COOKIES.get("fb_user"))
        
        if self.uid is None:
            #return HttpResponseRedirect('/')
            current_user = None
            self.access_token = None
            self.access_token_expires = -1
        else:
            current_user = self.current_user
            self.access_token = current_user['access_token']
            self.access_token_expires = current_user['access_token_expires']

            # extend access token if expiring within a day
            self.access_token, self.access_token_expires = self.fb.get_extended_access_token_w_timeout(self.access_token, self.access_token_expires, DAY_IN_SECS)
            logger.debug("access_token: %s, expires:%s", self.access_token, self.access_token_expires)

        redirect = self.get_coordinate()
        if redirect is not None:
            user_id = whfb.parse_cookie(request.COOKIES.get("fb_user"))
            if user_id is not None:
                whfb.set_cookie(redirect, "fb_user", str(user_id), domain=config.WH_DOMAIN, path="/", expires=time.time() + 30 * 86400)
            return redirect

        place_list = self.get_queryset()

        app_url = config.WEBSITE_HOST + '/view.py'
        if is_mobile(request):
            template_dir = 'm'
        else:
            template_dir = 'w'

        if len(place_list) == 0:
            flag_first_time = True
            template_name = "%s/location_main_first_time_user.tmpl" % template_dir
            place_list = self.get_general_queryset()
        else:
            flag_first_time = False
            template_name = "%s/location_main.tmpl" % template_dir

        #import pdb; pdb.set_trace()
        location_paginator, page, page.object_list, is_paginated = self.paginate_queryset(place_list, kwargs['paginate_by'])
        # Make sure page request is an int. If not, deliver first page.
        try:
            page_num = int(request.GET.get('page', '1'))
        except ValueError:
            page_num = 1

        # If page request (9999) is out of range, deliver last page of results.
        try:
            page = location_paginator.page(page_num)
        except (EmptyPage, InvalidPage):
            page = location_paginator.page(location_paginator.num_pages)

        places = page.object_list
        recommend_list = []
        checkin_list = []
        if self.flag_recommend or flag_first_time:
            recommend_list = places
            wh_q = 'recommend'
        else:
            checkin_list = places
            wh_q = 'checkin'
        return render_to_response(template_name,
                                  {'checkin_list': checkin_list, 'recommend_list': recommend_list, 
                                   'app_url': app_url, 'agent': request.META.get('HTTP_USER_AGENT', None),
                                   'client_country': self.client_loc_country, 'client_state': self.client_loc_state, 
                                   'client_city': self.client_loc_city, 'flag_geobrowsertried': request.GET.get('geobrowsertried', False),
                                   'client_lat': self.client_loc_latitude, 'client_long': self.client_loc_longitude,
                                   'ec2_page': config.EC2_APP_PAGE, 'access_token': self.access_token, 
                                   'is_paginated': is_paginated, 'page': page, 'paginator': location_paginator,
                                   'flag_login': flag_login, 'current_user': current_user, 'sort_by': self.sort_by, 'wh_q': wh_q
                                   })