Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
    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
Пример #4
0
   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
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)