def test_search_records(self): params = get_synced_params() records = api.search_records(params, '') self.assertEqual(len(records), len(params.record_cache)) records = api.search_records(params, 'RECORD') self.assertEqual(len(records), len(params.record_cache)) records = api.search_records(params, 'Record 1') self.assertEqual(len(records), 1) records = api.search_records(params, 'INVALID') self.assertEqual(len(records), 0)
def list(params): try: api.sync_down(params) if (len(params.record_cache) == 0): print('No records') return results = api.search_records(params, '') display.formatted_records(results) except Exception as e: raise click.ClickException(e)
def search(params, regex): try: prompt_for_credentials(params) api.sync_down(params) if (len(params.record_cache) == 0): print('No records') return results = api.search_records(params, regex) display.formatted_records(results) except Exception as e: raise click.ClickException(e)
def rotate(params, uid, match): if not (uid or match): raise click.ClickException("Need to specify either uid or match option") try: api.sync_down(params) if uid: api.rotate_password(params, uid) else: if filter: results = api.search_records(params, match) for r in results: api.rotate_password(params, r.record_uid) except Exception as e: raise click.ClickException(e)
def rotate(params, uid, match, print): try: prompt_for_credentials(params) api.sync_down(params) if uid: api.rotate_password(params, uid) if print: display.print_record(params, uid) else: if filter: results = api.search_records(params, match) for r in results: api.rotate_password(params, r.record_uid) if print: display.print_record(params, uid) except Exception as e: raise click.ClickException(e)
def list(params): try: prompt_for_credentials(params) api.sync_down(params) if (len(params.record_cache) > 0): results = api.search_records(params, '') display.formatted_records(results) if (len(params.shared_folder_cache) > 0): results = api.search_shared_folders(params, '') display.formatted_shared_folders(results) if (len(params.team_cache) > 0): results = api.search_teams(params, '') display.formatted_teams(results) except Exception as e: raise click.ClickException(e)
def rotate(params, uid, match, print): if not (uid or match): raise click.ClickException( "Need to specify either uid or match option") try: api.sync_down(params) if uid: api.rotate_password(params, uid) if print: display.print_record(params, uid) else: if filter: results = api.search_records(params, match) for r in results: api.rotate_password(params, r.record_uid) if print: display.print_record(params, uid) except Exception as e: raise click.ClickException(e)
def do_command(params): if (params.command == 'q'): return False elif (params.command == 'l'): if (len(params.record_cache) == 0): print('No records') else: results = api.search_records(params, '') display.formatted_records(results) elif (params.command[:2] == 'g '): r = api.get_record(params, params.command[2:]) if r: r.display() elif (params.command[:2] == 'r '): api.rotate_password(params, params.command[2:]) elif (params.command == 'c'): print(chr(27) + "[2J") elif (params.command[:2] == 's '): results = api.search_records(params, params.command[2:]) display.formatted_records(results) elif (params.command[:2] == 'b '): results = api.search_records(params, params.command[2:]) for r in results: api.rotate_password(params, r.record_uid) elif (params.command == 'd'): api.sync_down(params) elif (params.command == 'a'): api.add_record(params) elif (params.command == 'h'): display.formatted_history(stack) elif (params.command == 'debug'): if params.debug: params.debug = False print('Debug OFF') else: params.debug = True print('Debug ON') elif params.command == '': pass else: print('\n\nCommands:\n') print(' d ... download & decrypt data') print(' l ... list folders and titles') print(' s <regex> ... search with regular expression') print(' g <uid> ... get record details for uid') print(' r <uid> ... rotate password for uid') print(' b <regex> ... rotate password for matches of regular expression') print(' a ... add a new record interactively') print(' c ... clear the screen') print(' h ... show command history') print(' q ... quit') print('') if params.command: if params.command != 'h': stack.append(params.command) stack.reverse() return True
def do_command(params): if (params.command == 'q'): return False elif (params.command == 'l'): if (len(params.record_cache) == 0): print('No records') else: results = api.search_records(params, '') display.formatted_records(results) elif (params.command == 'lsf'): if (len(params.shared_folder_cache) == 0): print('No shared folders') else: results = api.search_shared_folders(params, '') display.formatted_shared_folders(results) elif (params.command[:2] == 'g '): if (api.is_shared_folder(params, params.command[2:])): sf = api.get_shared_folder(params, params.command[2:]) if sf: sf.display() else: r = api.get_record(params, params.command[2:]) if r: r.display() elif (params.command[:2] == 'r '): api.rotate_password(params, params.command[2:]) elif (params.command[:2] == 'd '): api.delete_record(params, params.command[2:]) elif (params.command == 'c'): print(chr(27) + "[2J") elif (params.command[:2] == 's '): results = api.search_records(params, params.command[2:]) display.formatted_records(results) elif (params.command[:2] == 'b '): results = api.search_records(params, params.command[2:]) for r in results: api.rotate_password(params, r.record_uid) elif (params.command[:3] == 'an '): api.append_notes(params, params.command[3:]) elif (params.command == 'd'): api.sync_down(params) elif (params.command == 'a'): api.add_record(params) elif (params.command == 'h'): display.formatted_history(stack) elif (params.command == 'debug'): if params.debug: params.debug = False print('Debug OFF') else: params.debug = True print('Debug ON') elif params.command == '': pass else: print('\n\nCommands:\n') print(' d ... download & decrypt data') print(' l ... list folders and titles') print(' lsf ... list shared folders') print(' s <regex> ... search with regular expression') print(' g <uid> ... get record or shared folder details for uid') print(' r <uid> ... rotate password for uid') print( ' b <regex> ... rotate password for matches of regular expression' ) print(' a ... add a new record interactively') print(' an <uid> ... append some notes to the specified record') print(' c ... clear the screen') print(' h ... show command history') print(' q ... quit') print('') if params.command: if params.command != 'h': stack.append(params.command) stack.reverse() return True
from keepercommander.params import KeeperParams from keepercommander import display, api my_params = KeeperParams() while not my_params.user: my_params.user = getpass.getpass(prompt='User(Email): ', stream=None) while not my_params.password: my_params.password = getpass.getpass(prompt='Master Password: '******'Search String: ', stream=None) api.sync_down(my_params) # Search records results = api.search_records(my_params, searchstring) for r in results: print('Record UID ' + r.record_uid + ' matches') # Note: see record.py for available fields or # call display.formatted_records(results) to show all record details # Search shared folders results = api.search_shared_folders(my_params, searchstring) for sf in results: print('Shared Folder UID ' + sf.shared_folder_uid + ' matches') # Search teams results = api.search_teams(my_params, searchstring) for t in results: print('Team UID ' + t.team_uid + ' matches')
def do_command(params): if (params.command == 'q'): return False elif (params.command == 'l'): if (len(params.record_cache) == 0): print('No records') else: results = api.search_records(params, '') display.formatted_records(results) elif (params.command == 'lsf'): if (len(params.shared_folder_cache) == 0): print('No shared folders') else: results = api.search_shared_folders(params, '') display.formatted_shared_folders(results) elif (params.command == 'lt'): if (len(params.team_cache) == 0): print('No teams') else: results = api.search_teams(params, '') display.formatted_teams(results) elif (params.command[:2] == 'g '): if (api.is_shared_folder(params, params.command[2:])): sf = api.get_shared_folder(params, params.command[2:]) if sf: sf.display() elif (api.is_team(params, params.command[2:])): team = api.get_team(params, params.command[2:]) if team: team.display() else: r = api.get_record(params, params.command[2:]) if r: r.display() elif (params.command[:2] == 'r '): api.rotate_password(params, params.command[2:]) elif (params.command[:2] == 'd '): api.delete_record(params, params.command[2:]) elif (params.command == 'c'): print(chr(27) + "[2J") elif (params.command[:2] == 's '): results = api.search_records(params, params.command[2:]) display.formatted_records(results) elif (params.command[:2] == 'b '): results = api.search_records(params, params.command[2:]) for r in results: api.rotate_password(params, r.record_uid) elif (params.command[:3] == 'an '): api.append_notes(params, params.command[3:]) elif (params.command == 'd'): api.sync_down(params) elif (params.command == 'a'): record = Record() while not record.title: record.title = input("... Title (req'd): ") record.folder = input("... Folder: ") record.login = input("... Login: "******"... Password: "******"... Login URL: ") record.notes = input("... Notes: ") while True: custom_dict = {} custom_dict['name'] = input("... Custom Field Name : ") if not custom_dict['name']: break custom_dict['value'] = input("... Custom Field Value : ") custom_dict['type'] = 'text' record.custom_fields.append(custom_dict) api.add_record(params, record) elif (params.command == 'h'): display.formatted_history(stack) elif (params.command == 'debug'): if params.debug: params.debug = False print('Debug OFF') else: params.debug = True print('Debug ON') elif params.command == '': pass else: print('\n\nShell Commands:\n') print(' d ... download & decrypt data') print(' l ... list folders and record titles') print(' lsf ... list shared folders') print(' lt ... list teams') print(' s <regex> ... search with regular expression') print(' g <uid> ... get record or shared folder details for uid') print(' r <uid> ... rotate password for uid') print( ' b <regex> ... rotate password for matches of regular expression' ) print(' a ... add a new record interactively') print(' an <uid> ... append some notes to the specified record') print(' c ... clear the screen') print(' h ... show command history') print(' q ... quit') print('') if params.command: if params.command != 'h': stack.append(params.command) stack.reverse() return True