MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / execute

Method execute

keepercommander/commands/record.py:2447–2584  ·  view source on GitHub ↗
(self, params, **kwargs)

Source from the content-addressed store, hash-verified

2445 return trash_restore_parser
2446
2447 def execute(self, params, **kwargs):
2448 deleted_records = self.get_deleted_records(params)
2449 orphaned_records = self.get_orphaned_records(params)
2450 shared_folders = self.get_shared_folders(params)
2451 deleted_shared_records = shared_folders.get('records') or {}
2452 deleted_shared_folders = shared_folders.get('folders') or {}
2453 if len(deleted_records) == 0 and len(orphaned_records) == 0 and len(deleted_shared_records) == 0 and len(deleted_shared_folders) == 0:
2454 logging.info('Trash is empty')
2455 return
2456
2457 records = kwargs.get('records')
2458 if not isinstance(records, (tuple, list)):
2459 records = None
2460 if not records:
2461 logging.info('records parameter is empty.')
2462 return
2463
2464 records_to_restore = set() # type: Set[str]
2465 folders_to_restore = set() # type: Set[str]
2466 folder_records_to_restore = {} # type: Dict[str, List[str]]
2467 for rec in records:
2468 if rec in deleted_records:
2469 records_to_restore.add(rec)
2470 elif rec in orphaned_records:
2471 records_to_restore.add(rec)
2472 elif rec in deleted_shared_records:
2473 dsr = deleted_shared_records.get(rec)
2474 folder_uid = dsr.get('folder_uid')
2475 record_uid = dsr.get('record_uid')
2476 if folder_uid and record_uid:
2477 if folder_uid not in folder_records_to_restore:
2478 folder_records_to_restore[folder_uid] = []
2479 folder_records_to_restore[folder_uid].append(record_uid)
2480 elif rec in deleted_shared_folders:
2481 folders_to_restore.add(rec)
2482 else:
2483 title_pattern = re.compile(fnmatch.translate(rec), re.IGNORECASE)
2484 for record_uid, del_rec in itertools.chain(deleted_records.items(), orphaned_records.items()):
2485 if record_uid in records_to_restore:
2486 continue
2487 record = vault.KeeperRecord.load(params, del_rec)
2488 if title_pattern.match(record.title):
2489 records_to_restore.add(record_uid)
2490 for record_uid, sh_rec in deleted_shared_records.items():
2491 if record_uid in folder_records_to_restore:
2492 continue
2493 record = vault.KeeperRecord.load(params, sh_rec)
2494 if title_pattern.match(record.title):
2495 folder_uid = sh_rec.get('folder_uid')
2496 if folder_uid not in folder_records_to_restore:
2497 folder_records_to_restore[folder_uid] = []
2498 folder_records_to_restore[folder_uid].append(record_uid)
2499 for folder_uid, sh_fol in deleted_shared_folders.items():
2500 if folder_uid in folders_to_restore:
2501 continue
2502 try:
2503 data = json.loads(sh_fol.get('data_unencrypted'))
2504 folder_name = data.get('name') or folder_uid

Callers

nothing calls this directly

Calls 11

get_deleted_recordsMethod · 0.80
get_orphaned_recordsMethod · 0.80
queue_audit_eventMethod · 0.80
save_reused_pw_countMethod · 0.80
get_shared_foldersMethod · 0.45
getMethod · 0.45
infoMethod · 0.45
addMethod · 0.45
loadMethod · 0.45
sync_downMethod · 0.45

Tested by

no test coverage detected