package com.enonic.cms.itest.userstore; import java.util.List; import java.util.Set; import com.google.common.collect.Sets; import com.enonic.cms.api.plugin.ext.userstore.RemoteGroup; import com.enonic.cms.api.plugin.ext.userstore.RemotePrincipal; import com.enonic.cms.api.plugin.ext.userstore.RemoteUser; import com.enonic.cms.api.plugin.ext.userstore.RemoteUserStore; import com.enonic.cms.api.plugin.ext.userstore.UserFieldType; final class MemRemoteUserStore implements RemoteUserStore { private final MemUserDatabase database; public MemRemoteUserStore( final MemUserDatabase database ) { this.database = database; } @Override public Set<UserFieldType> getSupportedFieldTypes() { return Sets.newHashSet( UserFieldType.values() ); } @Override public boolean authenticate( final String userId, final String password ) { final String storedPassword = this.database.getPassword( userId ); return storedPassword != null && storedPassword.equals( password ); } @Override public RemoteUser getUser( final String userId ) { return this.database.getUser( userId ); } @Override public List<RemoteUser> getAllUsers() { return this.database.getAllUsers(); } @Override public RemoteGroup getGroup( final String groupId ) { return this.database.getGroup( groupId ); } @Override public List<RemoteGroup> getAllGroups() { return this.database.getAllGroups(); } @Override public boolean changePassword( final String userId, final String password ) { if ( this.database.getUser( userId ) != null ) { this.database.setPassword( userId, password ); return true; } return false; } @Override public boolean addPrincipal( final RemotePrincipal principal ) { if ( principal instanceof RemoteUser ) { return addUser( (RemoteUser) principal ); } else if ( principal instanceof RemoteGroup ) { return addGroup( (RemoteGroup) principal ); } else { return false; } } private boolean addUser( final RemoteUser user ) { this.database.setPassword( user.getId(), "password" ); return this.database.addUser( user ); } private boolean addGroup( final RemoteGroup group ) { return this.database.addGroup( group ); } @Override public boolean updatePrincipal( final RemotePrincipal principal ) { if ( principal instanceof RemoteUser ) { return updateUser( (RemoteUser) principal ); } else if ( principal instanceof RemoteGroup ) { return updateGroup( (RemoteGroup) principal ); } else { return false; } } private boolean updateUser( final RemoteUser user ) { return this.database.updateUser( user ); } private boolean updateGroup( final RemoteGroup group ) { return this.database.updateGroup( group ); } @Override public boolean removePrincipal( final RemotePrincipal principal ) { if ( principal instanceof RemoteUser ) { return removeUser( (RemoteUser) principal ); } else if ( principal instanceof RemoteGroup ) { return removeGroup( (RemoteGroup) principal ); } else { return false; } } private boolean removeUser( final RemoteUser user ) { return this.database.removeUser( user ); } private boolean removeGroup( final RemoteGroup group ) { return this.database.removeGroup( group ); } @Override public List<RemotePrincipal> getMembers( final RemoteGroup group ) { return this.database.getMembers( group ); } @Override public void addMembers( final RemoteGroup group, final List<RemotePrincipal> members ) { for ( final RemotePrincipal member : members ) { addMember( group, member ); } } @Override public void removeMembers( final RemoteGroup group, final List<RemotePrincipal> members ) { for ( final RemotePrincipal member : members ) { removeMember( group, member ); } } @Override public List<RemoteGroup> getMemberships( final RemotePrincipal principal ) { return this.database.getMemberships( principal ); } private void addMember( final RemoteGroup group, final RemotePrincipal member ) { this.database.addMember( group, member ); } private void removeMember( final RemoteGroup group, final RemotePrincipal member ) { this.database.removeMember( group, member ); } }