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

Function prepare_folder_tree

keepercommander/sync_down.py:1082–1138  ·  view source on GitHub ↗
(params)

Source from the content-addressed store, hash-verified

1080
1081
1082def prepare_folder_tree(params): # type: (KeeperParams) -> None
1083 params.folder_cache = {}
1084 params.root_folder = RootFolderNode()
1085
1086 for sf in params.subfolder_cache.values():
1087 data_unencrypted = sf.get('data_unencrypted') # type: Optional[bytes]
1088 folder_uid = None
1089 if sf['type'] == 'user_folder':
1090 folder_uid = sf['folder_uid']
1091 if sf.get('source') == 'nested_share_folder':
1092 uf = NestedShareFolderNode()
1093 else:
1094 uf = UserFolderNode()
1095 uf.uid = folder_uid
1096 uf.parent_uid = sf.get('parent_uid')
1097 if sf.get('name'):
1098 uf.name = sf['name']
1099 params.folder_cache[uf.uid] = uf
1100
1101 elif sf['type'] == 'shared_folder_folder':
1102 folder_uid = sf['folder_uid']
1103 sff = SharedFolderFolderNode()
1104 sff.uid = folder_uid
1105 sff.shared_folder_uid = sf['shared_folder_uid']
1106 sff.parent_uid = sf.get('parent_uid') or sff.shared_folder_uid
1107 params.folder_cache[sff.uid] = sff
1108
1109 elif sf['type'] == 'shared_folder':
1110 folder_uid = sf['shared_folder_uid']
1111 shf = SharedFolderNode()
1112 shf.uid = folder_uid
1113 shf.parent_uid = sf.get('folder_uid')
1114 folder = params.shared_folder_cache.get(shf.uid)
1115 if folder is not None:
1116 data_unencrypted = folder.get('data_unencrypted')
1117 shf.name = folder['name_unencrypted']
1118 params.folder_cache[shf.uid] = shf
1119
1120 if data_unencrypted and folder_uid:
1121 try:
1122 f = params.folder_cache.get(folder_uid) # type: Optional[BaseFolderNode]
1123 data = json.loads(data_unencrypted.decode())
1124 f.name = data.get('name') or f.name or f.uid
1125 f.color = data.get('color')
1126 except Exception as e:
1127 logging.debug('Error decrypting user folder name. Folder UID: %s. Error: %s', sf.uid, e)
1128
1129 for f in params.folder_cache.values():
1130 parent_folder = params.folder_cache.get(f.parent_uid) if f.parent_uid else params.root_folder
1131 if parent_folder:
1132 parent_folder.subfolders.append(f.uid)
1133 elif f.parent_uid and hasattr(params, 'nested_share_folders') and f.uid in params.nested_share_folders:
1134 # Nested Share Folder root-level folders have a parent UID pointing to the NSF vault root,
1135 # which is not a real vault folder. Clear parent_uid so that navigation
1136 # and ls treat them as direct children of the vault root.
1137 f.parent_uid = None
1138 params.root_folder.subfolders.append(f.uid)

Callers 1

_sync_down_implFunction · 0.85

Calls 7

RootFolderNodeClass · 0.85
UserFolderNodeClass · 0.85
SharedFolderNodeClass · 0.85
getMethod · 0.80
debugMethod · 0.45

Tested by

no test coverage detected