/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.test.platform.security;
import org.pentaho.platform.api.engine.IUserRoleListService;
import org.pentaho.platform.api.mt.ITenant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MockUserRoleListService implements IUserRoleListService {
Map<String, List<String>> roleMap = new HashMap<String, List<String>>();
Map<String, List<String>> userMap = new HashMap<String, List<String>>();
Map<String, List<UsersInRole>> usersInRole = new HashMap<String, List<UsersInRole>>();
Map<String, List<RolesInUser>> rolesInUser = new HashMap<String, List<RolesInUser>>();
List<String> systemRoles = new ArrayList<String>();
public MockUserRoleListService() {
List<String> allAuths = new ArrayList<String>( 7 );
allAuths.add( "dev" ); //$NON-NLS-1$
allAuths.add( "Admin" ); //$NON-NLS-1$
allAuths.add( "devmgr" ); //$NON-NLS-1$
allAuths.add( "ceo" ); //$NON-NLS-1$
allAuths.add( "cto" ); //$NON-NLS-1$
allAuths.add( "Authenticated" ); //$NON-NLS-1$
allAuths.add( "is" ); //$NON-NLS-1$
roleMap.put( "default", allAuths );
List<String> allUsers = new ArrayList<String>( 4 );
allUsers.add( "pat" ); //$NON-NLS-1$
allUsers.add( "tiffany" ); //$NON-NLS-1$
allUsers.add( "admin" ); //$NON-NLS-1$
allUsers.add( "suzy" ); //$NON-NLS-1$
userMap.put( "default", allUsers );
List<UsersInRole> userInRoles = new ArrayList<UsersInRole>( 6 );
userInRoles.add( new UsersInRole( "dev", Arrays.asList( new String[] { "pat", "tiffany" } ) ) );
userInRoles.add( new UsersInRole( "Admin", Arrays.asList( new String[] { "admin" } ) ) );
userInRoles.add( new UsersInRole( "devmgr", Arrays.asList( new String[] { "tiffany" } ) ) );
userInRoles.add( new UsersInRole( "ceo", Arrays.asList( new String[] { "admin" } ) ) );
userInRoles.add( new UsersInRole( "cto", Arrays.asList( new String[] { "suzy" } ) ) );
userInRoles.add( new UsersInRole( "is", Arrays.asList( new String[] { "suzy" } ) ) );
usersInRole.put( "default", userInRoles );
List<RolesInUser> roleInUser = new ArrayList<RolesInUser>( 6 );
roleInUser.add( new RolesInUser( "pat", Arrays.asList( new String[] { "dev", "Authenticated" } ) ) );
roleInUser.add( new RolesInUser( "tiffany", Arrays.asList( new String[] { "dev", "devmgr", "Authenticated" } ) ) );
roleInUser.add( new RolesInUser( "admin", Arrays.asList( new String[] { "Admin", "ceo", "Authenticated" } ) ) );
roleInUser.add( new RolesInUser( "suzy", Arrays.asList( new String[] { "cto", "is", "Authenticated" } ) ) );
rolesInUser.put( "default", roleInUser );
systemRoles.add( "Admin" );
systemRoles.add( "Authenticated" );
}
@Override
public List<String> getAllRoles() {
return roleMap.get( "default" );
}
@Override
public List<String> getAllUsers() {
return userMap.get( "default" );
}
@Override
public List<String> getAllRoles( ITenant tenant ) {
return roleMap.get( tenant.getName() );
}
@Override
public List<String> getAllUsers( ITenant tenant ) {
return userMap.get( tenant.getName() );
}
private List<String> getUsersInRole( List<UsersInRole> usersInRoleList, String role ) {
for ( UsersInRole userInRole : usersInRoleList ) {
if ( userInRole.getRole().equals( role ) ) {
return userInRole.getUsers();
}
}
return Collections.emptyList();
}
@Override
public List<String> getUsersInRole( ITenant tenant, String role ) {
return getUsersInRole( usersInRole.get( tenant.getName() ), role );
}
private List<String> getRolesForUser( List<RolesInUser> rolesInUserList, String username ) {
for ( RolesInUser roleInUser : rolesInUserList ) {
if ( roleInUser.getUser().equals( username ) ) {
return roleInUser.getRoles();
}
}
return Collections.emptyList();
}
@Override
public List<String> getRolesForUser( ITenant tenant, String username ) {
return getRolesForUser( rolesInUser.get( tenant.getName() ), username );
}
class UsersInRole {
String role;
List<String> users;
public UsersInRole() {
role = null;
users = new ArrayList<String>();
}
public UsersInRole( String role, List<String> users ) {
this();
this.role = role;
this.users.addAll( users );
}
public String getRole() {
return role;
}
public void setRole( String role ) {
this.role = role;
}
public List<String> getUsers() {
return users;
}
public void setUsers( List<String> users ) {
this.users.clear();
this.users.addAll( users );
}
public void add( String user ) {
this.users.add( user );
}
}
class RolesInUser {
String user;
List<String> roles;
public RolesInUser() {
user = null;
roles = new ArrayList<String>();
}
public RolesInUser( String user, List<String> roles ) {
this();
this.user = user;
this.roles.addAll( roles );
}
public String getUser() {
return user;
}
public void setUser( String user ) {
this.user = user;
}
public List<String> getRoles() {
return roles;
}
public void setRoles( List<String> roles ) {
this.roles.clear();
this.roles.addAll( roles );
}
public void add( String role ) {
this.roles.add( role );
}
}
@Override
public List<String> getSystemRoles() {
return systemRoles;
}
}