Пример #1
0
    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),
        )
Пример #2
0
    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),
        )
Пример #3
0
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()),
    )
Пример #4
0
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()),
    )