Exemplo n.º 1
0
	def post(self,*args,**kwargs):
		try:
			twitter_id				= kwargs.get('remoteID',None)
			twitter_token			= kwargs.get('remoteToken',None)
			twitter_token_secret	= kwargs.get('remoteTokenSecret',None)
			
			
			logging.debug('\n\n{}\n{}\n{}\n\n'.format(
											twitter_id,
											twitter_token,
											twitter_token_secret
											)
						)
			user = levr.Customer.all().filter('twitter_id',twitter_id).get()
			logging.debug(user)
			if user:
				#fallback to login
				logging.debug('User exists!')
				response = {
						'user':api_utils.package_user(user,True,send_token=True)
						}
			else:
				#create new user
				user = social.Twitter(
									twitter_id = twitter_id
									)
				try:
					user, new_user_details, new_friends = user.first_time_connect(
													twitter_id			= twitter_id,
													twitter_token			= twitter_token,
													twitter_token_secret	= twitter_token_secret
													)
				except Exception,e:
					levr.log_error()
					assert False, 'Could not connect with twitter. '.format('')
				#return the user
				response = {
						'user':api_utils.package_user(user,True,send_token=True),
						'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
						'new_user_details'	: new_user_details
						}
			try:
				if user.display_name == 'Jason K.':
					from google.appengine.api import mail
					mail.send_mail(sender="*****@*****.**",
					to="*****@*****.**",
					subject="Signup",
					body='Jason signed up')
				else:
					levr.text_notify(user.display_name+' from Twitter!')
			except:
				levr.log_error()
				
				
			api_utils.send_response(self,response,user)
Exemplo n.º 2
0
    def post(self, *args, **kwargs):
        try:
            twitter_id = kwargs.get('remoteID', None)
            twitter_token = kwargs.get('remoteToken', None)
            twitter_token_secret = kwargs.get('remoteTokenSecret', None)

            logging.debug('\n\n{}\n{}\n{}\n\n'.format(twitter_id,
                                                      twitter_token,
                                                      twitter_token_secret))
            user = levr.Customer.all().filter('twitter_id', twitter_id).get()
            logging.debug(user)
            if user:
                #fallback to login
                logging.debug('User exists!')
                response = {
                    'user': api_utils.package_user(user, True, send_token=True)
                }
            else:
                #create new user
                user = social.Twitter(twitter_id=twitter_id)
                try:
                    user, new_user_details, new_friends = user.first_time_connect(
                        twitter_id=twitter_id,
                        twitter_token=twitter_token,
                        twitter_token_secret=twitter_token_secret)
                except Exception, e:
                    levr.log_error()
                    assert False, 'Could not connect with twitter. '.format('')
                #return the user
                response = {
                    'user': api_utils.package_user(user, True,
                                                   send_token=True),
                    'new_friends': [enc.encrypt_key(f) for f in new_friends],
                    'new_user_details': new_user_details
                }
            try:
                if user.display_name == 'Jason K.':
                    from google.appengine.api import mail
                    mail.send_mail(sender="*****@*****.**",
                                   to="*****@*****.**",
                                   subject="Signup",
                                   body='Jason signed up')
                else:
                    levr.text_notify(user.display_name + ' from Twitter!')
            except:
                levr.log_error()

            api_utils.send_response(self, response, user)
Exemplo n.º 3
0
	def get(self,*args,**kwargs):
		'''
		#PARTIALLY RESTRICTED
		inputs:
		Output:{
			meta:{
				success
				errorMsg
				}
			response:{
				<USER OBJECT>
				}
		'''
		try:
			logging.debug('USER INFO\n\n')
			user 	= kwargs.get('user')
			private	= kwargs.get('private')
			#create response object
			response = {
					'user'	: api_utils.package_user(user,private)
					}
			
			#respond
			api_utils.send_response(self,response,user)
		except:
			levr.log_error(self.request)
			api_utils.send_error(self,'Server Error')
Exemplo n.º 4
0
    def get(self, *args, **kwargs):
        '''
		#PARTIALLY RESTRICTED
		inputs:
		Output:{
			meta:{
				success
				errorMsg
				}
			response:{
				<USER OBJECT>
				}
		'''
        try:
            logging.debug('USER INFO\n\n')
            user = kwargs.get('user')
            private = kwargs.get('private')
            #create response object
            response = {'user': api_utils.package_user(user, private)}

            #respond
            api_utils.send_response(self, response, user)
        except:
            levr.log_error(self.request)
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 5
0
	def post(self,*args,**kwargs):
		#RESTRICTED
		try:
			#check token
			facebook_token	= kwargs.get('remoteToken',None)
			
#			user = levr.Customer.all().filter('facebook_id',facebook_id).get()
			
			user = social.Facebook(None,'verbose',facebook_token=facebook_token)
			try:
				new_user, new_user_details, new_friends = user.first_time_connect(
											facebook_token	= facebook_token,
											)
			except Exception,e:
				levr.log_error()
				assert False, 'Could not connect with facebook.'
			
			#return the user
			response = {
					'user':api_utils.package_user(new_user,True,send_token=True),
					'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
					'new_user_details'	: new_user_details
					}
			
			try:
				levr.text_notify(new_user.display_name + 'from Facebook')
			except:
				levr.log_error()
			
			api_utils.send_response(self,response,new_user)
Exemplo n.º 6
0
    def post(self, *args, **kwargs):
        #RESTRICTED
        try:
            #check token
            facebook_token = kwargs.get('remoteToken', None)

            #			user = levr.Customer.all().filter('facebook_id',facebook_id).get()

            user = social.Facebook(None,
                                   'verbose',
                                   facebook_token=facebook_token)
            try:
                new_user, new_user_details, new_friends = user.first_time_connect(
                    facebook_token=facebook_token, )
            except Exception, e:
                levr.log_error()
                assert False, 'Could not connect with facebook.'

            #return the user
            response = {
                'user': api_utils.package_user(new_user, True,
                                               send_token=True),
                'new_friends': [enc.encrypt_key(f) for f in new_friends],
                'new_user_details': new_user_details
            }

            try:
                levr.text_notify(new_user.display_name + 'from Facebook')
            except:
                levr.log_error()

            api_utils.send_response(self, response, new_user)
