Skip to content
Other versions

Loading…

Creating your own Principal Adapter

Principal adapters are used by authentication module to retrieve users and roles information. For example retrieve users and roles from some LDAP, or external database that stores all the company users and roles.

To create your own antivirus analiser must create a new class that implements PrincipalAdapter interface:

package com.openkm.principal;
import java.util.List;
public interface PrincipalAdapter {
/**
* Method to retrieve all users from a authentication source.
*
* @return A Collection with all the users.
* @throws PrincipalAdapterException If any error occurs.
*/
public List<String> getUsers() throws PrincipalAdapterException;
/**
* Method to retrieve all roles from a authentication source.
*
* @return A Collection with all the roles.
* @throws PrincipalAdapterException If any error occurs.
*/
public List<String> getRoles() throws PrincipalAdapterException;
/**
* Method to retrieve all users from a role.
*
* @return A Collection with all the users within a role.
* @throws PrincipalAdapterException If any error occurs.
*/
public List<String> getUsersByRole(String role) throws PrincipalAdapterException;
/**
* Method to retrieve all roles from a user.
*
* @return A Collection with all the roles of the user.
* @throws PrincipalAdapterException If any error occurs.
*/
public List<String> getRolesByUser(String user) throws PrincipalAdapterException;
/**
* Method to retrieve the mail from a user.
*
* @param user A user id.
* @return The email of the user.
* @throws PrincipalAdapterException If any error occurs.
*/
public String getMail(String user) throws PrincipalAdapterException;
/**
* Method to retrieve the name from a user.
*
* @param user A user id.
* @return The name of the user.
* @throws PrincipalAdapterException If any error occurs.
*/
public String getName(String user) throws PrincipalAdapterException;
/**
* Method to retrieve the user password
*
* @param user A user id.
* @return The password of the user.
* @throws PrincipalAdapterException If any error occurs.
*/
public String getPassword(String user) throws PrincipalAdapterException;
/*
* ------------------------------------------------------------------
* These methods only works if using the OpenKM user database.
* ------------------------------------------------------------------
*/
/**
* Method to create a new user
*
* @param user A user id.
* @param password The password of the user.
* @param email The user mail.
* @param name The full user name.
* @throws PrincipalAdapterException If any error occurs.
*/
public void createUser(String user, String password, String email, String name, boolean active) throws PrincipalAdapterException;
/**
* Method to create a delete a user
*
* @param user A user id.
* @throws PrincipalAdapterException If any error occurs.
*/
public void deleteUser(String user) throws PrincipalAdapterException;
/**
* Update user information
*
* @param user A user id.
* @param password The password of the user.
* @param email The user mail.
* @param name The full user name.
* @throws PrincipalAdapterException If any error occurs.
*/
public void updateUser(String user, String password, String email, String name, boolean active) throws PrincipalAdapterException;
/**
* Method to create a new role
*
* @param role A role id.
* @throws PrincipalAdapterException If any error occurs.
*/
public void createRole(String role, boolean active) throws PrincipalAdapterException;
/**
* Method to create a delete a role
*
* @param role A role id.
* @throws PrincipalAdapterException If any error occurs.
*/
public void deleteRole(String role) throws PrincipalAdapterException;
/**
* Update role information
*
* @param role A role id..
* @throws PrincipalAdapterException If any error occurs.
*/
public void updateRole(String role, boolean active) throws PrincipalAdapterException;
/**
* Method to assign a role
*
* @param user A user id.
* @param role A role id.
* @throws PrincipalAdapterException If any error occurs.
*/
public void assignRole(String user, String role) throws PrincipalAdapterException;
/**
* Method to remove a role
*
* @param user A user id.
* @param role A role id.
* @throws PrincipalAdapterException If any error occurs.
*/
public void removeRole(String user, String role) throws PrincipalAdapterException;
}

The new class must be loaded into the package com.openkm.principal because application plugins system will try to load from there. See the sample below:

