def updateDb(self,fb_profile,access_token): try: fb_user = FacebookUser.objects.get(uid=fb_profile['id']) if fb_user: try: graph = facebook.GraphAPI(fb_user.access_token) graph = graph.get_object('me') except Exception,e: fb_user.access_token = access_token fb_user.save() except FacebookUser.DoesNotExist: try: email = fb_profile['email'] except: email = fb_profile['id'] + '@dummyfbemail.com' user = User.objects.create(username=fb_profile['id'], email=email) user.first_name = fb_profile['first_name'] user.last_name = fb_profile['last_name'] user.save() fb_user = FacebookUser(user=user,uid=str(fb_profile["id"]), name=fb_profile["name"], access_token=access_token, url=fb_profile["link"]) fb_user.save() return fb_user
def save_user(result, session, log=True): user = session.query(FacebookUser).filter_by(uid=result.uid).first() if not user: user = FacebookUser() convert_result(user, result) user.created_at = datetime.datetime.now() session.add(user) if log: print user.name, "created" session.commit() return user
def current_user(self): """Returns the active user, or None if the user has not logged in.""" if not hasattr(self, "_current_user"): self._current_user = None cookie = facebook.get_user_from_cookie( self.request.COOKIES, settings.FACEBOOK_APP_ID, settings.FACEBOOK_APP_SECRET) if cookie: # Store a local instance of the user data so we don't need # a round-trip to Facebook on every request try: user = FacebookUser.objects.get(uid=cookie["uid"]) except FacebookUser.DoesNotExist: graph = facebook.GraphAPI(cookie["access_token"]) profile = graph.get_object("me") user = FacebookUser(pk=str(profile["id"]), name=profile["name"], profile_url=profile["link"], access_token=cookie["access_token"]) user.save() else: if user.access_token != cookie["access_token"]: user.access_token = cookie["access_token"] user.save() self._current_user = user return self._current_user
def get_current_user(self, request): """Provides access to the active Facebook user in self.current_user The property is lazy-loaded on first access, using the cookie saved by the Facebook JavaScript SDK to determine the user ID of the active user. See http://developers.facebook.com/docs/authentication/ for more information. """ """The active user, or None if the user has not logged in.""" cookie = facebook.get_user_from_cookie( request.COOKIES, self.__FACEBOOK_APP_ID, self.__FACEBOOK_APP_SECRET) if cookie: # Store a local instance of the user data so we don't need # a round-trip to Facebook on every request self.__is_a_new_user = False try: user = FacebookUser.objects.get(uid=cookie["uid"], aid=self.__FACEBOOK_APP_ID) except FacebookUser.DoesNotExist: graph = facebook.GraphAPI(cookie["access_token"]) profile = graph.get_object("me") user = FacebookUser(uid=str(profile["id"]), aid=self.__FACEBOOK_APP_ID, profile_url=profile["link"], access_token=cookie["access_token"]) user.save() self.__is_a_new_user = True else: # Update the access token! graph = facebook.GraphAPI(cookie["access_token"]) if user.access_token != cookie["access_token"]: user.access_token = cookie["access_token"] user.save() self.__current_user = user return self.__current_user
def save(request): fbid = request.POST.get("id") name = request.POST.get("name") link = request.POST.get("link") gender = request.POST.get("gender") birthday = request.POST.get("birthday") email = request.POST.get("email") d = datetime.strptime(birthday, '%m/%d/%Y') fb_user = FacebookUser() fb_user.facebook_id = fbid fb_user.name = name fb_user.link = link fb_user.email = email fb_user.gender = gender fb_user.birthday = d.strftime('%Y-%m-%d') fb_user.save() return HttpResponse("true")
def current_user(self): """Returns the active user, or None if the user has not logged in.""" if not hasattr(self, "_current_user"): self._current_user = None if self.cookie: cookie = self.cookie else: cookie = self.parse_auth() if cookie: # print ('we have cookie', cookie["uid"]) # Store a local instance of the user data so we don't need # a round-trip to Facebook on every request try: user = FacebookUser.objects.get(uid=cookie["uid"]) except FacebookUser.DoesNotExist: try: graph = facebook.GraphAPI(cookie["access_token"]) attempt_counter = 0 ATTEMPT_LIMIT = 10 while attempt_counter < ATTEMPT_LIMIT: try: profile = graph.get_object("me") break except (IOError) as e: attempt_counter += 1 if attempt_counter == ATTEMPT_LIMIT: raise logger.info("mplib.current_user", extra={"data": {"exception": e}}) except facebook.GraphAPIError: user = None else: user = FacebookUser( pk=str(profile["id"]), first_name=profile.get("first_name"), last_name=profile.get("last_name"), locale=profile.get("locale"), gender=profile.get("gender", ""), time_zone=profile.get("timezone", ""), email=profile.get("email", ""), access_token=cookie["access_token"], ) try: user.save() except IntegrityError as e: logger.info( "IntegrityError saving user", extra={"data": {"exception": e, "profile": profile}} ) # this user has already been saved somehow, let's skip # over this problem and grab him from the db user = FacebookUser.objects.get(pk=str(profile["id"])) ip = FacebookUserIP() ip.fb_user = user ip.ip_address = ip_address(self.request) ip.save() else: if user.access_token != cookie["access_token"]: user.access_token = cookie["access_token"] ip = FacebookUserIP() ip.fb_user = user ip.ip_address = ip_address(self.request) ip.save() user.save() self._current_user = user return self._current_user
def updateDb(self, fb_profile, access_token): # logger.debug(fb_profile) # logger.debug('Access Token: %s' % access_token) # check if user is an app admin/developer is_admin = False try: # returns a list of apps the user is a dev of url = ( "https://api.facebook.com/method/fql.query?format=json&query=SELECT%%20application_id%%20FROM%%20developer%%20WHERE%%20developer_id%%20=%%20%s&access_token=%s" % (fb_profile["id"], access_token) ) apps = json.loads(urllib2.urlopen(url).read()) for app in apps: if app["application_id"] == APP_ID: is_admin = True break except Exception as e: logger.error(e) logger.debug("Admin status: %s" % is_admin) try: fb_user = FacebookUser.objects.get(uid=fb_profile["id"]) # update access token if it's changed if fb_user.access_token is not access_token: fb_user.access_token = access_token fb_user.save() # TODO: decide whether to use the following try/catch from upstream or stick with previous 3 lines # update access token if old one doesn't work # try: # graph = facebook.GraphAPI(fb_user.access_token) # graph = graph.get_object('me') # except Exception,e: # fb_user.access_token = access_token # fb_user.save() user = fb_user.user # save if either value has changed if user.is_staff is not is_admin or user.is_superuser is not is_admin: user.is_staff = is_admin user.is_superuser = is_admin user.save() except FacebookUser.DoesNotExist as e: logger.debug("%s" % e) try: email = fb_profile["email"] except: email = fb_profile["id"] + "@dummyfbemail.com" username = fb_profile["name"] # we need a unique User created. Otherwise another user might be able # to change his or her username to someone else's FB ID, thereby causing # this script to crash and preventing that FB user from registering. unique = False while not unique: try: User.objects.get(username=username) d = datetime.now() username = re.sub(r"[-:.]", "", d.isoformat()) except User.DoesNotExist: unique = True user = User( username=username, email=email, first_name=fb_profile["first_name"], last_name=fb_profile["last_name"] ) user.set_unusable_password() user.is_staff = is_admin user.is_superuser = is_admin user.save() fb_user = FacebookUser( user=user, uid=str(fb_profile["id"]), name=fb_profile["name"], access_token=access_token, url=fb_profile["link"], ) fb_user.save() return fb_user
from models import Session, FacebookUser session = Session() import csv with open('eecs professors.csv') as f: reader = csv.reader(f) for row in reader: if not row[0] and row[1]: continue user = session.query(FacebookUser).filter_by(uid=row[1]).first() if not user: user = FacebookUser(uid=row[1], username=row[0], name=row[2]) user.created_at = datetime.datetime.now() session.add(user) print user.name, "created" else: print user.name, "exists" user.data = "todo" user.nu = 1 session.commit()