Exemplo n.º 7
0
    def post(self, *args, **kwargs):
        try:
            #RESTRICTED
            logging.debug('CONNECT TWITTER\n\n\n')
            logging.debug(kwargs)

            user = kwargs.get('actor')
            twitter_token = kwargs.get('remoteToken')
            twitter_token_secret = kwargs.get('remoteTokenSecret')
            twitter_id = kwargs.get('remoteID')
            #			development = kwargs.get('development')

            user = social.Twitter(user, 'verbose')

            try:
                user, new_user_details, new_friends = user.first_time_connect(
                    twitter_id=twitter_id,
                    twitter_token=twitter_token,
                    twitter_token_secret=twitter_token_secret)
            except Exception, e:
                levr.log_error(e)
                assert False, 'Could not connect with foursquare. '.format('')

            #return the user
            response = {
                'user': api_utils.package_user(user, True),
                'new_friends': [enc.encrypt_key(f) for f in new_friends],
                'new_user_details': new_user_details
            }
            api_utils.send_response(self, response, user)
Exemplo n.º 8
0
    def post(self, *args, **kwargs):
        try:
            #RESTRICTED
            user = kwargs.get('actor', None)
            facebook_token = kwargs.get('remoteToken', None)

            user = social.Facebook(user, 'verbose')

            try:
                user, new_user_details, new_friends = user.first_time_connect(
                    facebook_token=facebook_token, )
            except Exception, e:
                levr.log_error()
                assert False, 'Could not connect with facebook.'

            logging.debug(levr.log_model_props(user))
            logging.debug(str(new_user_details))

            #return the user
            response = {
                'user': api_utils.package_user(user, True),
                'new_friends': [enc.encrypt_key(f) for f in new_friends],
                'new_user_details': new_user_details
            }
            api_utils.send_response(self, response, user)
Exemplo n.º 9
0
	def post(self,*args,**kwargs):
		try:
			#RESTRICTED
			user			= kwargs.get('actor',None)
			facebook_token	= kwargs.get('remoteToken',None)
			
			user = social.Facebook(user,'verbose')
			
			try:
				user, new_user_details, new_friends = user.first_time_connect(
											facebook_token	= facebook_token,
											)
			except Exception,e:
				levr.log_error()
				assert False, 'Could not connect with facebook.'
			
			logging.debug(levr.log_model_props(user))
			logging.debug(str(new_user_details))
			
			#return the user
			response = {
					'user':api_utils.package_user(user,True),
					'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
					'new_user_details'	: new_user_details
					}
			api_utils.send_response(self,response,user)
Exemplo n.º 10
0
	def post(self,*args,**kwargs):
		try:
			#RESTRICTED
			logging.debug('CONNECT TWITTER\n\n\n')
			logging.debug(kwargs)
			
			user		= kwargs.get('actor')
			twitter_token	= kwargs.get('remoteToken')
			twitter_token_secret = kwargs.get('remoteTokenSecret')
			twitter_id	= kwargs.get('remoteID')
#			development = kwargs.get('development')
			
			user = social.Twitter(user,'verbose')
			
			try:
				user, new_user_details, new_friends = user.first_time_connect(
												twitter_id			= twitter_id,
												twitter_token			= twitter_token,
												twitter_token_secret	= twitter_token_secret
												)
			except Exception,e:
				levr.log_error(e)
				assert False, 'Could not connect with foursquare. '.format('')
			
			#return the user
			response = {
					'user':api_utils.package_user(user,True),
					'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
					'new_user_details'	: new_user_details
					}
			api_utils.send_response(self,response,user)
Exemplo n.º 11
0
	def get(self,*args,**kwargs):
		try:
			logging.info('Reporting for dudty, Captain')
			#grabthe user from the input
			user = kwargs.get('actor')
			
			
			
			try:
				data = api_utils.SpoofUndeadNinjaActivity(user).run()
				logging.debug(levr.log_dict(data))
				#set last login
				user = data['user']
			except:
				levr.log_error()
				
			user.date_last_login = datetime.now()
#			logging.debug(user.date_last_login)
			user.put()
			response = {'user':api_utils.package_user(user,True)}
			api_utils.send_response(self,response,user)
			
			
		except:
			levr.log_error()
			api_utils.send_error(self,'Server Error')
Exemplo n.º 12
0
	def post(self,*args,**kwargs):
		try:
			#check token
			foursquare_token = kwargs.get('remoteToken',None)
			
			user = levr.Customer.all().filter('foursquare_token',foursquare_token).get()
			if user:
				#fallback to login
				response = {
						'user':api_utils.package_user(user,True,send_token=True)
						}
			else:
				#===============================================================
				# NOTE: there is a remote chance that the users foursquare oauth_token would change.
				# this would not recognize that
				#===============================================================
				
				
				try:
					#create new user
					user = social.Foursquare(
										foursquare_token = foursquare_token
										)
					user, new_user_details, new_friends = user.first_time_connect(
													foursquare_token = foursquare_token,
													)
				except Exception,e:
					levr.log_error()
					assert False, 'Could not connect with foursquare. '.format('')
				#return the user
				response = {
						'user':api_utils.package_user(user,True,send_token=True),
						'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
						'new_user_details'	: new_user_details
						}
			try:
				levr.text_notify(user.display_name+' from Foursquare!')
			except:
				levr.log_error()
				
			api_utils.send_response(self,response,user)
