package io.fathom.cloud.identity.services; import io.fathom.cloud.CloudException; import io.fathom.cloud.identity.model.AuthenticatedProject; import io.fathom.cloud.identity.model.AuthenticatedUser; import io.fathom.cloud.lifecycle.LifecycleListener; import io.fathom.cloud.protobuf.IdentityModel.DomainData; import io.fathom.cloud.protobuf.IdentityModel.GroupData; import io.fathom.cloud.protobuf.IdentityModel.ProjectData; import io.fathom.cloud.protobuf.IdentityModel.RoleData; import io.fathom.cloud.protobuf.IdentityModel.UserData; import java.util.List; import com.google.inject.ImplementedBy; import com.google.protobuf.ByteString; @ImplementedBy(IdentityServiceImpl.class) public interface IdentityService extends LifecycleListener { public static class UserCreationData { public DomainData domain; public UserData.Builder user; public String password; public ByteString publicKeySha1; public ByteString publicKeyChallengeRequest; public ByteString publicKeyChallengeResponse; public UserCreationData(DomainData domain, UserData.Builder user, String password) { this.domain = domain; this.user = user; this.password = password; } } UserData createUser(UserCreationData data) throws CloudException; DomainData getDefaultDomain() throws CloudException; // @AutoRetry(ConcurrentUpdateException.class) // void deleteUser(long id) throws StateStoreException, // ConcurrentUpdateException; void grantRoleToUserOnProject(AuthenticatedProject authenticatedProject, long granteeUserId, long roleId) throws CloudException; ProjectData createProject(ProjectData.Builder b, AuthenticatedUser owner, long ownerRoleId) throws CloudException; ProjectData findProject(AuthenticatedUser user, long projectId) throws CloudException; void deleteUser(UserData user) throws CloudException; void sweep() throws CloudException; RoleData findRole(long roleId); AuthenticatedProject authenticateToProject(AuthenticatedUser user, long projectId) throws CloudException; UserData findUser(long id) throws CloudException; List<DomainData> listDomains(UserData user) throws CloudException; DomainData findDomain(UserData user, String id) throws CloudException; List<GroupData> listGroups(AuthenticatedUser user) throws CloudException; List<RoleData> listRoles() throws CloudException; void grantDomainRoleToUser(long domainId, long granteeUserId, long roleId) throws CloudException; UserData findUserByName(long domainId, String userName) throws CloudException; void fixupProject(AuthenticatedUser user, long projectId) throws CloudException; List<ProjectData> listProjects() throws CloudException; }