Add search command

This commit is contained in:
Antonio J. Delgado 2024-11-21 09:44:13 +02:00
parent d15fb5c02e
commit 24ef0b01ea

View file

@ -15,6 +15,7 @@ import json
import sys
import os
import time
import re
import logging
from xml.dom import minidom
import binascii
@ -1291,6 +1292,38 @@ class NcPasswordClient:
)
return True
def search(self, pattern, limit):
'''Search for a password (or passwords) matching in any field the given pattern'''
passwords = self.nc.list_passwords()
if passwords is None:
self.info(
{
"action": "search",
"message": "No passwords obtained"
}
)
return False
count = 0
for password in passwords:
for key in password.keys():
match = re.search(password[key], pattern)
if match:
self.info(
password
)
count += 1
if count >= limit:
return True
self.info(
{
"action": "search",
"message": "No passwords found with the given pattern",
"patter": pattern,
"total_passwords": len(passwords)
}
)
return False
def _init_log(self):
''' Initialize log object '''
self._log = logging.getLogger("nc_password_client")
@ -1455,6 +1488,15 @@ def delete_passwords_folder(ctx, name):
'''Delete a password folder'''
ctx.obj['NcPasswordClient'].delete_passwords_folder(name)
@cli.command()
@click.option('--pattern', '-p', required=True, help='Regular expression pattern to search in the password fields')
@click.option('--limit', '-l', default=1, help='Maximun number of passwords to show')
@click_config_file.configuration_option()
@click.pass_context
def search(ctx, pattern, limit):
'''Search for a password (or passwords) that match the given pattern in its fields'''
ctx.obj['NcPasswordClient'].search(pattern, limit)
@cli.command()
@click.option(
'--limit', '-l',