Exemplo n.º 13
0
    def get(self, *args, **kwargs):
        '''
		A user logs in with levr using an email or alias, and a password
		'''
        try:
            #RESTRICTED
            logging.debug('LOGIN LEVR\n\n\n')
            logging.debug(kwargs)

            email_or_owner = kwargs.get('email_or_owner')
            pw = kwargs.get('pw')
            pw = enc.encrypt_password(pw)

            #check both email and password

            r_email = levr.Customer.gql('WHERE email = :1 AND pw=:2',
                                        email_or_owner, pw).get()
            r_alias = levr.Customer.gql('WHERE alias = :1 AND pw=:2',
                                        email_or_owner, pw).get()
            if r_email:
                #match based on email
                existing_user = r_email
            elif r_alias:
                #match based on alias
                existing_user = r_alias
            else:
                api_utils.send_error(self, 'Authentication failed.')
                return

            #create or refresh the alias
            existing_user = levr.build_display_name(existing_user)

            #===================================================================
            # Spoof Ninja Activity!
            #===================================================================

            data = api_utils.SpoofUndeadNinjaActivity(existing_user).run()
            logging.debug(levr.log_dict(data))
            #set last login
            existing_user = data['user']
            #still here? update last login by putting
            existing_user.put()

            #package user, private setting, send token
            response = {
                'user':
                api_utils.package_user(existing_user, True, send_token=True)
            }

            api_utils.send_response(self, response, existing_user)
        except:
            levr.log_error()
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 14
0
    def post(self, *args, **kwargs):
        try:
            #check token
            foursquare_token = kwargs.get('remoteToken', None)

            user = levr.Customer.all().filter('foursquare_token',
                                              foursquare_token).get()
            if user:
                #fallback to login
                response = {
                    'user': api_utils.package_user(user, True, send_token=True)
                }
            else:
                #===============================================================
                # NOTE: there is a remote chance that the users foursquare oauth_token would change.
                # this would not recognize that
                #===============================================================

                try:
                    #create new user
                    user = social.Foursquare(foursquare_token=foursquare_token)
                    user, new_user_details, new_friends = user.first_time_connect(
                        foursquare_token=foursquare_token, )
                except Exception, e:
                    levr.log_error()
                    assert False, 'Could not connect with foursquare. '.format(
                        '')
                #return the user
                response = {
                    'user': api_utils.package_user(user, True,
                                                   send_token=True),
                    'new_friends': [enc.encrypt_key(f) for f in new_friends],
                    'new_user_details': new_user_details
                }
            try:
                levr.text_notify(user.display_name + ' from Foursquare!')
            except:
                levr.log_error()

            api_utils.send_response(self, response, user)
Exemplo n.º 15
0
	def get(self,*args,**kwargs):
		'''
		A user logs in with levr using an email or alias, and a password
		'''
		try:
			#RESTRICTED
			logging.debug('LOGIN LEVR\n\n\n')
			logging.debug(kwargs)
			
			email_or_owner = kwargs.get('email_or_owner')
			pw = kwargs.get('pw')
			pw = enc.encrypt_password(pw)
			
			
			#check both email and password
			
			r_email = levr.Customer.gql('WHERE email = :1 AND pw=:2',email_or_owner,pw).get()
			r_alias  = levr.Customer.gql('WHERE alias = :1 AND pw=:2',email_or_owner,pw).get()
			if r_email:
				#match based on email
				existing_user = r_email
			elif r_alias:
				#match based on alias
				existing_user = r_alias
			else:
				api_utils.send_error(self,'Authentication failed.')
				return
			
			#create or refresh the alias
			existing_user = levr.build_display_name(existing_user)
			
			#===================================================================
			# Spoof Ninja Activity!
			#===================================================================
			
			data = api_utils.SpoofUndeadNinjaActivity(existing_user).run()
			logging.debug(levr.log_dict(data))
			#set last login
			existing_user = data['user']
			#still here? update last login by putting
			existing_user.put()
			
			#package user, private setting, send token
			response = {'user':api_utils.package_user(existing_user,True,send_token=True)}
			
			api_utils.send_response(self,response,existing_user)
		except:
			levr.log_error()
			api_utils.send_error(self,'Server Error')
Exemplo n.º 16
0
    def post(self, *args, **kwargs):
        try:
            #RESTRICTED
            logging.debug('CONNECT FOURSQUARE\n\n\n')
            logging.debug(kwargs)

            user = kwargs.get('actor')
            foursquare_token = kwargs.get('remoteToken')
            new_user_details = None
            new_friends = None
            #===================================================================
            # Check to see if there are multiple accounts
            # i.e. the user that is connecting w/ foursquare has an existing fs account with levr
            #===================================================================
            # check for an existing foursquare user
            foursquare_user = levr.Customer.all().filter(
                'foursquare_token', foursquare_token).get()
            # If a user was found in the db with the requested foursquare credentials,
            # and that user is not the same user as the one requesting the connection,
            # merge the foursquare created account into the requesting user (i.e. the levr account user)
            if foursquare_user and foursquare_user is not user:
                #this means the user has multiple accounts that need to be merged
                data = api_utils.merge_customer_info_from_B_into_A(
                    user, foursquare_user, 'foursquare')
                user = data[0]
            # Otherwise, act normally. Simply connect. If the user already has foursquare credentials,
            # this will refresh their foursquare information
            else:
                #create an instance of the Foursquare social connection class
                user = social.Foursquare(user, 'verbose')

                try:
                    user, new_user_details, new_friends = user.first_time_connect(
                        foursquare_token=foursquare_token)
                except Exception, e:
                    levr.log_error()
                    assert False, 'Could not connect with foursquare. '.format(
                        '')

            response = {
                'user': api_utils.package_user(user, True)
                #					'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
                #					'new_user_details'	: new_user_details
            }
            if new_user_details:
                response['new_user_details'] = new_user_details
            if new_friends: response['new_friends'] = new_friends
            api_utils.send_response(self, response, user)
Exemplo n.º 17
0
	def post(self,*args,**kwargs):
		#RESTRICTED
		try:
			logging.debug(kwargs)
			email = kwargs.get('email',None)
			alias = kwargs.get('alias',None)
			pw = kwargs.get('pw',None)
			
			'''Check availability of username+pass, create and login if not taken'''
			#check availabilities
			r_email = levr.Customer.gql('WHERE email = :1',email).get()
			r_alias  = levr.Customer.gql('WHERE alias = :1',alias).get()
			
			#if taken, send error
			if r_email:
				api_utils.send_error(self,'That email is already registered.')
				return
			if r_alias:
				api_utils.send_error(self,'That alias is already registered.')
				return
			
			#still here? create a customer, then.
			user = levr.create_new_user(
									email=email,
									alias=alias,
									pw=enc.encrypt_password(pw))
			#put and reply
			
			#create or refresh the alias
			user = levr.build_display_name(user)
			
			try:
				levr.text_notify(user.display_name+' from Levr!')
			except:
				levr.log_error()
			
			
			#put and reply
			user.put()
			
			
			response = {'user':api_utils.package_user(user,True,send_token=True)}
			api_utils.send_response(self,response,user)
		except:
			levr.log_error()
			api_utils.send_error(self,'Server Error')
Exemplo n.º 18
0
	def post(self,*args,**kwargs):
		try:
			#RESTRICTED
			logging.debug('CONNECT FOURSQUARE\n\n\n')
			logging.debug(kwargs)
			
			user				= kwargs.get('actor')
			foursquare_token	= kwargs.get('remoteToken')
			new_user_details	= None
			new_friends			= None
			#===================================================================
			# Check to see if there are multiple accounts
			# i.e. the user that is connecting w/ foursquare has an existing fs account with levr
			#===================================================================
			# check for an existing foursquare user
			foursquare_user = levr.Customer.all().filter('foursquare_token',foursquare_token).get()
			# If a user was found in the db with the requested foursquare credentials, 
			# and that user is not the same user as the one requesting the connection, 
			# merge the foursquare created account into the requesting user (i.e. the levr account user)
			if foursquare_user and foursquare_user is not user:
				#this means the user has multiple accounts that need to be merged
				data = api_utils.merge_customer_info_from_B_into_A(user,foursquare_user,'foursquare')
				user = data[0]
			# Otherwise, act normally. Simply connect. If the user already has foursquare credentials, 
			# this will refresh their foursquare information
			else:
				#create an instance of the Foursquare social connection class
				user = social.Foursquare(user,'verbose')
				
				try:
					user, new_user_details, new_friends = user.first_time_connect(
													foursquare_token = foursquare_token
													)
				except Exception,e:
					levr.log_error()
					assert False, 'Could not connect with foursquare. '.format('')
			
			response = {
					'user'				: api_utils.package_user(user,True)
#					'new_friends'		: [enc.encrypt_key(f) for f in new_friends],
#					'new_user_details'	: new_user_details
					}
			if new_user_details: response['new_user_details'] = new_user_details
			if new_friends: response['new_friends'] = new_friends
			api_utils.send_response(self,response,user)
Exemplo n.º 19
0
    def get(self, *args, **kwargs):
        '''
		Get all of a users followers
		
		#RESTRICTED
		inputs:
		Output:{
			meta:{
				success
				errorMsg
				}
			response:{
				followers:[
					<USER OBJECT>
					]
				}
		'''
        try:
            logging.info('GET USER FOLLOWERS\n\n\n')
            logging.debug(kwargs)
            user = kwargs.get('user')
            #			uid 	= user.key()
            private = kwargs.get('private')
            #			limit 	= kwargs.get('limit')
            #			offset 	= kwargs.get('offset')

            #PERFORM ACTIONS

            #package each follower into <USER OBJECT>
            followers = [
                api_utils.package_user(u)
                for u in levr.Customer.get(user.followers)
            ]
            logging.debug(followers)

            response = {
                'numResults': followers.__len__(),
                'followers': followers
            }
            #respond
            api_utils.send_response(self, response, user)
        except:
            levr.log_error()
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 20
0
    def post(self, *args, **kwargs):
        #RESTRICTED
        try:
            logging.debug(kwargs)
            email = kwargs.get('email', None)
            alias = kwargs.get('alias', None)
            pw = kwargs.get('pw', None)
            '''Check availability of username+pass, create and login if not taken'''
            #check availabilities
            r_email = levr.Customer.gql('WHERE email = :1', email).get()
            r_alias = levr.Customer.gql('WHERE alias = :1', alias).get()

            #if taken, send error
            if r_email:
                api_utils.send_error(self, 'That email is already registered.')
                return
            if r_alias:
                api_utils.send_error(self, 'That alias is already registered.')
                return

            #still here? create a customer, then.
            user = levr.create_new_user(email=email,
                                        alias=alias,
                                        pw=enc.encrypt_password(pw))
            #put and reply

            #create or refresh the alias
            user = levr.build_display_name(user)

            try:
                levr.text_notify(user.display_name + ' from Levr!')
            except:
                levr.log_error()

            #put and reply
            user.put()

            response = {
                'user': api_utils.package_user(user, True, send_token=True)
            }
            api_utils.send_response(self, response, user)
        except:
            levr.log_error()
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 21
0
	def get(self,*args,**kwargs):
		'''
		Get all of a users followers
		
		#RESTRICTED
		inputs:
		Output:{
			meta:{
				success
				errorMsg
				}
			response:{
				followers:[
					<USER OBJECT>
					]
				}
		'''
		try:
			logging.info('GET USER FOLLOWERS\n\n\n')
			logging.debug(kwargs)
			user 	= kwargs.get('user')
