Example #1
0
def write_gateway_port( gateway_port ):
   name_path = storage.local_path( GATEWAY_STORAGE_DIR, "gateway_port" )
   return storage.write_file( name_path, "%s" % gateway_port, volume=None )
Example #2
0
def write_gateway_name( gateway_name ):
   name_path = storage.local_path( GATEWAY_STORAGE_DIR, "gateway_name" )
   return storage.write_file( name_path, gateway_name, volume=None )
Example #3
0
def write_volume_pubkey( volume_name, metadata_pubkey ):
   return storage.write_file( volume_pubkey_path( volume_name ), metadata_pubkey, volume=None )
Example #4
0
   privkey_str = keys.decrypt_private_key( encrypted_privkey, password )

   return privkey_str

# -------------------------------------
def write_gateway_privkey( password, gateway_name, gateway_privkey_str ):
   encrypted_data = keys.encrypt_private_key( gateway_privkey_str, password )
   try:
      encrypted_data_json = storage.tuple_to_json( encrypted_data )
   except Exception, e:
      log.exception(e)
      log.error("Failed to serialize encrypted private gateway key" )
      return None
   
   path = gateway_privkey_path( gateway_name )
   return storage.write_file( path, encrypted_data_json, volume=None )

# -------------------------------------
def delete_gateway_privkey( gateway_name ):
   return storage.erase_file( gateway_privkey_path( gateway_name ), volume=None )

# -------------------------------------
def read_volume_pubkey( volume_name, prefix=None ):
   # support prefix, since sometimes this can be called before storage is initialized
   if prefix is None:
      prefix = "/"
   
   pubkey_path = storage.path_join(prefix, volume_pubkey_path( volume_name ))
   return storage.read_file( pubkey_path, volume=None )

# -------------------------------------
Example #5
0
   return load_private_key_from_path( key_path, password )


#-------------------------
def store_private_key_to_path( key_path, privkey, password, volume ):
   privkey_str = privkey.exportKey()
   
   encrypted_private_key = encrypt_private_key( privkey_str, password )

   try:
      encrypted_privkey_json = storage.tuple_to_json( encrypted_private_key )
   except Exception, e:
      log.error("Failed to serialize encrypted private key")
      return False
   
   rc = storage.write_file( key_path, encrypted_privkey_json, volume=volume )
   
   return rc
   
   
#-------------------------
def store_private_key( key_name, privkey, password ):
   # ensure the path exists...
   global PRIVATE_STORAGE_DIR
   key_path = make_key_local_path( key_name )
   return store_private_key_to_path( key_path, privkey, password, None )


#-------------------------
def store_private_key_to_volume( key_name, privkey, password, num_downloads, duration, volume ):
   # ensure the path exists...
Example #6
0
def update_repo(storage, sign):
    filelists = {}
    primary = {}
    revision = "0"

    if storage.exists('repodata/repomd.xml'):
        data = storage.read_file('repodata/repomd.xml')

        filelists, primary, revision = parse_repomd(data)

        data = storage.read_file(filelists['location'])
        filelists = parse_filelists(gunzip_string(data))

        data = storage.read_file(primary['location'])
        primary = parse_primary(gunzip_string(data))

    recorded_files = set()
    for package in primary.values():
        recorded_files.add((package['location'], float(package['file_time'])))

    existing_files = set()
    expr = r'^.*\.rpm$'
    for file_path in storage.files('.'):
        match = re.match(expr, file_path)

        if not match:
            continue

        mtime = storage.mtime(file_path)

        existing_files.add((file_path, mtime))

    files_to_add = existing_files - recorded_files

    for file_to_add in files_to_add:
        file_path = file_to_add[0]
        mtime = file_to_add[1]
        print("Adding: '%s'" % file_path)

        tmpdir = tempfile.mkdtemp()
        storage.download_file(file_path, os.path.join(tmpdir, 'package.rpm'))

        rpminfo = rpmfile.RpmInfo()
        header = rpminfo.parse_file(os.path.join(tmpdir, 'package.rpm'))
        sha256 = file_checksum(os.path.join(tmpdir, 'package.rpm'), "sha256")

        statinfo = os.stat(os.path.join(tmpdir, 'package.rpm'))
        size = statinfo.st_size

        shutil.rmtree(tmpdir)

        nerv, prim = header_to_primary(header, sha256, mtime, file_path,
                                       rpminfo.header_start, rpminfo.header_end,
                                       size)
        _, flist = header_to_filelists(header, sha256)

        primary[nerv] = prim
        filelists[nerv] = flist

    revision = str(int(revision) + 1)

    filelists_str = dump_filelists(filelists)
    primary_str = dump_primary(primary)

    repomd_str = generate_repomd(filelists_str, primary_str, revision)

    filelists_gz = gzip_string(filelists_str)
    primary_gz = gzip_string(primary_str)
    filelists_gz_sha256 = string_checksum(filelists_gz, 'sha256')
    primary_gz_sha256 = string_checksum(primary_gz, 'sha256')
    filelists_name = 'repodata/%s-filelists.xml.gz' % filelists_gz_sha256
    primary_name = 'repodata/%s-primary.xml.gz' % primary_gz_sha256

    storage.write_file(filelists_name, filelists_gz)
    storage.write_file(primary_name, primary_gz)
    storage.write_file('repodata/repomd.xml', repomd_str)

    if sign:
        repomd_str_signed = gpg_sign_string(repomd_str)
        storage.write_file('repodata/repomd.xml.asc', repomd_str_signed)