Defines a Keeper Shared Record (shared either via Direct-Share or as a child of a Shared-Folder node)
| 152 | |
| 153 | |
| 154 | class 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 |
no outgoing calls
no test coverage detected