#			uid 	= user.key()
			private = kwargs.get('private')
#			limit 	= kwargs.get('limit')
#			offset 	= kwargs.get('offset')
			
			
			
			#PERFORM ACTIONS
			
			#package each follower into <USER OBJECT>
			followers = [api_utils.package_user(u) for u in levr.Customer.get(user.followers)]
			logging.debug(followers)
			
			response = {
					'numResults'	: followers.__len__(),
					'followers'		: followers
					}
			#respond
			api_utils.send_response(self,response,user)
		except:
			levr.log_error()
			api_utils.send_error(self,'Server Error')
Exemplo n.º 22
0
    def get(self, *args, **kwargs):
        '''
		Get all of a users uploaded deals
		
		inputs: limit(optional), offset(optional)
		response:{
			deal: <DEAL OBJECT>
			}
		'''
        try:
            logging.info("\n\nGET USER UPLOADS")
            logging.debug(kwargs)
            user = kwargs.get('user')
            uid = user.key()
            private = kwargs.get('private')
            limit = kwargs.get('limit')
            offset = kwargs.get('offset')

            #grab all deals that are owned by the specified customer
            deals = levr.Deal.all().ancestor(uid).fetch(limit, offset=offset)

            #package up the dealios
            packaged_deals = [
                api_utils.package_deal(deal, private) for deal in deals
            ]

            #package the user object
            packaged_user = api_utils.package_user(user, private)

            #create response object
            response = {
                'numResults': str(packaged_deals.__len__()),
                'deals': packaged_deals,
                'user': packaged_user
            }

            #respond
            api_utils.send_response(self, response, user)
        except:
            levr.log_error()
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 23
0
	def get(self,*args,**kwargs):
		'''
		Get all of a users uploaded deals
		
		inputs: limit(optional), offset(optional)
		response:{
			deal: <DEAL OBJECT>
			}
		'''
		try:
			logging.info("\n\nGET USER UPLOADS")
			logging.debug(kwargs)
			user 	= kwargs.get('user')
			uid 	= user.key()
			private = kwargs.get('private')
			limit 	= kwargs.get('limit')
			offset 	= kwargs.get('offset')
			
			#grab all deals that are owned by the specified customer
			deals = levr.Deal.all().ancestor(uid).fetch(limit,offset=offset)
			
			#package up the dealios
			packaged_deals = [api_utils.package_deal(deal,private) for deal in deals]
			
			#package the user object
			packaged_user = api_utils.package_user(user,private)
			
			#create response object
			response = {
					'numResults': str(packaged_deals.__len__()),
					'deals'		: packaged_deals,
					'user'		: packaged_user
					}
			
			#respond
			api_utils.send_response(self,response,user)
		except:
			levr.log_error()
			api_utils.send_error(self,'Server Error')
Exemplo n.º 24
0
    def get(self, *args, **kwargs):
        try:
            logging.info('Reporting for dudty, Captain')
            #grabthe user from the input
            user = kwargs.get('actor')

            try:
                data = api_utils.SpoofUndeadNinjaActivity(user).run()
                logging.debug(levr.log_dict(data))
                #set last login
                user = data['user']
            except:
                levr.log_error()

            user.date_last_login = datetime.now()
            #			logging.debug(user.date_last_login)
            user.put()
            response = {'user': api_utils.package_user(user, True)}
            api_utils.send_response(self, response, user)

        except:
            levr.log_error()
            api_utils.send_error(self, 'Server Error')
Exemplo n.º 25
0
	def get(self,*args,**kwargs):
		try:
			contentID = args[0]
			
			#spoof the contentID
			#contentID='85ff49d2dcb94b99973c5a2b16c5df36'
			
			#grab the associated floating content
			floating_content	=	levr.FloatingContent.gql('WHERE contentID=:1',contentID).get()
			
			action = floating_content.action
			response = {'action':action}
			
			
			
			if action == 'upload':
				business = floating_content.business
				assert business, 'Business could not be found'
				#echo back the business
				response.update({'business':api_utils.package_business(business)})
			elif action == 'deal':
				deal = floating_content.deal
				assert deal,'Deal could not be found'
				#echo bcak the deal
				packaged_deals = [api_utils.package_deal(deal)]
				response.update({'deals':packaged_deals})
			
			
			user = floating_content.user
			assert user, 'Could not find user'
			#respond, and include levr_token
			response.update({'user':api_utils.package_user(user,send_token=True)})
			
			api_utils.send_response(self,response)
		except AssertionError,e:
			levr.log_error(e)
			api_utils.send_error(self,e.message)
Exemplo n.º 26
0
    def get(self, *args, **kwargs):
        try:
            contentID = args[0]

            #spoof the contentID
            #contentID='85ff49d2dcb94b99973c5a2b16c5df36'

            #grab the associated floating content
            floating_content = levr.FloatingContent.gql(
                'WHERE contentID=:1', contentID).get()

            action = floating_content.action
            response = {'action': action}

            if action == 'upload':
                business = floating_content.business
                assert business, 'Business could not be found'
                #echo back the business
                response.update(
                    {'business': api_utils.package_business(business)})
            elif action == 'deal':
                deal = floating_content.deal
                assert deal, 'Deal could not be found'
                #echo bcak the deal
                packaged_deals = [api_utils.package_deal(deal)]
                response.update({'deals': packaged_deals})

            user = floating_content.user
            assert user, 'Could not find user'
            #respond, and include levr_token
            response.update(
                {'user': api_utils.package_user(user, send_token=True)})

            api_utils.send_response(self, response)
        except AssertionError, e:
            levr.log_error(e)
            api_utils.send_error(self, e.message)
