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

Function prepare_folder_tree

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

Source from the content-addressed store, hash-verified

1098
1099
1100def prepare_folder_tree(params): # type: (KeeperParams) -> None
1101 params.folder_cache = {}
1102 params.root_folder = RootFolderNode()
1103
1104 for sf in params.subfolder_cache.values():
1105 data_unencrypted = sf.get('data_unencrypted') # type: Optional[bytes]
1106 folder_uid = None
1107 if sf['type'] == 'user_folder':
1108 folder_uid = sf['folder_uid']
1109 if sf.get('source') == 'nested_share_folder':
1110 uf = NestedShareFolderNode()
1111 else:
1112 uf = UserFolderNode()
1113 uf.uid = folder_uid
1114 uf.parent_uid = sf.get('parent_uid')
1115 if sf.get('name'):
1116 uf.name = sf['name']
1117 params.folder_cache[uf.uid] = uf
1118
1119 elif sf['type'] == 'shared_folder_folder':
1120 folder_uid = sf['folder_uid']
1121 sff = SharedFolderFolderNode()
1122 sff.uid = folder_uid
1123 sff.shared_folder_uid = sf['shared_folder_uid']
1124 sff.parent_uid = sf.get('parent_uid') or sff.shared_folder_uid
1125 params.folder_cache[sff.uid] = sff
1126
1127 elif sf['type'] == 'shared_folder':
1128 folder_uid = sf['shared_folder_uid']
1129 shf = SharedFolderNode()
1130 shf.uid = folder_uid
1131 shf.parent_uid = sf.get('folder_uid')
1132 folder = params.shared_folder_cache.get(shf.uid)
1133 if folder is not None:
1134 data_unencrypted = folder.get('data_unencrypted')
1135 shf.name = folder['name_unencrypted']
1136 params.folder_cache[shf.uid] = shf
1137
1138 if data_unencrypted and folder_uid:
1139 try:
1140 f = params.folder_cache.get(folder_uid) # type: Optional[BaseFolderNode]
1141 data = json.loads(data_unencrypted.decode())
1142 f.name = data.get('name') or f.name or f.uid
1143 f.color = data.get('color')
1144 except Exception as e:
1145 logging.debug('Error decrypting user folder name. Folder UID: %s. Error: %s', sf.uid, e)
1146
1147 for f in params.folder_cache.values():
1148 parent_folder = params.folder_cache.get(f.parent_uid) if f.parent_uid else params.root_folder
1149 if parent_folder:
1150 parent_folder.subfolders.append(f.uid)
1151 elif f.parent_uid and hasattr(params, 'nested_share_folders') and f.uid in params.nested_share_folders:
1152 # Nested Share Folder root-level folders have a parent UID pointing to the NSF vault root,
1153 # which is not a real vault folder. Clear parent_uid so that navigation
1154 # and ls treat them as direct children of the vault root.
1155 f.parent_uid = None
1156 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.45
debugMethod · 0.45

Tested by

no test coverage detected