/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.runtime.manager.impl.identity; import org.jbpm.services.task.identity.DBUserGroupCallbackImpl; import org.jbpm.services.task.identity.DBUserInfoImpl; import org.jbpm.services.task.identity.DefaultUserInfo; import org.jbpm.services.task.identity.JAASUserGroupCallbackImpl; import org.jbpm.services.task.identity.JBossUserGroupCallbackImpl; import org.jbpm.services.task.identity.LDAPUserGroupCallbackImpl; import org.jbpm.services.task.identity.LDAPUserInfoImpl; import org.jbpm.services.task.identity.MvelUserGroupCallbackImpl; import org.jbpm.services.task.identity.PropertyUserInfoImpl; import org.kie.api.task.UserGroupCallback; import org.kie.internal.task.api.UserInfo; /** * Provider of User/Group info services such as: * <ul> * <li>UserGroupCallback</li> * <li>UserInfo</li> * </ul> * It delivers various implementation depending on configuration of system properties where: * <ul> * <li> * org.jbpm.ht.callback - specify what implementation of user group callback will be selected,one of: * <ul> * <li>mvel - default mostly used for testing</li> * <li>ldap - ldap backed implementation - requires additional configuration via jbpm.usergroup.callback.properties file</li> * <li>db - data base backed implementation - requires additional configuration via jbpm.usergroup.callback.properties file</li> * <li>jaas - delegates to container to fetch information about user data</li> * <li>props - simple property based callback - requires additional file that will keep all information (users and groups)</li> * <li>custom - custom implementation that requires to have additional system property set (FQCN of the implementation) - org.jbpm.ht.custom.callback</li> * </ul> * </li> * <li> * org.jbpm.ht.userinfo - specify what implementation of UserInfo shall be used, one of: * <ul> * <li>ldap - backed by ldap - requires configuration via jbpm-user.info.properties file</li> * <li>db - backed by data base - requires configuration via jbpm-user.info.properties file</li> * <li>props - backed by simple property file</li> * <li>custom - custom implementation that requires to have additional system property set (FQCN of the implementation) - org.jbpm.ht.custom.userinfo</li> * </ul> * </li> * </ul> * */ public class UserDataServiceProvider { private static final String USER_CALLBACK_IMPL = System.getProperty("org.jbpm.ht.callback"); private static final String USER_INFO_IMPL = System.getProperty("org.jbpm.ht.userinfo"); private static final String CUSTOM_USER_CALLBACK_IMPL = System.getProperty("org.jbpm.ht.custom.callback"); private static final String CUSTOM_USER_INFO_IMPL = System.getProperty("org.jbpm.ht.custom.userinfo"); public static UserGroupCallback getUserGroupCallback() { UserGroupCallback callback = new MvelUserGroupCallbackImpl(true); if ("ldap".equalsIgnoreCase(USER_CALLBACK_IMPL)) { callback = new LDAPUserGroupCallbackImpl(true); } else if ("db".equalsIgnoreCase(USER_CALLBACK_IMPL)) { callback = new DBUserGroupCallbackImpl(true); } else if ("mvel".equalsIgnoreCase(USER_CALLBACK_IMPL)) { callback = new MvelUserGroupCallbackImpl(true); } else if ("props".equalsIgnoreCase(USER_CALLBACK_IMPL)) { callback = new JBossUserGroupCallbackImpl(true); } else if ("jaas".equalsIgnoreCase(USER_CALLBACK_IMPL)) { callback = new JAASUserGroupCallbackImpl(true); } else if ("custom".equalsIgnoreCase(USER_CALLBACK_IMPL)) { try { callback = (UserGroupCallback) Class.forName(CUSTOM_USER_CALLBACK_IMPL).newInstance(); } catch (Exception e) { throw new RuntimeException("Unable to create instance of custom user group callback impl", e); } } return callback; } public static UserInfo getUserInfo() { UserInfo userInfo = new DefaultUserInfo(true); if ("ldap".equalsIgnoreCase(USER_INFO_IMPL)) { userInfo = new LDAPUserInfoImpl(true); } else if ("db".equalsIgnoreCase(USER_INFO_IMPL)) { userInfo = new DBUserInfoImpl(true); } else if ("props".equalsIgnoreCase(USER_INFO_IMPL)) { userInfo = new PropertyUserInfoImpl(true); } else if ("custom".equalsIgnoreCase(USER_INFO_IMPL)) { try { userInfo = (UserInfo) Class.forName(CUSTOM_USER_INFO_IMPL).newInstance(); } catch (Exception e) { throw new RuntimeException("Unable to create instance of custom user info impl", e); } } return userInfo; } }