def _upgrade_phantom_into(phantom_data, target_data): """Attempt to merge a phantom user into a target user. Will bail if any signs that the target user has previous activity. """ # First make sure user has 0 points and phantom user has some activity if (phantom_data and phantom_data.points > 0): if phantom_data.consume_identity(target_data): # Phantom user just converted into a real user. user_counter.add(1) # Clear all "login" notifications UserNotifier.clear_all(phantom_data) return True return False
def get(self): cont = self.request_string('continue', default = "/") # Immediately after login we make sure this user has a UserData entity user_data = UserData.current() if user_data: # Update email address if it has changed current_google_user = users.get_current_user() if current_google_user and current_google_user.email() != user_data.email: user_data.user_email = current_google_user.email() user_data.put() # Update nickname if it has changed current_nickname = get_nickname_for(user_data) if user_data.user_nickname != current_nickname: user_data.user_nickname = current_nickname user_data.put() # Set developer and moderator to True if user is admin if (not user_data.developer or not user_data.moderator) and users.is_current_user_admin(): user_data.developer = True user_data.moderator = True user_data.put() # If user is brand new and has 0 points, migrate data phantom_id = get_phantom_user_id_from_cookies() if phantom_id: phantom_data = UserData.get_from_db_key_email(phantom_id) # First make sure user has 0 points and phantom user has some activity if user_data.points == 0 and phantom_data and phantom_data.points > 0: # Make sure user has no students if not user_data.has_students(): # Clear all "login" notifications UserNotifier.clear_all(phantom_data) # Update phantom user_data to real user_data phantom_data.user_id = user_data.user_id phantom_data.current_user = user_data.current_user phantom_data.user_email = user_data.user_email phantom_data.user_nickname = user_data.user_nickname if phantom_data.put(): # Phantom user was just transitioned to real user user_counter.add(1) user_data.delete() cont = "/newaccount?continue=%s" % cont else: # If nobody is logged in, clear any expired Facebook cookie that may be hanging around. self.delete_cookie("fbsr_" + App.facebook_app_id) self.delete_cookie("fbs_" + App.facebook_app_id) logging.critical("Missing UserData during PostLogin, with id: %s, cookies: (%s), google user: %s" % ( util.get_current_user_id(), os.environ.get('HTTP_COOKIE', ''), users.get_current_user() ) ) # Always delete phantom user cookies on login self.delete_cookie('ureg_id') self.redirect(cont)