def validateRequest(request,type): # validate the key devStoreKey = utils.validateDevKey(request.get('key')) if devStoreKey is None: utils.recordDeveloperRequest(None,utils.GETSTOPS,request.query_string,request.remote_addr,'illegal developer key specified'); return None return devStoreKey
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request,utils.GETROUTES) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(simplejson.dumps(utils.buildErrorResponse('-1','Illegal request parameters'))) return logging.debug('getroutes request... ') if self.request.get('force') is not '': refresh = True else: refresh = False if utils.afterHours() is True: # don't run these jobs during "off" hours json_response = utils.buildErrorResponse('-1','The Metro service is not currently running') else: if refresh is True: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(utils.GETROUTES, json_response) logging.debug('---> storing in memcache'); else: logging.debug('---> memcache hit'); json_response = memcache.get(utils.GETROUTES) if json_response is None: json_response = getRoutes(refresh) # drop it into the memcache again memcache.set(utils.GETROUTES, json_response) logging.debug('---> storing in memcache'); # record the API call for this devkey utils.recordDeveloperRequest(devStoreKey,utils.GETROUTES,self.request.query_string,self.request.remote_addr); #logging.debug('API: json response %s' % json_response); callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + simplejson.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = json_response self.response.out.write(response)
def validateRequest(request): # validate the key devStoreKey = utils.validateDevKey(request.get('key')) if devStoreKey is None: utils.recordDeveloperRequest(None,utils.GETSTOPS,request.query_string,request.remote_addr,'illegal developer key specified'); return None routeID = request.get('routeID') if routeID is None or routeID is '': utils.recordDeveloperRequest(devStoreKey,type,request.query_string,request.remote_addr,'a routeID must be included'); return None return devStoreKey
def get(self): # validate the request parameters devStoreKey = validateRequest(self.request,utils.GETSTOPLOCATION) if devStoreKey is None: logging.debug("unable to validate the request parameters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(simplejson.dumps(utils.buildErrorResponse('-1','Illegal request parameters'))) return # snare the inputs stopID = utils.conformStopID(self.request.get('stopID')) logging.debug('getstoplocation request parameters... stopID %s' % stopID) if utils.afterHours() is True: # don't run these jobs during "off" hours json_response = utils.buildErrorResponse('-1','The Metro service is not currently running') elif stopID is not '': json_response = stopLocationRequest(stopID) utils.recordDeveloperRequest(devStoreKey,utils.GETSTOPS,self.request.query_string,self.request.remote_addr); else: logging.error("API: invalid request") json_response = utils.buildErrorResponse('-1','Invalid Request parameters. Did you forget to include a stpID?') utils.recordDeveloperRequest(devStoreKey,utils.GETSTOPS,self.request.query_string,self.request.remote_addr,'illegal query string combination'); #logging.debug('API: json response %s' % json_response); # encapsulate response in json callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + simplejson.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = simplejson.dumps(json_response) self.response.out.write(response)
def validateRequest(request,type): # validate the key devStoreKey = utils.validateDevKey(request.get('key')) if devStoreKey is None: logging.debug('... illegal developer key %s' % request.get('key')) utils.recordDeveloperRequest(None,utils.GETSTOPS,request.query_string,request.remote_addr,'illegal developer key specified'); return None if type == utils.GETSTOPS: routeID = request.get('routeID') destination = request.get('destination').upper() # a routeID is required if routeID is None or routeID is '': utils.recordDeveloperRequest(devStoreKey,type,request.query_string,request.remote_addr,'a routeID must be included'); return None elif destination is not None and routeID is '': utils.recordDeveloperRequest(devStoreKey,type,request.query_string,request.remote_addr,'if a destination is specified, a routeID must be included'); return None elif type == utils.GETSTOPLOCATION: stopID = utils.conformStopID(request.get('stopID')) if stopID == '' or stopID == '0' or stopID == '00': return None elif type == utils.GETNEARBYSTOPS: lat = request.get('lat') lon = request.get('lon') radius = request.get('radius') # lat/long is required if lat is None or lon is None: utils.recordDeveloperRequest(devStoreKey,type,request.query_string,request.remote_addr,'both latitude and longitude values must be specified'); return None elif radius is not None and radius is not '' and radius > '5000': logging.error('unable to validate getnearbystops call. illegal radius value of %s' % radius) utils.recordDeveloperRequest(devStoreKey,type,request.query_string,request.remote_addr,'radius must be less than 5,000'); return None return devStoreKey
def get(self): if utils.afterHours() is True: # don't run these jobs during "off" hours json_response = utils.buildErrorResponse('-1','The Metro service is not currently running') # validate the request parameters devStoreKey = validateRequest(self.request) if devStoreKey is None: logging.error("failed to validate the request paramters") self.response.headers['Content-Type'] = 'application/javascript' self.response.out.write(simplejson.dumps(utils.buildErrorResponse('-1','Unable to validate the request. There may be an illegal developer key.'))) return # snare the inputs stopID = utils.conformStopID(self.request.get('stopID')) routeID = self.request.get('routeID') vehicleID = self.request.get('vehicleID') logging.debug('getarrivals request parameters... stopID %s routeID %s vehicleID %s' % (stopID,routeID,vehicleID)) if stopID is not '' and routeID is '': json_response = stopRequest(stopID, devStoreKey) utils.recordDeveloperRequest(devStoreKey,utils.GETARRIVALS,self.request.query_string,self.request.remote_addr); elif stopID is not '' and routeID is not '': json_response = stopRouteRequest(stopID, routeID, devStoreKey) utils.recordDeveloperRequest(devStoreKey,utils.GETARRIVALS,self.request.query_string,self.request.remote_addr); elif routeID is not '' and vehicleID is not '': json_response = routeVehicleRequest(routeID, vehicleID, devStoreKey) utils.recordDeveloperRequest(devStoreKey,utils.GETVEHICLE,self.request.query_string,self.request.remote_addr); else: logging.debug("API: invalid request") utils.recordDeveloperRequest(devStoreKey,utils.GETARRIVALS,self.request.query_string,self.request.remote_addr,'illegal query string combination'); json_response = utils.buildErrorResponse('-1','Invalid Request parameters') # encapsulate response in json or jsonp logging.debug('API: json response %s' % json_response); callback = self.request.get('callback') if callback is not '': self.response.headers['Content-Type'] = 'application/javascript' self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Access-Control-Allow-Methods'] = 'GET' response = callback + '(' + simplejson.dumps(json_response) + ');' else: self.response.headers['Content-Type'] = 'application/json' response = simplejson.dumps(json_response) self.response.out.write(response)
def validateRequest(request): # validate the key devStoreKey = utils.validateDevKey(request.get('key')) if devStoreKey is None: utils.recordDeveloperRequest(None,utils.GETARRIVALS,request.query_string,request.remote_addr,'illegal developer key specified'); return None stopID = request.get('stopID') routeID = request.get('routeID') vehicleID = request.get('vehicleID') # give up if someone asked for stop 0, which seems to be popular for some reason logging.debug('validating stopID %s' % stopID); if stopID == '' or stopID is '0' or stopID is '0000': return None # a stopID or routeID is required if stopID is None and routeID is None: utils.recordDeveloperRequest(devStoreKey,utils.GETARRIVALS,request.query_string,request.remote_addr,'either a stopID or a routeID must be included'); return None # the routeID requires either a vehicleID or stopID if routeID is not None: if vehicleID is None and stopID is None: utils.recordDeveloperRequest(devStoreKey,utils.GETARRIVALS,request.query_string,request.remote_addr,'if routeID is specified, either a vehicleID or stopID is required'); return None # the vehicleID requires a routeID if vehicleID is not None: if routeID is None: utils.recordDeveloperRequest(devStoreKey,utils.GETVEHICLE,request.query_string,request.remote_addr,'if a vehicleID is specified, you must include a routeID'); return False # we've noticed some flagrant abuses of the API where the format # of the request parameters are just bogus. check those here if len(stopID) > 4: return None #logging.debug("successfully validated command parameters") return devStoreKey