package io.fathom.cloud.identity.services; import io.fathom.cloud.CloudException; import io.fathom.cloud.identity.state.AuthRepository; import io.fathom.cloud.protobuf.IdentityModel.CredentialData; import io.fathom.cloud.protobuf.IdentityModel.DomainData; import io.fathom.cloud.protobuf.IdentityModel.UserData; import io.fathom.cloud.state.NamedItemCollection; import javax.inject.Inject; import javax.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.persist.Transactional; @Singleton public class Sweeper { private static final Logger log = LoggerFactory.getLogger(Sweeper.class); @Inject AuthRepository repository; public void sweep() throws CloudException { for (DomainData domain : repository.getDomains().list()) { sweep(domain); } } @Transactional public void sweep(DomainData domain) throws CloudException { NamedItemCollection<CredentialData> credentials = repository.getUsernames(domain); for (CredentialData credential : credentials.list()) { long userId = credential.getUserId(); UserData user = repository.getUsers().find(userId); if (user == null) { log.warn("Removing credential that references deleted user: {}", credential); credentials.delete(credential.getKey()); } } } }