def record_sent_invites(self, container_user, invitees, brick_description): if not brick_description or brick_description == 'null': raise RuntimeError('no brick_description supplied for record_sent_invites') for index in invitees: # q = Brick.all().filter('brick_description', brick_description) # brick = q.fetch(1) #todo: change to get()? # logging.info('brick desc %s' % brick_description) # logging.info('brick! %s' % brick) key = '%s_%s_%s_%s' % (container_user.domain, container_user.container_user_id, invitees[index], brick_description) invite = Player_invite.get_by_key_name(key) if invite: invite.is_active = True #re-use invite, player sent another from same brick else: invitee_user_key = '%s:%s' % (container_user.domain, invitees[index]) invitee_user = Container_user.get_by_key_name(invitee_user_key) invitee_character = None if invitee_user and invitee_user.character: invitee_character = invitee_user.character invite = Player_invite(key_name = key, inviter_container_user = container_user, inviter_character = container_user.character, domain = container_user.domain, invitee_container_user_id = invitees[index], invitee_container_user = invitee_user, invitee_character = invitee_character, inviter_brick_description = brick_description, invitee_bricks = [], invite_time = datetime.utcnow(), is_active = True, invite_successful = None) invite.put()
def refresh_container_friends(self, container_user): ''' gets container friends via REST API and saves to data store ''' #container_user.friend_ids = self.get_friend_ids_v08(container_user.container_user_id) logging.info('in load container friends, id is %s' % container_user.container_user_id) friends = self.get_friends_v08(container_user.container_user_id) logging.info('friends: %s' % friends) user_friends = set(container_user.friend_ids) simple_users = {} friend_keys = set() for friend in friends['Friends']: domain = 'myspace.com' user_id = str(friend['userId']) user_key = domain + ":" + user_id; user = Container_user.get_by_key_name(user_key) if user == None: logging.debug('user not found at friend %s' % friend) logging.debug('user not found at userid %s' % user_id) #raise Exception('no user? wtf?') user = Container_user(key_name = user_key, display_name = self.make_safe(friend['name']), container_user_id = user_id, domain = domain, profile_url = db.Link(friend['webUri']), profile_image_url = db.Link(friend['largeImage']), character = None) else: if user.character: friend_keys.add(user.character.key()) user.ip_address = "1.2.3.4" if friend.has_key('hasAppInstalled'): user.has_app = friend['hasAppInstalled'] else: user.has_app = False user.friend_ids = [] user.put() user_friends.add(user.container_user_id) simple_user = {} simple_user['user_id'] = user.container_user_id simple_user['domain'] = user.domain simple_user['display_name'] = user.display_name simple_user['has_app'] = user.has_app simple_users[user.container_user_id] = simple_user container_user.friend_ids = list(user_friends) container_user.friend_count = len(user_friends) container_user.put() if container_user.character: container_user.character.friend_count = len(friend_keys) container_user.character.friend_keys = list(friend_keys) container_user.character.put() # todo: popuplate character friends logging.debug('exit container friends') return simple_users #for json serialization
def save_container_friends(self, container_user, friends): ''' takes a list of friends and saves to data store the friend list is gathered by the browser and sent via ajax ''' saved = 0 failed = 0 if not container_user.character: return saved, failed user_friend_ids = set( ) # set(container_user.friend_ids) don't save existing friends character_keys = set() # has_app = db.BooleanProperty() # friend_ids = db.StringListProperty() # character = db.ReferenceProperty(reference_class=Character) for friend in friends.itervalues(): domain = container_user.domain user_id = friend['id'] try: profile_image_url = db.Link(friend['thumbnailUrl']) except Exception, e: logging.debug( 'bad thumbnail url (or no image) for friend: %s' % friend) logging.debug(e) profile_image_url = 'http://static.ak.fbcdn.net/rsrc.php/zBPOE/hash/k9bm7yii.gif' #use facebook no-pic image failed += 1 continue user_key = domain + ":" + user_id user = Container_user.get_by_key_name(user_key) # if not user: # user = Container_user(key_name = user_key, # container_user_id = user_id, # domain = domain, # character = None, # display_name = friend['displayName'], # profile_image_url = profile_image_url) # else: #update existing fields: if user: user.display_name = friend['displayName'] user.profile_image_url = profile_image_url if user.character: character_keys.add( user.character.key() ) #this friend has a character. Add it to the character's friend list if 'profileUrl' in friend: user.profile_url = db.Link(friend['profileUrl']) user.ip_address = "1.2.3.4" if friend.has_key('hasAppInstalled'): user.has_app = friend['hasAppInstalled'] else: user.has_app = False user.friend_ids = [] user.put() user_friend_ids.add(user.container_user_id) saved += 1
def save_container_friends(self, container_user, friends): ''' takes a list of friends and saves to data store the friend list is gathered by the browser and sent via ajax ''' saved = 0 failed = 0 if not container_user.character: return saved, failed user_friend_ids = set() # set(container_user.friend_ids) don't save existing friends character_keys = set() # has_app = db.BooleanProperty() # friend_ids = db.StringListProperty() # character = db.ReferenceProperty(reference_class=Character) for friend in friends.itervalues(): domain = container_user.domain user_id = friend['id'] try: profile_image_url = db.Link(friend['thumbnailUrl']) except Exception, e: logging.debug('bad thumbnail url (or no image) for friend: %s' % friend) logging.debug(e) profile_image_url = 'http://static.ak.fbcdn.net/rsrc.php/zBPOE/hash/k9bm7yii.gif' #use facebook no-pic image failed += 1 continue user_key = domain + ":" + user_id; user = Container_user.get_by_key_name(user_key) # if not user: # user = Container_user(key_name = user_key, # container_user_id = user_id, # domain = domain, # character = None, # display_name = friend['displayName'], # profile_image_url = profile_image_url) # else: #update existing fields: if user: user.display_name = friend['displayName'] user.profile_image_url = profile_image_url if user.character: character_keys.add(user.character.key()) #this friend has a character. Add it to the character's friend list if 'profileUrl' in friend: user.profile_url = db.Link(friend['profileUrl']) user.ip_address = "1.2.3.4" if friend.has_key('hasAppInstalled'): user.has_app = friend['hasAppInstalled'] else: user.has_app = False user.friend_ids = [] user.put() user_friend_ids.add(user.container_user_id) saved += 1
elif domain == 'facebook.com': viewer_info = self.get_facebook_viewer_info(container_user_id) logging.info('facebook profile: %s' % viewer_info) elif domain == 'mock': viewer_info = self.get_mock_viewer_info(container_user_id) domain = viewer_info['domain'] logging.info('mock profile: %s' % viewer_info) else: logging.info('unknown domain - can\'t set viewer info') except Exception, e: logging.info('wtf excep') logging.exception(e) logging.info('looking up container user') logging.debug('trying debug log') container_user_key = domain + ":" + container_user_id container_user = Container_user.get_by_key_name(container_user_key) if container_user: #container user already associated with pyramid user logging.info('found container user, checking for changes') if viewer_info: if 'display_name' in viewer_info and container_user.display_name != viewer_info[ 'display_name']: container_user.display_name = viewer_info['display_name'] if 'profile_image_url' in viewer_info and container_user.profile_image_url != viewer_info[ 'profile_image_url']: container_user.profile_image_url = viewer_info[ 'profile_image_url'] if 'profile_url' in viewer_info and container_user.profile_url != viewer_info[ 'profile_url']:
elif domain == 'facebook.com' : viewer_info = self.get_facebook_viewer_info(container_user_id) logging.info('facebook profile: %s' % viewer_info) elif domain == 'mock' : viewer_info = self.get_mock_viewer_info(container_user_id) domain = viewer_info['domain'] logging.info('mock profile: %s' % viewer_info) else: logging.info('unknown domain - can\'t set viewer info') except Exception, e: logging.info('wtf excep') logging.exception(e) logging.info('looking up container user') logging.debug('trying debug log') container_user_key = domain + ":" + container_user_id container_user = Container_user.get_by_key_name(container_user_key) if container_user: #container user already associated with pyramid user logging.info('found container user, checking for changes') if viewer_info: if 'display_name' in viewer_info and container_user.display_name != viewer_info['display_name']: container_user.display_name = viewer_info['display_name'] if 'profile_image_url' in viewer_info and container_user.profile_image_url != viewer_info['profile_image_url']: container_user.profile_image_url = viewer_info['profile_image_url'] if 'profile_url' in viewer_info and container_user.profile_url != viewer_info['profile_url']: container_user.profile_url = viewer_info['profile_url'] else: #associate container user with pyramid user logging.info('no container user found, creating one')
def refresh_container_friends(self, container_user): ''' gets container friends via REST API and saves to data store ''' #container_user.friend_ids = self.get_friend_ids_v08(container_user.container_user_id) logging.info('in load container friends, id is %s' % container_user.container_user_id) friends = self.get_friends_v08(container_user.container_user_id) logging.info('friends: %s' % friends) user_friends = set(container_user.friend_ids) simple_users = {} friend_keys = set() for friend in friends['Friends']: domain = 'myspace.com' user_id = str(friend['userId']) user_key = domain + ":" + user_id user = Container_user.get_by_key_name(user_key) if user == None: logging.debug('user not found at friend %s' % friend) logging.debug('user not found at userid %s' % user_id) #raise Exception('no user? wtf?') user = Container_user( key_name=user_key, display_name=self.make_safe(friend['name']), container_user_id=user_id, domain=domain, profile_url=db.Link(friend['webUri']), profile_image_url=db.Link(friend['largeImage']), character=None) else: if user.character: friend_keys.add(user.character.key()) user.ip_address = "1.2.3.4" if friend.has_key('hasAppInstalled'): user.has_app = friend['hasAppInstalled'] else: user.has_app = False user.friend_ids = [] user.put() user_friends.add(user.container_user_id) simple_user = {} simple_user['user_id'] = user.container_user_id simple_user['domain'] = user.domain simple_user['display_name'] = user.display_name simple_user['has_app'] = user.has_app simple_users[user.container_user_id] = simple_user container_user.friend_ids = list(user_friends) container_user.friend_count = len(user_friends) container_user.put() if container_user.character: container_user.character.friend_count = len(friend_keys) container_user.character.friend_keys = list(friend_keys) container_user.character.put() # todo: popuplate character friends logging.debug('exit container friends') return simple_users #for json serialization
def offerpal_reward(request, caller_context, container_user, container): logging.info('offerpal deposit request: %s' % request) accountController = AccountController() required_fields = ('id', 'snuid', 'currency', 'verifier') for field in required_fields: if field not in request.GET: return HttpResponse(status=400, content='Missing required field: %s' % field) offerpal_secret_keys = {'orkut.com' : '1174959640013506'} offerpal_id = request.GET['id'] snuid = request.GET['snuid'] amount = int(request.GET['currency']) verifier = request.GET['verifier'] affl = None if 'affl' in request.GET: affl = request.GET['affl'] #optional tracking id error = None if 'error' in request.GET: error = request.GET['error'] base_string = '%s:%s:%d:%s' % (offerpal_id, snuid, amount, offerpal_secret_keys[container]) match_string = md5.new(base_string).hexdigest() success = False found_user = None deposit = None try: deposit = Offerpal_deposit.get_by_key_name(offerpal_id) except: pass if deposit and deposit.success: logging.info('duplicate request %s' % deposit.offerpal_id) response = HttpResponse('Duplicate request, already received id: %s' % offerpal_id) response.status_code = 403 # 403 tells offerpal not to try again return response if match_string != verifier: logging.info('base: %s match: %s verifier: %s' % (base_string, match_string, verifier)) verified = False response = HttpResponse('Authorization Failed.') response.status_code = 401 else: verified = True domain = container container_user_key = domain + ":" + snuid; container_user = Container_user.get_by_key_name(container_user_key) if container_user == None: response = HttpResponse('User Not Found') logging.info('could not look up user %s' % container_user_key) found_user = False response.status_code = 403 # 403 tells offerpal not to try again #todo: log this! send email? else: # log increase, message container_user, notification to container_user response = HttpResponse('offerpal reward for %s user. Reward: %d.' % (container, amount), 'text/html') success = True found_user = True offerpal_deposit = Offerpal_deposit(key_name = offerpal_id, offerpal_id = offerpal_id, snuid = snuid, currency_type = 'gold', deposit_amount = amount, verifier = verifier, verified = verified, found_user = found_user, affl = affl, error = error, response_code = response.status_code, success = success) offerpal_deposit.put() gold_account = Account(parent=offerpal_deposit, key_name=offerpal_id, currency_type='gold', negative_balance_allowed=False, balance=amount) gold_account.put() offerpal_deposit.account = gold_account offerpal_deposit.put() transfer = accountController.transfer_currency_in_txn(offerpal_deposit.account, container_user.character.gold_account, amount) if transfer: try: message = Message(message_type=5, recipient=container_user.character, body="Your Offerpal deposit has posted! You have been credited with %d gold pieces" % amount, pop_message_box = True) message.put() # notify depositor accountController.roll_forward_account_transfer(transfer) except Exception, e: logging.exception(e) logging.warning('failed to roll forward transfer of Offerpal deposit')