Add migration between instances

This commit is contained in:
Antonio J. Delgado 2025-01-04 14:35:51 +02:00
parent 1db8d586f6
commit c90144b20e

View file

@ -1214,12 +1214,17 @@ class NcPasswordClient:
'nc_password_client.log' 'nc_password_client.log'
) )
self._init_log() self._init_log()
self.timeout = timeout
self.cache_duration = cache_duration
self.https_proxy = https_proxy
self.output_format = output_format
self.field_replacements = field_replacements
params = { params = {
"host": host, "host": host,
"user": user, "user": user,
"api_token": api_token, "api_token": api_token,
"cse_password": cse_password, "cse_password": cse_password,
"timeout": timeout, "timeout": self.timeout,
"cache_duration": cache_duration, "cache_duration": cache_duration,
"https_proxy": https_proxy, "https_proxy": https_proxy,
"logger": self._log, "logger": self._log,
@ -1227,6 +1232,7 @@ class NcPasswordClient:
"field_replacements": field_replacements, "field_replacements": field_replacements,
} }
self.nc = NextcloudHandler(params) self.nc = NextcloudHandler(params)
self.destination_nc = None
def _safer_obj(self, obj, fields=None): def _safer_obj(self, obj, fields=None):
if fields is None: if fields is None:
@ -1609,6 +1615,31 @@ class NcPasswordClient:
) )
return True return True
def migrate_passwords(
self,
destination_host,
destination_user,
destination_api_token,
destination_cse_password
):
'''Migrate passwords from one NextCloud instance to another'''
params = {
"host": destination_host,
"user": destination_user,
"api_token": destination_api_token,
"cse_password": destination_cse_password,
"timeout": self.timeout,
"cache_duration": self.cache_duration,
"https_proxy": self.https_proxy,
"logger": self._log,
"output_format": self.output_format,
"field_replacements": self.field_replacements,
}
self.destination_nc = NextcloudHandler(params)
for password in self.nc.list_passwords():
self.destination_nc.create_password(password, update=True)
return True
def _init_log(self): def _init_log(self):
''' Initialize log object ''' ''' Initialize log object '''
self._log = logging.getLogger("nc_password_client") self._log = logging.getLogger("nc_password_client")
@ -1707,6 +1738,37 @@ def cli(
timeout, cache_duration, https_proxy, output_format, field_replacements timeout, cache_duration, https_proxy, output_format, field_replacements
) )
@cli.command()
@click.option(
'--destination-host', '-D',
required=True,
help='Destination host'
)
@click.option(
'--destination-user', '-U',
required=True,
help='Destination host user name'
)
@click.option(
'--destination-api-token', '-A',
required=True,
help="Destination host user's API token "
)
@click.option(
'--destination-cse-password', '-C',
help='Destination Nextcloud host user\'s end-to-end encryption password'
)
@click_config_file.configuration_option()
@click.pass_context
def migrate_passwords(ctx, destination_host, destination_user, destination_api_token, destination_cse_password):
'''Migrate passwords between two NextCloud Password instances'''
ctx.obj['NcPasswordClient'].migrate_passwords(
destination_host,
destination_user,
destination_api_token,
destination_cse_password
)
@cli.command() @cli.command()
@click.option('--name', '-n', required=True, help='Name of the password to show') @click.option('--name', '-n', required=True, help='Name of the password to show')
@click.option( @click.option(