Create folder if it doesn't exist

This commit is contained in:
Antonio J. Delgado 2024-11-11 17:10:56 +02:00
parent e340b7ff0e
commit be674aa74f

View file

@ -96,7 +96,6 @@ class NextcloudHandler:
elif os.environ.get('NEXTCLOUD_SSL_MODE') == 'skip': elif os.environ.get('NEXTCLOUD_SSL_MODE') == 'skip':
self.ssl = False self.ssl = False
self.details = params.get('details') or False
self.x_api_session = None self.x_api_session = None
self.host = params.get('host') or os.environ.get('NEXTCLOUD_HOST') self.host = params.get('host') or os.environ.get('NEXTCLOUD_HOST')
@ -243,6 +242,7 @@ class NextcloudHandler:
def get(self, path): def get(self, path):
'''Do a GET request''' '''Do a GET request'''
self.debug({ "action": "get", "message": "Requesting {path}" })
try: try:
r = requests.get( r = requests.get(
f'{self.http}://{self.host}/{path}', f'{self.http}://{self.host}/{path}',
@ -251,6 +251,9 @@ class NextcloudHandler:
) )
if r.status_code == 200: if r.status_code == 200:
self.debug(
{"action": "get", "status_code": r.status_code, "size": len(r.content)}
)
return r.json() return r.json()
if r.status_code == 404: if r.status_code == 404:
self.error( self.error(
@ -277,6 +280,7 @@ class NextcloudHandler:
"error": error "error": error
} }
) )
sys.exit(5)
return None return None
def propfind(self, path): def propfind(self, path):
@ -597,7 +601,7 @@ class NextcloudHandler:
return folder.get('id') return folder.get('id')
return None return None
def get_password(self, name): def get_password(self, name, details):
'''Get a password''' '''Get a password'''
r = self.list_passwords() r = self.list_passwords()
ret = [] ret = []
@ -606,7 +610,7 @@ class NextcloudHandler:
item_key = self.keychain['keys'].get(item['cseKey']) item_key = self.keychain['keys'].get(item['cseKey'])
if item_key: if item_key:
if decrypt_item(item_key, item, 'label') == name: if decrypt_item(item_key, item, 'label') == name:
if self.details: if details:
item['password'] = decrypt_item(item_key, item, 'password') item['password'] = decrypt_item(item_key, item, 'password')
item['url'] = decrypt_item(item_key, item, 'url') item['url'] = decrypt_item(item_key, item, 'url')
item['username'] = decrypt_item(item_key, item, 'username') item['username'] = decrypt_item(item_key, item, 'username')
@ -618,7 +622,7 @@ class NextcloudHandler:
ret.append(decrypt_item(item_key, item, 'password')) ret.append(decrypt_item(item_key, item, 'password'))
else: else:
if item['label'] == name: if item['label'] == name:
if self.details: if details:
ret.append(item) ret.append(item)
else: else:
ret.append(item['password']) ret.append(item['password'])
@ -640,8 +644,11 @@ class NextcloudHandler:
def create_password(self, post_obj): def create_password(self, post_obj):
'''Create/add a password''' '''Create/add a password'''
if 'folder' in post_obj: if 'folder' in post_obj and post_obj['folder']:
post_obj['folder'] = self.get_folder_id(post_obj['folder']) folder_id = self.get_folder_id(post_obj['folder'])
if not folder_id:
folder_id = self.create_passwords_folder(post_obj['folder'])['id']
post_obj['folder'] = folder_id
if not 'username' in post_obj: if not 'username' in post_obj:
post_obj['username'] = '' post_obj['username'] = ''
if not 'url' in post_obj: if not 'url' in post_obj:
@ -810,7 +817,6 @@ class NcPasswordClient:
"api_token": api_token, "api_token": api_token,
"cse_password": cse_password, "cse_password": cse_password,
"timeout": timeout, "timeout": timeout,
"details": True,
} }
self.nc = NextcloudHandler(params) self.nc = NextcloudHandler(params)
@ -828,7 +834,7 @@ class NcPasswordClient:
def info(self, obj): def info(self, obj):
'''Show information''' '''Show information'''
self.info( self._log.info(
json.dumps(obj, indent=2) json.dumps(obj, indent=2)
) )
@ -838,9 +844,9 @@ class NcPasswordClient:
json.dumps(obj, indent=2) json.dumps(obj, indent=2)
) )
def get_password(self, name): def get_password(self, name, details):
'''Get a single password''' '''Get a single password'''
self.info(self.nc.get_password(name)) self.info(self.nc.get_password(name, details))
def list_passwords(self): def list_passwords(self):
'''List all passwords''' '''List all passwords'''
@ -1011,11 +1017,17 @@ def cli(ctx, debug_level, log_file, host, user, api_token, cse_password, timeout
@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(
'--details', '-D',
is_flag=True,
default=False,
help='Show all details of the password or just the password (False)'
)
@click_config_file.configuration_option() @click_config_file.configuration_option()
@click.pass_context @click.pass_context
def show(ctx, name): def show(ctx, name, details):
'''Show a single password''' '''Show a single password'''
ctx.obj['NcPasswordClient'].get_password(name) ctx.obj['NcPasswordClient'].get_password(name, details)
@cli.command() @cli.command()
@click_config_file.configuration_option() @click_config_file.configuration_option()