Exemplo n.º 27
0
    def post(self, *args, **kwargs):  #@UnusedVariable
        '''
		Checks for existing account with that business
		If the account exists, return true
		
		@attention: Only handles the case where a single account is tied to no more than one business
		
		@keyword email: required
		@keyword password: required
		@keyword business_name: required
		@keyword vicinity: required
		@keyword geo_point: required
		@keyword types: require
		@keyword development: optional
		
		@return: packaged_user with levrToken, packaged_business
		'''
        # for invalid credential responses
        user_doesnt_own_business_message = 'User does not own that business'
        # for packaging
        private = True
        followers = False

        # input values
        email = kwargs.get('email')
        password = kwargs.get('pw')
        business_name = kwargs.get('businessName')
        vicinity = kwargs.get('vicinity')
        geo_point = kwargs.get('geoPoint')
        types = kwargs.get('types')
        development = kwargs.get(
            'development', False
        )  # TODO: switch this to False by default when changing to live
        phone_number = kwargs.get('phoneNumber', '')
        try:
            # Convert input data
            password = enc.encrypt_password(password)
            types = types.split(',')

            logging.debug('{}\n{}\n{}\n{}'.format(repr(business_name),
                                                  repr(vicinity), geo_point,
                                                  repr(types)))

            # check for existing entities
            user = levr.Customer.all().filter('email', email).get()
            requested_business = levr.Business.all().filter(
                'business_name', business_name).filter('vicinity',
                                                       vicinity).get()

            if user:
                logging.info('User exists')
                # check password
                assert user.pw == password, 'Password does not match username'

                # user should have a business
                try:
                    business = user.businesses.get()
                    # if the user has a business, it should be the business that was requested
                    assert business, 'User does not own any businesses yet'
                except:
                    logging.debug(
                        'user does not have a business yet - create one')
                    # if the user does not have a business yet, add this one.
                    business = levr.create_new_business(business_name,
                                                        vicinity,
                                                        geo_point,
                                                        types,
                                                        phone_number,
                                                        owner=user)
#					assert False, user_doesnt_own_business_message
                else:
                    logging.debug('User owns a business')


#					logging.debug(levr.log_model_props(business.owner))
#					logging.debug(levr.log_model_props(requested_business.owner))
#					if requested_business:
#						assert business.key() == requested_business.key(), user_doesnt_own_business_message
            else:
                logging.debug('User does not exist. Create a new one!!')
                # Create an account for the user with that business
                user = levr.create_new_user(
                    tester=development,
                    pw=password,
                    email=email,
                    display_name=business_name,
                )
                logging.debug(business_name)
                logging.debug(levr.log_model_props(user))
                if not requested_business:
                    logging.debug('requested business was not found')
                    business = levr.create_new_business(business_name,
                                                        vicinity,
                                                        geo_point,
                                                        types,
                                                        phone_number,
                                                        owner=user)
                else:
                    logging.debug('requested business was found')
                    business = requested_business
                    #
                    business.owner = user
                    business.put()

            logging.debug('business: ' + repr(business))
            #===================================================================
            # # Send message to the founders that someone has signed up for the app
            #===================================================================
            if not development:
                try:
                    from google.appengine.api import mail
                    message = mail.AdminEmailMessage(
                        sender='*****@*****.**',
                        subject='New Merchant',
                    )
                    message.body = levr.log_model_props(
                        user, [
                            'email',
                            'display_name',
                        ])
                    message.body += levr.log_model_props(
                        business, ['business_name', 'vicinity'])
                    message.check_initialized()
                    message.send()

                except:
                    levr.log_error()

            #===================================================================
            # # package and send
            #===================================================================
            packaged_user = api_utils.package_user(user,
                                                   private,
                                                   followers,
                                                   send_token=True)
            packaged_business = api_utils.package_business(business)
            response = {'user': packaged_user, 'business': packaged_business}
            self.send_response(response)
            # TODO: Merchant connect - handle all cases - new and existing accounts
        except AssertionError, e:
            levr.log_error()
            self.send_error(e)
Exemplo n.º 28
0
	def get(self,*args,**kwargs): #@UnusedVariable
		'''
		inputs: lat,lon,limit, query
		response:{
			[string,string]
			}
		/api/search/all?
		lat=42.357632
		&lon=-71.089432
		&limit=50
		&offset=0
		&uid=tAvwdQhJqgEn8hL7fD1phb9z_c-GNGaQXr0fO3GJdErv19TaoeLGNiu51St9sfoYChA=
		&levrToken=7ALUawsTs1R3_z_pK0YTx4cCkpfSFzuDCOM1XQCXWDM
		&latitudeHalfDelta=0.023277
		&longitudeHalfDelta=0.027466
		'''
		try:
			tstart = datetime.now()
			
			logging.debug('SEARCH BY QUERY \n\n\n')
	#		logging.debug(kwargs)
			#GET PARAMS
			logging.info(kwargs)
			#assert False
			geo_point 		= kwargs.get('geoPoint')
#			radius 			= kwargs.get('radius')
#			limit 			= kwargs.get('limit')
			query 			= kwargs.get('query','all')
			development		= kwargs.get('development',False)
			user 			= kwargs.get('actor')
			lon_half_delta	= kwargs.get('longitudeHalfDelta',0)
