/* * Copyright (c) 2007, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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.wso2.carbon.um.ws.api; import org.apache.axis2.AxisFault; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.authenticator.proxy.AuthenticationAdminClient; import org.wso2.carbon.um.ws.api.internal.UserMgtWSAPIDSComponent; import org.wso2.carbon.um.ws.api.internal.UserMgtWSAPIDataHolder; import org.wso2.carbon.um.ws.api.stub.RealmConfigurationDTO; import org.wso2.carbon.um.ws.api.stub.RemoteUserRealmServiceStub; import org.wso2.carbon.user.api.RealmConfiguration; import org.wso2.carbon.user.core.AuthorizationManager; import org.wso2.carbon.user.core.UserRealm; import org.wso2.carbon.user.core.UserStoreException; import org.wso2.carbon.user.core.UserStoreManager; import org.wso2.carbon.user.core.claim.ClaimManager; import org.wso2.carbon.user.core.claim.ClaimMapping; import org.wso2.carbon.user.core.profile.ProfileConfiguration; import org.wso2.carbon.user.core.profile.ProfileConfigurationManager; import java.util.Map; public class WSRealm implements UserRealm { private static final Log log = LogFactory.getLog(WSRealm.class); private RealmConfiguration realmConfig = null; private WSUserStoreManager userStoreMan = null; private WSAuthorizationManager authzMan = null; private WSClaimManager claimManager = null; private WSProfileConfigurationManager profileManager = null; private int tenantId = -1; private RemoteUserRealmServiceStub stub = null; private static final String REALM_SERVICE_NAME = "RemoteUserRealmService"; private static final String CONNECTION_ERROR_MESSAGE = "Error while establishing web service connection "; private static final String REALM_CREATION_ERROR_MESSAGE = "Cannot create session for WSRealm"; private static final String CONFIG_RETREIVAL_ERROR_MESSAGE = "Error getting realm config"; private static final String DEFAULT_LOCAL_IP = "127.0.0.1"; private static final String LOGIN_ERROR_MESSAGE = "Error logging in "; private static final String UNSUPPORTED_MESSAGE = "Not implemented"; /** * Initialize WSRealm by Carbon * * @see org.wso2.carbon.user.core.UserRealm#init(org.wso2.carbon.user.api.RealmConfiguration, java.util.Map, int) */ @Override public void init(RealmConfiguration configBean, Map<String, Object> properties, int tenantId) throws UserStoreException { ConfigurationContext configCtxt = UserMgtWSAPIDSComponent. getCcServiceInstance(). getClientConfigContext(); init(configBean, configCtxt); } /** * Initialize WSRealm by Carbon * * @see org.wso2.carbon.user.core.UserRealm#init(org.wso2.carbon.user.api.RealmConfiguration, java.util.Map, int) */ @Override public void init(RealmConfiguration configBean, Map<String, ClaimMapping> claimMapping, Map<String, ProfileConfiguration> profileConfigs, int tenantId) throws UserStoreException { ConfigurationContext configCtxt = UserMgtWSAPIDSComponent. getCcServiceInstance(). getClientConfigContext(); init(configBean, configCtxt); } /** * Initialize WSRealm by Non-carbon environment */ public void init(RealmConfiguration configBean, ConfigurationContext configCtxt) throws UserStoreException { realmConfig = configBean; if (UserMgtWSAPIDataHolder.getInstance().getSessionCookie() == null) { synchronized (WSRealm.class) { if (UserMgtWSAPIDataHolder.getInstance().getSessionCookie() == null) { login(); } } } if (UserMgtWSAPIDataHolder.getInstance().getSessionCookie() == null) { throw new UserStoreException(REALM_CREATION_ERROR_MESSAGE); } init((String) realmConfig.getRealmProperty(WSRemoteUserMgtConstants.SERVER_URL), UserMgtWSAPIDataHolder.getInstance().getSessionCookie(), configCtxt); } /** * Initialize WSRealm by Non-carbon environment */ void init(String url, String cookie, ConfigurationContext configCtxt) throws UserStoreException { try { stub = new RemoteUserRealmServiceStub(configCtxt, url + REALM_SERVICE_NAME); ServiceClient client = stub._getServiceClient(); Options option = client.getOptions(); option.setManageSession(true); option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, this .getSessionCookie()); } catch (AxisFault e) { throw new UserStoreException("Axis error occurred while creating service client stub"); } userStoreMan = new WSUserStoreManager(url, cookie, configCtxt); authzMan = new WSAuthorizationManager(url, cookie, configCtxt); claimManager = new WSClaimManager(url, cookie, configCtxt); profileManager = new WSProfileConfigurationManager(url, cookie, configCtxt); } @Override public UserStoreManager getUserStoreManager() throws UserStoreException { return userStoreMan; } @Override public AuthorizationManager getAuthorizationManager() throws UserStoreException { return authzMan; } @Override public ClaimManager getClaimManager() throws UserStoreException { return claimManager; } @Override public ProfileConfigurationManager getProfileConfigurationManager() throws UserStoreException { return profileManager; } @Override public RealmConfiguration getRealmConfiguration() throws UserStoreException { try { RealmConfigurationDTO realmConfigurationDTO = stub.getRealmConfiguration(); return WSRealmUtil.convertToRealmConfiguration(realmConfigurationDTO); } catch (Exception e) { log.error(e.getMessage(), e); throw new UserStoreException(CONFIG_RETREIVAL_ERROR_MESSAGE, e); } } @Override public void cleanUp() throws UserStoreException { throw new UserStoreException(new UnsupportedOperationException(UNSUPPORTED_MESSAGE)); } public void login() throws UserStoreException { String userName = realmConfig.getRealmProperty(WSRemoteUserMgtConstants.USER_NAME); String password = realmConfig.getRealmProperty(WSRemoteUserMgtConstants.PASSWORD); try { ConfigurationContext configContext = UserMgtWSAPIDSComponent .getCcServiceInstance().getClientConfigContext(); AuthenticationAdminClient client = new AuthenticationAdminClient(configContext, realmConfig.getRealmProperty(WSRemoteUserMgtConstants.SERVER_URL), UserMgtWSAPIDataHolder.getInstance().getSessionCookie(), null, false); boolean isLogin = client.login(userName, password, DEFAULT_LOCAL_IP); if (isLogin) { UserMgtWSAPIDataHolder.getInstance().setSessionCookie(client.getAdminCookie()); } } catch (Exception e) { throw new UserStoreException(LOGIN_ERROR_MESSAGE + e.getMessage(), e); } } public void lastAccess() { return; } public String getSessionCookie() { return UserMgtWSAPIDataHolder.getInstance().getSessionCookie(); } protected int getTenantId() { return tenantId; } }