def get(self): if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) # elif not distributors.Distributor_authorized(self.request.headers['X-SecondLife-Owner-Key']): # logging.info("Illegal attempt to request an item from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) # self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) else: #should be newline-delimited, token=value # lines = self.request.body.split('\n') # params = {} # for line in lines: # params[line.split('=')[0]] = line.split('=')[1] try: recordID = int(self.request.get('id')) record = Purchases.get_by_id(recordID) if record is None: #could not find item to look up its deliverer. return an error logging.error('Error, Paid record %s not found. Requested by %s using %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(404) return elif record.item_reciver == self.request.headers['X-SecondLife-Owner-Key']: rcpt = record.item_reciver name = record.item self.response.out.write(tools.httpin_delivery(self, rcpt, name, record.key().id())) else: logging.error('Error, Paid record %s found but requested by %s using %s and it is set for %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], record.item_reciver)) self.error(403) except KeyError: logging.error('Key error for paid PUT gift receive vendor %s, queue entry: %s|%s %s' % (self.request.headers['X-SecondLife-Object-Key'], rcpt, name, sys.exc_info())) self.error(403)
def get(self): if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) # elif not distributors.Distributor_authorized(self.request.headers['X-SecondLife-Owner-Key']): # logging.info("Illegal attempt to request an item from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) # self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) else: #should be newline-delimited, token=value # lines = self.request.body.split('\n') # params = {} # for line in lines: # params[line.split('=')[0]] = line.split('=')[1] try: recordID = int(self.request.get('id')) record = Purchases.get_by_id(recordID) if record is None: #could not find item to look up its deliverer. return an error logging.error( 'Error, Paid record %s not found. Requested by %s using %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(404) return elif record.item_reciver == self.request.headers[ 'X-SecondLife-Owner-Key']: rcpt = record.item_reciver name = record.item self.response.out.write( tools.httpin_delivery(self, rcpt, name, record.key().id())) else: logging.error( 'Error, Paid record %s found but requested by %s using %s and it is set for %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], record.item_reciver)) self.error(403) except KeyError: logging.error( 'Key error for paid PUT gift receive vendor %s, queue entry: %s|%s %s' % (self.request.headers['X-SecondLife-Object-Key'], rcpt, name, sys.exc_info())) self.error(403)
def put(self): #check linden IP and allowed avs if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) elif not distributors.Distributor_authorized(self.request.headers['X-SecondLife-Owner-Key']): logging.info("Illegal attempt to request an item from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.error(403) elif not db.WRITE_CAPABILITY.is_enabled(): self.response.set_status(503) self.response.headders['Retry-After'] = 120 logging.info("Told that the db was down for maintenance to %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.response.out.write('Currently down for maintenance') else: #populate a dictionary with what we've been given in post #should be newline-delimited, token=value lines = self.request.body.split('\n') params = {} for line in lines: params[line.split('=')[0]] = line.split('=')[1] try: recordID = int(params['id']) record = Purchases.get_by_id(recordID) if record is None: #could not find item to look up its deliverer. return an error logging.error('Error, Paid record %s not found. Requested by %s using %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(403) return #else: record.item_reciver = record.purchaser record.accounted = "0" record.put() rcpt = record.purchaser name = record.item self.response.out.write(tools.httpin_delivery(self, rcpt, name, record.key().id())) except KeyError: logging.error('Key error for paid PUT vendor tran id %s, queue entry: %s|%s %s' % (recordID, rcpt, name, sys.exc_info())) self.error(403)
def post(self): #check linden IP and allowed avs if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) elif not distributors.Contributor_authorized(self.request.headers['X-SecondLife-Owner-Key']): logging.info("Illegal attempt to request redeliver from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.error(403) #don't need this for redelivery # elif not db.WRITE_CAPABILITY.is_enabled(): # self.response.set_status(503) # self.response.headders['Retry-After'] = 120 # logging.info("Told that the db was down for maintenance to %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) # self.response.out.write('Currently down for maintenance') else: #populate a dictionary with what we've been given in post #should be newline-delimited, token=value lines = self.request.body.split('\n') params = {} for line in lines: params[line.split('=')[0]] = line.split('=')[1] try: rcpt = str(params['rcpt']) item_name = params['objname'] query = Purchases.all(keys_only=True) query.filter('item_reciver =', rcpt) query.filter('item =', item_name) if query.count(1): self.response.out.write(tools.httpin_delivery(self, rcpt, item_name, "")) # token = 'paid_item_%s' % item_name # cacheditem = memcache.get(token) # if cacheditem is None: # paiditem = FreebieItem.gql("WHERE freebie_name = :1", item_name).get() # if paiditem is None: # #could not find item to look up its deliverer. return an error # logging.error('Error, Paid item %s not found yet was found before. Requested by %s using %s.' % (item_name, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) # self.error(503) # return # else: # item = {"name":paiditem.freebie_name, "version":paiditem.freebie_version, "giver":paiditem.freebie_giver, "givers":paiditem.givers, "giver":paiditem.freebie_giver, "baseprice":paiditem.baseprice} # memcache.set(token, yaml.safe_dump(item)) # else: # #pull the item's details out of the yaml'd dict # item = yaml.safe_load(cacheditem) # name_version = "%s - %s" % (item_name, item['version']) # if item['givers'] == []: # logging.error('Error, Paid item %s does not have http urls.' % (name)) # self.error(503) # return # urls = item['givers'] # #need to add a way to rotate the urls # url_token = 'url_%s' % item_name # url_num = memcache.incr(url_token, initial_value=0) # url_num = url_num % ((len(urls)/2)) # # count_token = 'item_count_%s' % item_name # memcache.incr(count_token, initial_value=0) # #need to send itme here # result = urlfetch.fetch(urls[url_num*2-1], method="POST", payload="%s|%s" % (name_version, rcpt) , headers={}, deadline = 10) # if result.content == "sent": # self.response.out.write('sent|%s|%s' % (rcpt, name_version))#do we need all of this? # else: # url_num = memcache.incr(url_token, initial_value=0) # url_num = url_num % ((len(urls)/2)) # #need to send itme here # result = urlfetch.fetch(urls[url_num*2-1], method="POST", payload="%s|%s" % (name_version, rcpt) , headers={}, deadline = 10) # if result.content == "sent": # self.response.out.write('sent|%s|%s' % (rcpt, name_version))#do we need all of this? # else: # logging.error('Error, Paid item %s did not get sent. Status %s Message from vendor: %s' % (name_version, result.status_code, result.content)) # self.error(503) else: logging.error('Error, %s has no record of paid item %s yet redelvier requested it.' % (rcpt, item_name)) self.error(404) except KeyError: logging.error('Key error for paid redeliver vendor %s, queue entry: %s|%s %s' % (self.request.headers['X-SecondLife-Object-Key'], rcpt, item_name, sys.exc_info())) self.error(403)
def post(self): #check linden IP and allowed avs if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) elif not distributors.Contributor_authorized( self.request.headers['X-SecondLife-Owner-Key']): logging.info( "Illegal attempt to request redeliver from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.error(403) #don't need this for redelivery # elif not db.WRITE_CAPABILITY.is_enabled(): # self.response.set_status(503) # self.response.headders['Retry-After'] = 120 # logging.info("Told that the db was down for maintenance to %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) # self.response.out.write('Currently down for maintenance') else: #populate a dictionary with what we've been given in post #should be newline-delimited, token=value lines = self.request.body.split('\n') params = {} for line in lines: params[line.split('=')[0]] = line.split('=')[1] try: rcpt = str(params['rcpt']) item_name = params['objname'] query = Purchases.all(keys_only=True) query.filter('item_reciver =', rcpt) query.filter('item =', item_name) if query.count(1): self.response.out.write( tools.httpin_delivery(self, rcpt, item_name, "")) # token = 'paid_item_%s' % item_name # cacheditem = memcache.get(token) # if cacheditem is None: # paiditem = FreebieItem.gql("WHERE freebie_name = :1", item_name).get() # if paiditem is None: # #could not find item to look up its deliverer. return an error # logging.error('Error, Paid item %s not found yet was found before. Requested by %s using %s.' % (item_name, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) # self.error(503) # return # else: # item = {"name":paiditem.freebie_name, "version":paiditem.freebie_version, "giver":paiditem.freebie_giver, "givers":paiditem.givers, "giver":paiditem.freebie_giver, "baseprice":paiditem.baseprice} # memcache.set(token, yaml.safe_dump(item)) # else: # #pull the item's details out of the yaml'd dict # item = yaml.safe_load(cacheditem) # name_version = "%s - %s" % (item_name, item['version']) # if item['givers'] == []: # logging.error('Error, Paid item %s does not have http urls.' % (name)) # self.error(503) # return # urls = item['givers'] # #need to add a way to rotate the urls # url_token = 'url_%s' % item_name # url_num = memcache.incr(url_token, initial_value=0) # url_num = url_num % ((len(urls)/2)) # # count_token = 'item_count_%s' % item_name # memcache.incr(count_token, initial_value=0) # #need to send itme here # result = urlfetch.fetch(urls[url_num*2-1], method="POST", payload="%s|%s" % (name_version, rcpt) , headers={}, deadline = 10) # if result.content == "sent": # self.response.out.write('sent|%s|%s' % (rcpt, name_version))#do we need all of this? # else: # url_num = memcache.incr(url_token, initial_value=0) # url_num = url_num % ((len(urls)/2)) # #need to send itme here # result = urlfetch.fetch(urls[url_num*2-1], method="POST", payload="%s|%s" % (name_version, rcpt) , headers={}, deadline = 10) # if result.content == "sent": # self.response.out.write('sent|%s|%s' % (rcpt, name_version))#do we need all of this? # else: # logging.error('Error, Paid item %s did not get sent. Status %s Message from vendor: %s' % (name_version, result.status_code, result.content)) # self.error(503) else: logging.error( 'Error, %s has no record of paid item %s yet redelvier requested it.' % (rcpt, item_name)) self.error(404) except KeyError: logging.error( 'Key error for paid redeliver vendor %s, queue entry: %s|%s %s' % (self.request.headers['X-SecondLife-Object-Key'], rcpt, item_name, sys.exc_info())) self.error(403)
def put(self): #check linden IP and allowed avs if lindenip.inrange(os.environ['REMOTE_ADDR']) != 'Production': self.error(403) elif self.request.headers['X-SecondLife-Shard'] != 'Production': logging.warning("Attempt while on beta grid %s" % (self.request.headers['X-SecondLife-Shard'])) self.response.set_status(305) elif not distributors.Distributor_authorized( self.request.headers['X-SecondLife-Owner-Key']): logging.info( "Illegal attempt to request an item from %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.error(403) elif not db.WRITE_CAPABILITY.is_enabled(): self.response.set_status(503) self.response.headders['Retry-After'] = 120 logging.info( "Told that the db was down for maintenance to %s, box %s located in %s at %s" % (self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'], self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position'])) self.response.out.write('Currently down for maintenance') else: #populate a dictionary with what we've been given in post #should be newline-delimited, token=value lines = self.request.body.split('\n') params = {} for line in lines: params[line.split('=')[0]] = line.split('=')[1] try: recordID = int(params['id']) record = Purchases.get_by_id(recordID) if record is None: #could not find item to look up its deliverer. return an error logging.error( 'Error, Paid record %s not found. Requested by %s using %s.' % (recordID, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(403) return #else: record.item_reciver = record.purchaser record.accounted = "0" record.put() rcpt = record.purchaser name = record.item self.response.out.write( tools.httpin_delivery(self, rcpt, name, record.key().id())) except KeyError: logging.error( 'Key error for paid PUT vendor tran id %s, queue entry: %s|%s %s' % (recordID, rcpt, name, sys.exc_info())) self.error(403)