#			lat_half_delta	= kwargs.get('latitudeHalfDelta')
			
			try:
				logging.info(user.display_name)
			except:
				logging.info('unkown user')
			
			
			times = {}
			search = api_utils.Search(development,user)
			# calc precision
			precision = search.calc_precision_from_half_deltas(geo_point, lon_half_delta)
			# create ghashes
			ghash_list = search.create_ghash_list(geo_point, precision)
			# calc bounding box
			bounding_box = search.calc_bounding_box(ghash_list)
			
			# fetch all deals in the ghash range
			t1 = datetime.now()
			deals = search.fetch_deals(ghash_list)
			times.update({'fetch_deals_time':str(datetime.now() - t1)})
			
			# filter deals by search query
			t1 = datetime.now()
			num_results,accepted_deals= search.filter_deals_by_query(deals, query)
			times.update({'filter_deals_time': str(datetime.now() - t1)})
			
			
			# increment deal views on levr deals
			search.add_deal_views(deals)
			
			# init package time
			if query != 'all' and accepted_deals.__len__() != 0:
				t1 = datetime.now()
				packaged_deals = search.sort_and_package(accepted_deals)
				package_time = datetime.now()-t1
			else:
				# act like a search all, use all deals
				
				# decompose deals by origin
				levr_deals, foursquare_deals = search.filter_deals_by_origin(deals)
				
				if levr_deals.__len__() >5:
					t1 = datetime.now()
					packaged_deals = search.sort_and_package(levr_deals)
					package_time = datetime.now()-t1
				# qualify search results. do we need more?
				else:
					t1 = datetime.now()
					packaged_deals = search.sort_and_package(deals)
					package_time = datetime.now()-t1
					
					# add foursquare deals
					if foursquare_deals.__len__() < 5:
						# search for more foursquare deals
						try:
							# grab search information
							token = search.foursquare_token
							deal_status = search.deal_status
							foursquare_ids = search.get_foursquare_ids(deals)
							
							# make remote call to foursquare
							ft1 = datetime.now()
							new_foursquare_deals = api_utils.search_foursquare(geo_point,token,deal_status,foursquare_ids)
							
							times.update({'foursquare_search_time':str(datetime.now()-ft1)})
							
							# add new foursquare deals
							packaged_deals.extend(new_foursquare_deals)
						except:
							levr.log_error('Error in foursquare call or parsing.')
			times.update({'package_time':package_time})
#			else:
#				params = {
#							'lat'			:	geo_point.lat,
#							'lon'			:	geo_point.lon,
#							'token'			:	token,
#							'foursquare_ids':	foursquare_ids,
#							'deal_status'	:	deal_status
#						}
#				
#				logging.debug('Sending this to the task: ' + json.dumps(params))
#						
#				#start the task
#				taskqueue.add(url='/tasks/searchFoursquareTask',payload=json.dumps(params))
			
			
			
			times.update({'total_time':datetime.now()-tstart})
			
			
			#===================================================================
			# Send response
			#===================================================================
			logging.info(levr.log_dict(times))
			
			times = {key:str(times[key]) for key in times}
			response = {
					'searchPoint'		: str(geo_point),
					'numResults'		: num_results,
					'boundingBox'		: bounding_box,
#					'ending_hashes'		: list(searched_hash_set),
					'num_total_results'		: packaged_deals.__len__(),
					'deals'				: packaged_deals,
					'times'				: times
					}
			try:
				response.update({
								'user' : api_utils.package_user(self.user, True, False)
								})
			except:
				logging.info('user not passed')
			
#			assert False, response
			self.send_response(response)
		except:
			levr.log_error()
			self.send_error()
Exemplo n.º 29
0
    def get(self, *args, **kwargs):  #@UnusedVariable
        '''
		inputs: lat,lon,limit, query
		response:{
			[string,string]
			}
		/api/search/all?
		lat=42.357632
		&lon=-71.089432
		&limit=50
		&offset=0
		&uid=tAvwdQhJqgEn8hL7fD1phb9z_c-GNGaQXr0fO3GJdErv19TaoeLGNiu51St9sfoYChA=
		&levrToken=7ALUawsTs1R3_z_pK0YTx4cCkpfSFzuDCOM1XQCXWDM
		&latitudeHalfDelta=0.023277
		&longitudeHalfDelta=0.027466
		'''
        try:
            tstart = datetime.now()

            logging.debug('SEARCH BY QUERY \n\n\n')
            #		logging.debug(kwargs)
            #GET PARAMS
            logging.info(kwargs)
            #assert False
            geo_point = kwargs.get('geoPoint')
            #			radius 			= kwargs.get('radius')
            #			limit 			= kwargs.get('limit')
            query = kwargs.get('query', 'all')
            development = kwargs.get('development', False)
            user = kwargs.get('actor')
            lon_half_delta = kwargs.get('longitudeHalfDelta', 0)
            #			lat_half_delta	= kwargs.get('latitudeHalfDelta')

            try:
                logging.info(user.display_name)
            except:
                logging.info('unkown user')

            times = {}
            search = api_utils.Search(development, user)
            # calc precision
            precision = search.calc_precision_from_half_deltas(
                geo_point, lon_half_delta)
            # create ghashes
            ghash_list = search.create_ghash_list(geo_point, precision)
            # calc bounding box
            bounding_box = search.calc_bounding_box(ghash_list)

            # fetch all deals in the ghash range
            t1 = datetime.now()
            deals = search.fetch_deals(ghash_list)
            times.update({'fetch_deals_time': str(datetime.now() - t1)})

            # filter deals by search query
            t1 = datetime.now()
            num_results, accepted_deals = search.filter_deals_by_query(
                deals, query)
            times.update({'filter_deals_time': str(datetime.now() - t1)})

            # increment deal views on levr deals
            search.add_deal_views(deals)

            # init package time
            if query != 'all' and accepted_deals.__len__() != 0:
                t1 = datetime.now()
                packaged_deals = search.sort_and_package(accepted_deals)
                package_time = datetime.now() - t1
            else:
                # act like a search all, use all deals

                # decompose deals by origin
                levr_deals, foursquare_deals = search.filter_deals_by_origin(
                    deals)

                if levr_deals.__len__() > 5:
                    t1 = datetime.now()
                    packaged_deals = search.sort_and_package(levr_deals)
                    package_time = datetime.now() - t1
                # qualify search results. do we need more?
                else:
                    t1 = datetime.now()
                    packaged_deals = search.sort_and_package(deals)
                    package_time = datetime.now() - t1

                    # add foursquare deals
                    if foursquare_deals.__len__() < 5:
                        # search for more foursquare deals
                        try:
                            # grab search information
                            token = search.foursquare_token
                            deal_status = search.deal_status
                            foursquare_ids = search.get_foursquare_ids(deals)

                            # make remote call to foursquare
                            ft1 = datetime.now()
                            new_foursquare_deals = api_utils.search_foursquare(
                                geo_point, token, deal_status, foursquare_ids)

                            times.update({
                                'foursquare_search_time':
                                str(datetime.now() - ft1)
                            })

                            # add new foursquare deals
                            packaged_deals.extend(new_foursquare_deals)
                        except:
                            levr.log_error(
                                'Error in foursquare call or parsing.')
            times.update({'package_time': package_time})
            #			else:
            #				params = {
            #							'lat'			:	geo_point.lat,
            #							'lon'			:	geo_point.lon,
            #							'token'			:	token,
            #							'foursquare_ids':	foursquare_ids,
            #							'deal_status'	:	deal_status
            #						}
            #
            #				logging.debug('Sending this to the task: ' + json.dumps(params))
            #
            #				#start the task
            #				taskqueue.add(url='/tasks/searchFoursquareTask',payload=json.dumps(params))

            times.update({'total_time': datetime.now() - tstart})

            #===================================================================
            # Send response
            #===================================================================
            logging.info(levr.log_dict(times))

            times = {key: str(times[key]) for key in times}
            response = {
                'searchPoint': str(geo_point),
                'numResults': num_results,
                'boundingBox': bounding_box,
                #					'ending_hashes'		: list(searched_hash_set),
                'num_total_results': packaged_deals.__len__(),
                'deals': packaged_deals,
                'times': times
            }
            try:
                response.update(
                    {'user': api_utils.package_user(self.user, True, False)})
            except:
                logging.info('user not passed')


