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

Class SharedRecord

keepercommander/shared_record.py:154–341  ·  view source on GitHub ↗

Defines a Keeper Shared Record (shared either via Direct-Share or as a child of a Shared-Folder node)

Source from the content-addressed store, hash-verified

152
153
154class SharedRecord:
155 """Defines a Keeper Shared Record (shared either via Direct-Share or as a child of a Shared-Folder node)"""
156
157 def __init__(self, params, record, sf_sharing_admins, team_members, role_restricted_members):
158 has_owner = record.record_uid in params.record_owner_cache
159 user_owned = has_owner and params.record_owner_cache.get(record.record_uid).owner
160 self.owner = params.user if user_owned else ''
161 self.uid = record.record_uid
162 self.name = record.title
163 self.shared_folders = None
164 self.sf_shares = {}
165 self.permissions: Dict[str, SharePermissions] = {}
166 self.team_permissions: Dict[str, SharePermissions] = {}
167 self.user_permissions: Dict[str, SharePermissions] = {}
168 self.revision = None
169 self.params = params
170 self.folder_uids = list(find_folders(params, record.record_uid))
171 self.folder_paths = [get_folder_path(params, fuid) for fuid in self.folder_uids]
172 self.team_members = team_members
173
174 self.load(params, sf_sharing_admins, team_members, role_restricted_members)
175
176 def get_ordered_permissions(self):
177 ordered = list(self.permissions.values())
178 for user_perms in self.user_permissions.values():
179 if user_perms.to_uid:
180 team_perms = self.team_permissions.get(user_perms.to_uid)
181 if team_perms in ordered and user_perms in ordered:
182 ordered.remove(user_perms)
183 ordered.insert(ordered.index(team_perms) + 1, user_perms)
184 return ordered
185
186 def merge_permissions(self, share_target, perms_to_merge, sp_type):
187 new_perms = SharePermissions.load_permissions(perms_to_merge, sp_type)
188 existing = self.permissions.get(share_target) or new_perms
189 existing.to_uid = new_perms.to_uid or existing.to_uid
190 existing.is_admin = existing.is_admin or new_perms.is_admin
191 existing.can_share = existing.can_share or new_perms.can_share
192 existing.can_edit = existing.can_edit or new_perms.can_edit
193 existing.update_types(new_perms.types)
194 if existing.expiration > 0:
195 if new_perms.expiration > 0:
196 if new_perms.expiration > existing.expiration:
197 existing.expiration = new_perms.expiration
198 else:
199 existing.expiration = 0
200
201 self.permissions[share_target] = existing
202 return existing
203
204 def merge_user_permissions(self, email, user_perms, sp_type=None):
205 new_perms = self.merge_permissions(email, user_perms, sp_type or SharePermissions.SharePermissionsType.USER)
206 self.user_permissions[email] = new_perms
207 return new_perms
208
209 def merge_team_permissions(self, team_uid, team_perms):
210 new_perms = self.merge_permissions(team_uid, team_perms, SharePermissions.SharePermissionsType.TEAM)
211 self.team_permissions[team_uid] = new_perms

Callers 1

get_shared_recordsFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected