def response_load_gateway_by_type_and_id(gateway_type, gateway_id): """ Given a gateway's numeric type and ID, load it from the datastore. """ if gateway_id == None: # invalid header return (None, 403, None) gateway_read_start = storagetypes.get_time() gateway = storage.read_gateway(gateway_id) if gateway is None: # not present return (None, 404, None) if GATEWAY_TYPE_TO_STR.get(gateway.gateway_type) == None: # bad type (shouldn't happen) return (None, 400, None) if GATEWAY_TYPE_TO_STR[gateway.gateway_type] != gateway_type: # caller has the wrong type return (None, 401, None) gateway_read_time = storagetypes.get_time() - gateway_read_start return (gateway, 200, gateway_read_time)
def response_load_gateway_by_type_and_id( gateway_type, gateway_id ): """ Given a gateway's numeric type and ID, load it from the datastore. """ if gateway_id == None: # invalid header return (None, 403, None) gateway_read_start = storagetypes.get_time() gateway = storage.read_gateway( gateway_id ) if gateway is None: # not present return (None, 404, None) if GATEWAY_TYPE_TO_STR.get( gateway.gateway_type ) == None: # bad type (shouldn't happen) return (None, 400, None) if GATEWAY_TYPE_TO_STR[ gateway.gateway_type ] != gateway_type: # caller has the wrong type return (None, 401, None) gateway_read_time = storagetypes.get_time() - gateway_read_start return (gateway, 200, gateway_read_time)
def get(self, volume_id_str, volume_cert_version_str, gateway_type_str, gateway_name_or_id, gateway_cert_version_str): volume_cert_version = 0 gateway_cert_version = 0 try: gateway_cert_version = int(gateway_cert_version_str) volume_cert_version = int(volume_cert_version_str) except: response_end(self, 400, "Invalid Request", "text/plain") return # get the Volume volume, status, _ = response_load_volume(self, volume_id_str) if status != 200 or volume == None: return # get the gateway if gateway_type_str not in ["UG", "RG", "AG"]: logging.error("Invalid gateway type '%s'" % gateway_type_str) response_user_error(self, 401) return gateway = storage.read_gateway(gateway_name_or_id) if gateway == None: logging.error("No such Gateway named %s" % (gateway_name_or_id)) response_user_error(self, 404) return for type_str, type_id in zip( ["UG", "RG", "AG"], [GATEWAY_TYPE_UG, GATEWAY_TYPE_RG, GATEWAY_TYPE_AG]): if gateway_type_str == type_str and gateway.gateway_type != type_id: logging.error("No such %s named %s" % (gateway_type_str, gateway_name_or_id)) response_user_error(self, 404) return # request only the right version if volume_cert_version != volume.cert_version or gateway_cert_version != gateway.cert_version: hdr = "%s/CERT/%s/%s/%s/%s/%s" % ( MS_URL, volume_id_str, volume.cert_version, gateway_type_str, gateway_name_or_id, gateway.cert_version) self.response.headers['Location'] = hdr response_end(self, 302, "Location: %s" % hdr, "text/plain") return # generate the certificate gateway_cert = ms_pb2.ms_gateway_cert() volume.protobuf_gateway_cert(gateway_cert, gateway, need_closure=True) data = gateway_cert.SerializeToString() response_end(self, 200, data, "application/octet-stream") return
def get( self, volume_id_str, volume_cert_version_str, gateway_type_str, gateway_name_or_id, gateway_cert_version_str ): volume_cert_version = 0 gateway_cert_version = 0 try: gateway_cert_version = int( gateway_cert_version_str ) volume_cert_version = int( volume_cert_version_str ) except: response_end( self, 400, "Invalid Request", "text/plain" ) return # get the Volume volume, status, _ = response_load_volume( self, volume_id_str ) if status != 200 or volume == None: return # get the gateway if gateway_type_str not in ["UG", "RG", "AG"]: logging.error("Invalid gateway type '%s'" % gateway_type_str ) response_user_error( self, 401 ) return gateway = storage.read_gateway( gateway_name_or_id ) if gateway == None: logging.error("No such Gateway named %s" % (gateway_name_or_id)) response_user_error( self, 404 ) return for type_str, type_id in zip( ["UG", "RG", "AG"], [GATEWAY_TYPE_UG, GATEWAY_TYPE_RG, GATEWAY_TYPE_AG] ): if gateway_type_str == type_str and gateway.gateway_type != type_id: logging.error("No such %s named %s" % (gateway_type_str, gateway_name_or_id)) response_user_error( self, 404 ) return # request only the right version if volume_cert_version != volume.cert_version or gateway_cert_version != gateway.cert_version: hdr = "%s/CERT/%s/%s/%s/%s/%s" % (MS_URL, volume_id_str, volume.cert_version, gateway_type_str, gateway_name_or_id, gateway.cert_version) self.response.headers['Location'] = hdr response_end( self, 302, "Location: %s" % hdr, "text/plain" ) return # generate the certificate gateway_cert = ms_pb2.ms_gateway_cert() volume.protobuf_gateway_cert( gateway_cert, gateway, need_closure=True ) data = gateway_cert.SerializeToString() response_end( self, 200, data, "application/octet-stream" ) return
def read_gateway(name): """ Read a gateway. Positional arguments: name (str): The name of the desired gateway. Returns: On success, the gateway data. Raises an exception on error. Authorization: An administrator can read any gateway. A user can only read gateways (s)he owns. """ return storage.read_gateway(name)
def register_load_gateway( gateway_type_str, gateway_name ): """ Load up a Gateway from the datastore. Return the status to be sent back, and the gateway """ # get the gateway if gateway_type_str not in ["UG", "RG", "AG"]: logging.error("Invalid gateway type '%s'" % gateway_type_str ) return (401, None) gateway = storage.read_gateway( gateway_name ) if gateway == None: logging.error("No such Gateway named %s" % (gateway_name)) return (404, None) for type_str, type_id in zip( ["UG", "RG", "AG"], [GATEWAY_TYPE_UG, GATEWAY_TYPE_RG, GATEWAY_TYPE_AG] ): if gateway_type_str == type_str and gateway.gateway_type != type_id: logging.error("No such %s named %s" % (gateway_type_str, gateway_name)) return (404, None) return (200, gateway)
def register_load_gateway(gateway_type_str, gateway_name): """ Load up a Gateway from the datastore. Return the status to be sent back, and the gateway """ # get the gateway if gateway_type_str not in ["UG", "RG", "AG"]: logging.error("Invalid gateway type '%s'" % gateway_type_str) return (401, None) gateway = storage.read_gateway(gateway_name) if gateway == None: logging.error("No such Gateway named %s" % (gateway_name)) return (404, None) for type_str, type_id in zip( ["UG", "RG", "AG"], [GATEWAY_TYPE_UG, GATEWAY_TYPE_RG, GATEWAY_TYPE_AG]): if gateway_type_str == type_str and gateway.gateway_type != type_id: logging.error("No such %s named %s" % (gateway_type_str, gateway_name)) return (404, None) return (200, gateway)