#			assert False, response
            self.send_response(response)
        except:
            levr.log_error()
            self.send_error()
Exemplo n.º 30
0
	def post(self,*args,**kwargs): #@UnusedVariable
		'''
		Checks for existing account with that business
		If the account exists, return true
		
		@attention: Only handles the case where a single account is tied to no more than one business
		
		@keyword email: required
		@keyword password: required
		@keyword business_name: required
		@keyword vicinity: required
		@keyword geo_point: required
		@keyword types: require
		@keyword development: optional
		
		@return: packaged_user with levrToken, packaged_business
		'''
		# for invalid credential responses
		user_doesnt_own_business_message = 'User does not own that business'
		# for packaging
		private = True
		followers = False
		
		# input values
		email = kwargs.get('email')
		password = kwargs.get('pw')
		business_name = kwargs.get('businessName')
		vicinity = kwargs.get('vicinity')
		geo_point = kwargs.get('geoPoint')
		types = kwargs.get('types')
		development = kwargs.get('development',False) # TODO: switch this to False by default when changing to live
		phone_number = kwargs.get('phoneNumber','')
		try:
			# Convert input data
			password = enc.encrypt_password(password)
			types = types.split(',')
			
			logging.debug('{}\n{}\n{}\n{}'.format(repr(business_name),repr(vicinity),geo_point,repr(types)))
			
			# check for existing entities
			user = levr.Customer.all().filter('email',email).get()
			requested_business = levr.Business.all().filter('business_name',business_name).filter('vicinity',vicinity).get()
			
			if user:
				logging.info('User exists')
				# check password
				assert user.pw == password, 'Password does not match username'
				
				# user should have a business
				try:
					business = user.businesses.get()
					# if the user has a business, it should be the business that was requested
					assert business, 'User does not own any businesses yet'
				except:
					logging.debug('user does not have a business yet - create one')
					# if the user does not have a business yet, add this one.
					business = levr.create_new_business(business_name,vicinity,geo_point,types,phone_number,
													owner=user
													)
#					assert False, user_doesnt_own_business_message
				else:
					logging.debug('User owns a business')
#					logging.debug(levr.log_model_props(business.owner))
#					logging.debug(levr.log_model_props(requested_business.owner))
#					if requested_business:
#						assert business.key() == requested_business.key(), user_doesnt_own_business_message
			else:
				logging.debug('User does not exist. Create a new one!!')
				# Create an account for the user with that business
				user = levr.create_new_user(
										tester=development,
										pw=password,
										email=email,
										display_name=business_name,
										)
				logging.debug(business_name)
				logging.debug(levr.log_model_props(user))
				if not requested_business:
					logging.debug('requested business was not found')
					business = levr.create_new_business(business_name,vicinity,geo_point,types,phone_number,
													owner=user
													)
				else:
					logging.debug('requested business was found')
					business = requested_business
					# 
					business.owner = user
					business.put()
			
			logging.debug('business: '+repr(business))
			#===================================================================
			# # Send message to the founders that someone has signed up for the app
			#===================================================================
			if not development:
				try:
					from google.appengine.api import mail
					message = mail.AdminEmailMessage(
													sender = '*****@*****.**',
													subject = 'New Merchant',
													)
					message.body = levr.log_model_props(user,['email','display_name',])
					message.body += levr.log_model_props(business,['business_name','vicinity'])
					message.check_initialized()
					message.send()
					
				except:
					levr.log_error()
			
			#===================================================================
			# # package and send
			#===================================================================
			packaged_user = api_utils.package_user(user, private, followers,send_token=True)
			packaged_business = api_utils.package_business(business)
			response = {
					'user' : packaged_user,
					'business' : packaged_business
					}
			self.send_response(response)
			# TODO: Merchant connect - handle all cases - new and existing accounts
		except AssertionError,e:
			levr.log_error()
			self.send_error(e)