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 )
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 )
def write_volume_pubkey( volume_name, metadata_pubkey ): return storage.write_file( volume_pubkey_path( volume_name ), metadata_pubkey, volume=None )
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 ) # -------------------------------------
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...
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)