/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Multimap;
import com.enonic.cms.core.security.group.AddMembershipsCommand;
import com.enonic.cms.core.security.group.DeleteGroupCommand;
import com.enonic.cms.core.security.group.GroupEntity;
import com.enonic.cms.core.security.group.GroupKey;
import com.enonic.cms.core.security.group.GroupSpecification;
import com.enonic.cms.core.security.group.RemoveMembershipsCommand;
import com.enonic.cms.core.security.group.StoreNewGroupCommand;
import com.enonic.cms.core.security.group.UpdateGroupCommand;
import com.enonic.cms.core.security.user.DeleteUserCommand;
import com.enonic.cms.core.security.user.DeleteUserStoreCommand;
import com.enonic.cms.core.security.user.StoreNewUserCommand;
import com.enonic.cms.core.security.user.UpdateUserCommand;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.core.security.user.UserKey;
import com.enonic.cms.core.security.user.UserNotFoundException;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig;
import com.enonic.cms.core.security.userstore.connector.config.UserStoreConnectorConfig;
import com.enonic.cms.core.security.userstore.connector.remote.MemberCache;
import com.enonic.cms.core.security.userstore.connector.synchronize.status.SynchronizeStatus;
import com.enonic.cms.core.security.userstore.status.LocalGroupsStatus;
import com.enonic.cms.core.security.userstore.status.LocalUsersStatus;
import com.enonic.cms.api.plugin.ext.userstore.RemoteGroup;
import com.enonic.cms.api.plugin.ext.userstore.RemoteUser;
public interface UserStoreService
{
UserKey storeNewUser( final StoreNewUserCommand command );
void updateUser( final UpdateUserCommand command );
void deleteUser( final DeleteUserCommand command );
void deleteUserStore( final DeleteUserStoreCommand command );
GroupKey storeNewGroup( final StoreNewGroupCommand command );
UserStoreKey storeNewUserStore( final StoreNewUserStoreCommand command );
void updateUserStore( final UpdateUserStoreCommand command );
void updateGroup( final UpdateGroupCommand command );
void deleteGroup( final DeleteGroupCommand command );
List<GroupEntity> removeMembershipsFromGroup( final RemoveMembershipsCommand command );
List<GroupEntity> addMembershipsToGroup( final AddMembershipsCommand command );
void authenticateUser( final UserStoreKey userStoreKey, final String uid, final String password );
void changePassword( final UserStoreKey userStoreKey, final String uid, final String newPassword );
void synchronizeUser( UserStoreKey userStoreKey, String uid )
throws UserNotFoundException;
void synchronizeUsers( final SynchronizeStatus status, final UserStoreKey userStoreKey, final List<RemoteUser> remoteUsers,
final boolean syncMemberships, final MemberCache memberCache );
void synchronizeUserMemberships( final SynchronizeStatus status, final UserStoreKey userStoreKey, final RemoteUser remoteUser,
final MemberCache memberCache );
void deleteUsersLocally( final UserStoreKey userStore, final LocalUsersStatus status, final List<UserKey> users );
GroupEntity synchronizeGroup( final GroupKey groupKey );
void synchronizeGroups( final SynchronizeStatus status, final UserStoreKey userStoreKey, final List<RemoteGroup> remoteGroups,
final boolean syncMemberships, final boolean syncMembers, final MemberCache memberCache );
void synchronizeGroupMemberships( final SynchronizeStatus status, final UserStoreKey userStoreKey, final RemoteGroup remoteGroup,
final MemberCache memberCache );
void deleteGroupsLocally( final LocalGroupsStatus status, final UserStoreKey userStoreKey, final List<GroupKey> groups );
UserStoreEntity getDefaultUserStore();
UserStoreEntity getUserStore( final UserStoreKey userStoreKey );
User getUserByKey( final UserKey userKey );
Map<String, UserStoreConnectorConfig> getUserStoreConnectorConfigs();
void invalidateUserStoreCachedConfig( final UserStoreKey userStoreKey );
boolean canSynchronizeUsers( final UserStoreKey userStoreKey );
boolean canSynchronizeGroups( final UserStoreKey userStoreKey );
List<UserEntity> getUsers( final UserStoreKey userStoreKey );
Multimap<String, UserEntity> getUsersAsMapByName( final UserStoreKey userStoreKey );
List<GroupEntity> getGroups( final GroupSpecification groupSpec );
void verifyUserStoreConnector( final String connectorName );
void verifyUserStoreConnectorConfig( final UserStoreConfig config, final String connectorName );
boolean canCreateUser( final UserStoreKey userStoreKey );
boolean canUpdateUser( final UserStoreKey userStoreKey );
boolean canUpdateUserPassword( final UserStoreKey userStoreKey );
boolean canDeleteUser( final UserStoreKey userStoreKey );
boolean canCreateGroup( final UserStoreKey userStoreKey );
boolean canReadGroup( final UserStoreKey userStoreKey );
boolean canUpdateGroup( final UserStoreKey userStoreKey );
boolean canDeleteGroup( final UserStoreKey userStoreKey );
public void verifyUniqueEmailAddress( String email, UserStoreKey userStoreKey );
void initializeUserStores();
}