Method Type Description
getUsers() List Return a list of users ID.
getRoles() List Return a list of roles ID.
getUsersByRole(String role)() List Return a list of users ID filtered by a role.
getRolesByUser(String user) List Return a list of roles ID filtered by a user.
getMail(String user) String Return the mail associated to a specific user.
getName(String user) String Return the name associated to a specific user.
String getPassword(String user) String Return the password associated to a specific user.
createUser(String user, String password, String email, String name, boolean active) void Create a new user.
deleteUser(String user) void Delete a user.
updateUser(String user, String password, String email, String name, boolean active) void Update user values.
Password parameter can be null or empty.
createRole(String role, boolean active) void Create a new role.
deleteRole(String role) void Delete a role.
updateRole(String role, boolean active) void Update a role.
assignRole(String user, String role) void Grant user with some role.
removeRole(String user, String role) void Revoke a role to some user.

Example of the Principal adapter implementation

Section titled “Example of the Principal adapter implementation”

The example retrieves users, roles and mails based on properties files.

package com.openkm.principal;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.commons.lang.NotImplementedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.openkm.core.Config;
public class UsersRolesPrincipalAdapter implements PrincipalAdapter {
private static Logger log = LoggerFactory.getLogger(UsersRolesPrincipalAdapter.class);
@Override
public List<String> getUsers() throws PrincipalAdapterException {
log.debug("getUsers()");
List<String> list = new ArrayList<String>();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(Config.HOME_DIR + "/server/default/conf/props/openkm-users.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (Enumeration<Object> e = prop.keys(); e.hasMoreElements();) {
String user = (String) e.nextElement();
if (!Config.SYSTEM_USER.equals(user)) {
list.add(user);
}
}
log.debug("getUsers: {}", list);
return list;
}
@Override
public List<String> getRoles() throws PrincipalAdapterException {
log.debug("getRoles()");
List<String> list = new ArrayList<String>();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(Config.HOME_DIR + "/server/default/conf/props/openkm-roles.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (Enumeration<Object> e = prop.elements(); e.hasMoreElements();) {
for (StringTokenizer st = new StringTokenizer((String) e.nextElement(), ","); st.hasMoreTokens();) {
String role = st.nextToken();
if (!Config.DEFAULT_ADMIN_ROLE.equals(role) && !list.contains(role)) {
list.add(role);
}
}
}
log.debug("getRoles: {}", list);
return list;
}
@Override
public List<String> getUsersByRole(String role) throws PrincipalAdapterException {
throw new NotImplementedException("getUsersByRole");
}
@Override
public List<String> getRolesByUser(String user) throws PrincipalAdapterException {
throw new NotImplementedException("getRolesByUser");
}
@Override
public String getMail(String user) throws PrincipalAdapterException {
log.debug("getMail({})", user);
Properties prop = new Properties();
String mail = null;
try {
prop.load(new FileInputStream(Config.HOME_DIR + "/server/default/conf/props/openkm-emails.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mail = prop.getProperty(user);
log.debug("getMail: {}", mail);
return mail;
}
@Override
public String getName(String user) throws PrincipalAdapterException {
log.debug("getName({})", user);
Properties prop = new Properties();
String name = null;
try {
prop.load(new FileInputStream(Config.HOME_DIR + "/server/default/conf/props/openkm-names.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
name = prop.getProperty(user);
log.debug("getName: {}", name);
return name;
}
@Override
public String getPassword(String user) throws PrincipalAdapterException {
throw new UnsupportedOperationException("Not implemented");
}
@Override
public void createUser(String user, String password, String email, String name, boolean active) throws PrincipalAdapterException {
throw new NotImplementedException("createUser");
}
@Override
public void deleteUser(String user) throws PrincipalAdapterException {
throw new NotImplementedException("deleteUser");
}
@Override
public void updateUser(String user, String password, String email, String name, boolean active) throws PrincipalAdapterException {
throw new NotImplementedException("updateUser");
}
@Override
public void createRole(String role, boolean active) throws PrincipalAdapterException {
throw new NotImplementedException("createRole");
}
@Override
public void deleteRole(String role) throws PrincipalAdapterException {
throw new NotImplementedException("deleteRole");
}
@Override
public void updateRole(String role, boolean active) throws PrincipalAdapterException {
throw new NotImplementedException("updateRole");
}
@Override
public void assignRole(String user, String role) throws PrincipalAdapterException {
throw new NotImplementedException("assignRole");
}
@Override
public void removeRole(String user, String role) throws PrincipalAdapterException {
throw new NotImplementedException("removeRole");
}
}