/** * Copyright (C) 2016 Bonitasoft S.A. * Bonitasoft, 32 rue Gustave Eiffel - 38000 Grenoble * This library is free software; you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Foundation * version 2.1 of the License. * This library 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. * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. **/ package org.bonitasoft.console.common.server.utils; import org.bonitasoft.console.common.server.preferences.properties.ConfigurationFilesManager; import org.bonitasoft.engine.api.ApiAccessType; import org.bonitasoft.engine.api.PlatformAPI; import org.bonitasoft.engine.api.PlatformAPIAccessor; import org.bonitasoft.engine.api.PlatformLoginAPI; import org.bonitasoft.engine.exception.BonitaException; import org.bonitasoft.engine.exception.BonitaHomeNotSetException; import org.bonitasoft.engine.exception.ServerAPIException; import org.bonitasoft.engine.exception.UnknownAPITypeException; import org.bonitasoft.engine.session.PlatformSession; import org.bonitasoft.engine.util.APITypeManager; import java.io.IOException; import java.util.Map; /** * @author Baptiste Mesta */ public class PlatformManagementUtils { public static final String AUTOLOGIN_V6_JSON = "autologin-v6.json"; private final ConfigurationFilesManager configurationFilesManager = ConfigurationFilesManager.getInstance(); private boolean isLocal() throws UnknownAPITypeException, ServerAPIException, IOException { return ApiAccessType.LOCAL.equals(APITypeManager.getAPIType()); } PlatformSession platformLogin() throws BonitaException, IOException { if (isLocal()) { try { final Class<?> api = Class.forName("org.bonitasoft.engine.LocalLoginMechanism"); return (PlatformSession) api.getDeclaredMethod("login").invoke(api.newInstance()); } catch (final Exception e) { throw new ServerAPIException("unable to do the local login", e); } } else { return PlatformAPIAccessor.getPlatformLoginAPI().login(System.getProperty("org.bonitasoft.platform.username"), System.getProperty("org.bonitasoft.platform.password")); } } void platformLogout(final PlatformSession platformSession) throws BonitaException { final PlatformLoginAPI platformLoginAPI = PlatformAPIAccessor.getPlatformLoginAPI(); platformLoginAPI.logout(platformSession); } private void retrieveTenantsConfiguration(final PlatformAPI platformAPI) throws IOException { final Map<Long, Map<String, byte[]>> clientPlatformConfigurations = platformAPI.getClientTenantConfigurations(); for (final Map.Entry<Long, Map<String, byte[]>> tenantConfiguration : clientPlatformConfigurations.entrySet()) { configurationFilesManager.setTenantConfigurations(tenantConfiguration.getValue(), tenantConfiguration.getKey()); } } private void retrievePlatformConfiguration(final PlatformAPI platformAPI) throws IOException { final Map<String, byte[]> clientPlatformConfigurations = platformAPI.getClientPlatformConfigurations(); configurationFilesManager.setPlatformConfigurations(clientPlatformConfigurations); } private void retrieveTenantAutologinConfiguration(final PlatformAPI platformAPI, final long tenantId) throws IOException { final byte[] tenantAutologinConfigurationContent = platformAPI.getClientTenantConfiguration(tenantId, AUTOLOGIN_V6_JSON); configurationFilesManager.setTenantConfiguration(AUTOLOGIN_V6_JSON, tenantAutologinConfigurationContent, tenantId); } public void initializePlatformConfiguration() throws BonitaException, IOException { final PlatformSession platformSession = platformLogin(); final PlatformAPI platformAPI = getPlatformAPI(platformSession); retrievePlatformConfiguration(platformAPI); retrieveTenantsConfiguration(platformAPI); platformLogout(platformSession); } public void updateConfigurationFile(final long tenantId, final String file, final byte[] content) throws IOException, BonitaException { final PlatformSession platformSession = platformLogin(); final PlatformAPI platformAPI = getPlatformAPI(platformSession); platformAPI.updateClientTenantConfigurationFile(tenantId, file, content); platformLogout(platformSession); } public void retrieveTenantsConfiguration() throws BonitaException, IOException { final PlatformSession platformSession = platformLogin(); final PlatformAPI platformAPI = getPlatformAPI(platformSession); retrieveTenantsConfiguration(platformAPI); platformLogout(platformSession); } public void retrieveAutologinConfiguration(final long tenantId) throws IOException, BonitaException { final PlatformSession platformSession = platformLogin(); final PlatformAPI platformAPI = getPlatformAPI(platformSession); retrieveTenantAutologinConfiguration(platformAPI, tenantId); platformLogout(platformSession); } PlatformAPI getPlatformAPI(final PlatformSession platformSession) throws BonitaHomeNotSetException, ServerAPIException, UnknownAPITypeException { return PlatformAPIAccessor.getPlatformAPI(platformSession); } }