async def _get_trustchain(self, organization_id: OrganizationID, *devices_ids, redacted: bool = False): trustchain_devices = set() trustchain_users = set() trustchain_revoked_users = set() in_trustchain = set() user_certif_field = "redacted_user_certificate" if redacted else "user_certificate" device_certif_field = "redacted_device_certificate" if redacted else "device_certificate" async def _recursive_extract_creators(device_id): if not device_id or device_id in in_trustchain: return in_trustchain.add(device_id) user = self._get_user(organization_id, device_id.user_id) device = self._get_device(organization_id, device_id) trustchain_devices.add(getattr(device, device_certif_field)) trustchain_users.add(getattr(user, user_certif_field)) if user.revoked_user_certificate: trustchain_revoked_users.add(user.revoked_user_certificate) await _recursive_extract_creators(device.device_certifier) await _recursive_extract_creators(user.revoked_user_certifier) await _recursive_extract_creators(user.user_certifier) for device_id in devices_ids: await _recursive_extract_creators(device_id) return Trustchain( devices=tuple(trustchain_devices), users=tuple(trustchain_users), revoked_users=tuple(trustchain_revoked_users), )
async def _get_trustchain(self, organization_id, *devices_ids): trustchain_devices = set() trustchain_users = set() trustchain_revoked_users = set() in_trustchain = set() async def _recursive_extract_creators(device_id): if not device_id or device_id in in_trustchain: return in_trustchain.add(device_id) user = self._get_user(organization_id, device_id.user_id) device = self._get_device(organization_id, device_id) trustchain_devices.add(device.device_certificate) trustchain_users.add(user.user_certificate) if user.revoked_user_certificate: trustchain_revoked_users.add(user.revoked_user_certificate) await _recursive_extract_creators(device.device_certifier) await _recursive_extract_creators(user.revoked_user_certifier) await _recursive_extract_creators(user.user_certifier) for device_id in devices_ids: await _recursive_extract_creators(device_id) return Trustchain( devices=tuple(trustchain_devices), users=tuple(trustchain_users), revoked_users=tuple(trustchain_revoked_users), )
async def _get_trustchain(conn, organization_id: OrganizationID, *device_ids: Optional[DeviceID], redacted: bool = False) -> Trustchain: rows = await conn.fetch(*_q_get_trustchain( organization_id=organization_id.str, device_ids=[d.str for d in device_ids if d is not None], )) user_certif_field = "redacted_user_certificate" if redacted else "user_certificate" device_certif_field = "redacted_device_certificate" if redacted else "device_certificate" users = {} revoked_users = {} devices = {} for row in rows: users[row["_uid"]] = row[user_certif_field] if row["revoked_user_certificate"] is not None: revoked_users[row["_uid"]] = row["revoked_user_certificate"] devices[row["_did"]] = row[device_certif_field] return Trustchain( users=tuple(users.values()), revoked_users=tuple(revoked_users.values()), devices=tuple(devices.values()), )
async def _get_trustchain(conn, organization_id: OrganizationID, *device_ids: Tuple[DeviceID]) -> Tuple[Device]: rows = await conn.fetch(_q_get_trustchain, organization_id, device_ids) users = {} revoked_users = {} devices = {} for row in rows: users[row["_uid"]] = row["user_certificate"] if row["revoked_user_certificate"] is not None: revoked_users[row["_uid"]] = row["revoked_user_certificate"] devices[row["_did"]] = row["device_certificate"] return Trustchain( users=tuple(users.values()), revoked_users=tuple(revoked_users.values()), devices=tuple(devices.values()), )