diff --git a/assembly/assembly-wsmaster-war/pom.xml b/assembly/assembly-wsmaster-war/pom.xml index e3fb5f38f0..f27cac8697 100644 --- a/assembly/assembly-wsmaster-war/pom.xml +++ b/assembly/assembly-wsmaster-war/pom.xml @@ -59,10 +59,6 @@ com.google.inject.extensions guice-servlet - - com.h2database - h2 - io.jaegertracing jaeger-client @@ -207,14 +203,6 @@ org.eclipse.che.core che-core-db - - org.eclipse.che.core - che-core-db-vendor-h2 - - - org.eclipse.che.core - che-core-db-vendor-mysql - org.eclipse.che.core che-core-db-vendor-postgresql @@ -243,10 +231,6 @@ org.eclipse.che.core che-core-tracing-web - - org.eclipse.che.core - wsmaster-local - org.eclipse.che.infrastructure infrastructure-distributed @@ -474,8 +458,6 @@ org.slf4j:log4j-over-slf4j ch.qos.logback:logback-classic net.logstash.logback:logstash-logback-encoder - com.h2database:h2 - org.eclipse.che.core:che-core-db-vendor-mysql org.eclipse.che.core:che-core-sql-schema org.eclipse.che.core:che-core-api-ssh-shared org.eclipse.che.multiuser:che-multiuser-sql-schema diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/CommonJndiDataSourceFactory.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/CommonJndiDataSourceFactory.java deleted file mode 100644 index e32dadd3ed..0000000000 --- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/CommonJndiDataSourceFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2012-2018 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.api; - -import java.util.Hashtable; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.spi.ObjectFactory; -import org.eclipse.che.core.db.h2.H2SQLJndiDataSourceFactory; -import org.eclipse.che.core.db.postgresql.PostgreSQLJndiDataSourceFactory; - -/** - * Creates appropriate JNDI data source factory instance depending on system variable. - * - * @author Max Shaposhnik (mshaposh@redhat.com) - */ -public class CommonJndiDataSourceFactory implements ObjectFactory { - - private final ObjectFactory delegate; - - public CommonJndiDataSourceFactory() throws Exception { - delegate = - Boolean.valueOf(System.getenv("CHE_MULTIUSER")) - ? new PostgreSQLJndiDataSourceFactory() - : new H2SQLJndiDataSourceFactory(); - } - - @Override - public Object getObjectInstance(Object o, Name name, Context context, Hashtable hashtable) - throws Exception { - return delegate.getObjectInstance(o, name, context, hashtable); - } -} diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java index d33094764f..649aacaac8 100644 --- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java +++ b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java @@ -47,6 +47,7 @@ import org.eclipse.che.api.infraproxy.server.InfraProxyModule; import org.eclipse.che.api.metrics.WsMasterMetricsModule; import org.eclipse.che.api.system.server.ServiceTermination; import org.eclipse.che.api.system.server.SystemModule; +import org.eclipse.che.api.user.server.NotImplementedTokenValidator; import org.eclipse.che.api.user.server.TokenValidator; import org.eclipse.che.api.user.server.jpa.JpaPreferenceDao; import org.eclipse.che.api.user.server.jpa.JpaProfileDao; @@ -75,7 +76,6 @@ import org.eclipse.che.api.workspace.server.spi.provision.env.ProjectsRootEnvVar import org.eclipse.che.api.workspace.server.spi.provision.env.WorkspaceIdEnvVarProvider; import org.eclipse.che.api.workspace.server.spi.provision.env.WorkspaceNameEnvVarProvider; import org.eclipse.che.api.workspace.server.spi.provision.env.WorkspaceNamespaceNameEnvVarProvider; -import org.eclipse.che.api.workspace.server.token.MachineTokenProvider; import org.eclipse.che.api.workspace.server.wsplugins.ChePluginsApplier; import org.eclipse.che.commons.observability.deploy.ExecutorWrapperModule; import org.eclipse.che.core.db.DBTermination; @@ -280,11 +280,7 @@ public class WsMasterModule extends AbstractModule { installDefaultSecureServerExposer(infrastructure); install(new org.eclipse.che.security.oauth1.BitbucketModule()); - if (Boolean.valueOf(System.getenv("CHE_MULTIUSER"))) { - configureMultiUserMode(persistenceProperties, infrastructure); - } else { - configureSingleUserMode(persistenceProperties, infrastructure); - } + configureMultiUserMode(persistenceProperties, infrastructure); install( new com.google.inject.persist.jpa.JpaPersistModule("main") @@ -321,43 +317,6 @@ public class WsMasterModule extends AbstractModule { install(new OpenShiftOAuthModule()); } - private void configureSingleUserMode( - Map persistenceProperties, String infrastructure) { - persistenceProperties.put( - PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, - "org.eclipse.che.core.db.h2.jpa.eclipselink.H2ExceptionHandler"); - bind(TokenValidator.class).to(org.eclipse.che.api.local.DummyTokenValidator.class); - bind(MachineTokenProvider.class).to(MachineTokenProvider.EmptyMachineTokenProvider.class); - - bind(DataSource.class).toProvider(org.eclipse.che.core.db.h2.H2DataSourceProvider.class); - - install(new org.eclipse.che.api.user.server.jpa.UserJpaModule()); - install(new org.eclipse.che.api.workspace.server.jpa.WorkspaceJpaModule()); - install(new org.eclipse.che.api.devfile.server.jpa.UserDevfileJpaModule()); - - bind(org.eclipse.che.api.user.server.CheUserCreator.class); - - bindConstant().annotatedWith(Names.named("che.agents.auth_enabled")).to(false); - - bind(org.eclipse.che.security.oauth.shared.OAuthTokenProvider.class) - .to(org.eclipse.che.security.oauth.OAuthAuthenticatorTokenProvider.class); - bind(OAuthAPI.class).to(EmbeddedOAuthAPI.class); - - bind(RemoteSubscriptionStorage.class) - .to(org.eclipse.che.api.core.notification.InmemoryRemoteSubscriptionStorage.class); - bind(WorkspaceLockService.class) - .to(org.eclipse.che.api.workspace.server.DefaultWorkspaceLockService.class); - bind(WorkspaceStatusCache.class) - .to(org.eclipse.che.api.workspace.server.DefaultWorkspaceStatusCache.class); - - install(new org.eclipse.che.api.workspace.activity.inject.WorkspaceActivityModule()); - - // In single user mode jwtproxy provisioner isn't actually bound at all, but since - // it is the new default, we need to "fake it" by binding the passthrough provisioner - // as the jwtproxy impl. - configureImpostorJwtProxySecureProvisioner(infrastructure); - } - private void configureMultiUserMode( Map persistenceProperties, String infrastructure) { if (OpenShiftInfrastructure.NAME.equals(infrastructure) @@ -436,7 +395,7 @@ public class WsMasterModule extends AbstractModule { install(new OrganizationJpaModule()); if (Boolean.parseBoolean(System.getenv("CHE_AUTH_NATIVEUSER"))) { - bind(TokenValidator.class).to(org.eclipse.che.api.local.DummyTokenValidator.class); + bind(TokenValidator.class).to(NotImplementedTokenValidator.class); bind(JwtParser.class).to(DefaultJwtParser.class); bind(ProfileDao.class).to(JpaProfileDao.class); bind(OAuthAPI.class).to(EmbeddedOAuthAPI.class); diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterServletModule.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterServletModule.java index a497176a8e..52ca9dde48 100644 --- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterServletModule.java +++ b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterServletModule.java @@ -45,16 +45,12 @@ public class WsMasterServletModule extends ServletModule { serveRegex("^(?!/websocket.?)(.*)").with(GuiceEverrestServlet.class); install(new org.eclipse.che.swagger.deploy.BasicSwaggerConfigurationModule()); - if (Boolean.valueOf(System.getenv("CHE_MULTIUSER"))) { - if (Boolean.parseBoolean(System.getenv("CHE_AUTH_NATIVEUSER"))) { - LOG.info("Running in native-user mode ..."); - configureNativeUserMode(); - } else { - LOG.info("Running in classic multi-user mode ..."); - configureMultiUserMode(); - } + if (Boolean.parseBoolean(System.getenv("CHE_AUTH_NATIVEUSER"))) { + LOG.info("Running in native-user mode ..."); + configureNativeUserMode(); } else { - configureSingleUserMode(); + LOG.info("Running in classic multi-user mode ..."); + configureMultiUserMode(); } if (Boolean.valueOf(System.getenv("CHE_METRICS_ENABLED"))) { @@ -72,10 +68,6 @@ public class WsMasterServletModule extends ServletModule { } } - private void configureSingleUserMode() { - filter("/*").through(org.eclipse.che.api.local.filters.EnvironmentInitializationFilter.class); - } - private void configureMultiUserMode() { filterRegex(".*").through(MachineLoginFilter.class); install(new KeycloakServletModule()); diff --git a/assembly/assembly-wsmaster-war/src/main/webapp/META-INF/context.xml b/assembly/assembly-wsmaster-war/src/main/webapp/META-INF/context.xml index 4c142919b6..e1fe34a086 100644 --- a/assembly/assembly-wsmaster-war/src/main/webapp/META-INF/context.xml +++ b/assembly/assembly-wsmaster-war/src/main/webapp/META-INF/context.xml @@ -16,5 +16,5 @@ + factory="org.eclipse.che.core.db.postgresql.PostgreSQLJndiDataSourceFactory"/> diff --git a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties index b4cb69a43e..5b3228fc0b 100644 --- a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +++ b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties @@ -15,9 +15,6 @@ ### {prod-short} server -# Folder where {prod-short} stores internal data objects. -che.database=${che.home}/storage - # API service. Browsers initiate REST communications to {prod-short} server with this URL. che.api=http://${CHE_HOST}:${CHE_PORT}/api diff --git a/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2DataSourceProvider.java b/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2DataSourceProvider.java deleted file mode 100644 index 9d90d76997..0000000000 --- a/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2DataSourceProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2012-2018 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.core.db.h2; - -import java.nio.file.Paths; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; -import javax.sql.DataSource; -import org.eclipse.che.core.db.JndiDataSourceProvider; - -/** - * Provides data source for h2 database. - * - * @author Yevhenii Voevodin - */ -public class H2DataSourceProvider implements Provider { - - @Inject - @Named("che.database") - private String storageRoot; - - @Inject private JndiDataSourceProvider jndiDataSourceProvider; - - @Override - public DataSource get() { - System.setProperty("h2.baseDir", Paths.get(storageRoot).resolve("db").toString()); - return jndiDataSourceProvider.get(); - } -} diff --git a/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2SQLJndiDataSourceFactory.java b/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2SQLJndiDataSourceFactory.java deleted file mode 100644 index 34a4f5abee..0000000000 --- a/core/che-core-db-vendor-h2/src/main/java/org/eclipse/che/core/db/h2/H2SQLJndiDataSourceFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012-2018 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.core.db.h2; - -import static com.google.common.base.MoreObjects.firstNonNull; - -import org.eclipse.che.core.db.JNDIDataSourceFactory; - -/** - * Environment params based JNDI data source factory for H2SQL. - * - * @author Sergii Kabashniuk - */ -public class H2SQLJndiDataSourceFactory extends JNDIDataSourceFactory { - - private static final String DEFAULT_USERNAME = ""; - private static final String DEFAULT_PASSWORD = ""; - private static final String DEFAULT_URL = "jdbc:h2:che"; - private static final String DEFAULT_DRIVER__CLASS__NAME = "org.h2.Driver"; - private static final String DEFAULT_MAX__TOTAL = "8"; - private static final String DEFAULT_MAX__IDLE = "2"; - private static final String DEFAULT_MAX__WAIT__MILLIS = "-1"; - - public H2SQLJndiDataSourceFactory() throws Exception { - super( - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_USERNAME")), DEFAULT_USERNAME), - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_PASSWORD")), DEFAULT_PASSWORD), - firstNonNull(nullStringToNullReference(System.getenv("CHE_JDBC_URL")), DEFAULT_URL), - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_DRIVER__CLASS__NAME")), - DEFAULT_DRIVER__CLASS__NAME), - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_MAX__TOTAL")), DEFAULT_MAX__TOTAL), - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_MAX__IDLE")), DEFAULT_MAX__IDLE), - firstNonNull( - nullStringToNullReference(System.getenv("CHE_JDBC_MAX__WAIT__MILLIS")), - DEFAULT_MAX__WAIT__MILLIS)); - } -} diff --git a/wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/DummyTokenValidator.java b/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/NotImplementedTokenValidator.java similarity index 53% rename from wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/DummyTokenValidator.java rename to wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/NotImplementedTokenValidator.java index ada33c3110..009d313643 100644 --- a/wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/DummyTokenValidator.java +++ b/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/NotImplementedTokenValidator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2018 Red Hat, Inc. + * Copyright (c) 2012-2021 Red Hat, Inc. * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ @@ -9,25 +9,17 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -package org.eclipse.che.api.local; +package org.eclipse.che.api.user.server; import javax.inject.Singleton; import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.core.model.user.User; -import org.eclipse.che.api.user.server.TokenValidator; -import org.eclipse.che.api.user.server.model.impl.UserImpl; -/** - * Dummy implementation of {@link org.eclipse.che.api.user.server.TokenValidator}. - * - * @author Ann Shumilova - * @author Dmitry Shnurenko - */ @Singleton -public class DummyTokenValidator implements TokenValidator { +public class NotImplementedTokenValidator implements TokenValidator { @Override public User validateToken(String token) throws ConflictException { - return new UserImpl("che", "che", "che@eclipse.org"); + throw new ConflictException("Token validation do not implemented"); } } diff --git a/wsmaster/pom.xml b/wsmaster/pom.xml index 15e11b908f..b80d11ee3f 100644 --- a/wsmaster/pom.xml +++ b/wsmaster/pom.xml @@ -45,7 +45,6 @@ che-core-api-factory-bitbucket-server che-core-api-ssh che-core-api-ssh-shared - wsmaster-local che-core-sql-schema che-core-api-system che-core-api-system-shared diff --git a/wsmaster/wsmaster-local/pom.xml b/wsmaster/wsmaster-local/pom.xml deleted file mode 100644 index f337c198a7..0000000000 --- a/wsmaster/wsmaster-local/pom.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - 4.0.0 - - che-master-parent - org.eclipse.che.core - 7.37.0-SNAPSHOT - - wsmaster-local - Che Core :: API :: Impl Local - - false - - - - io.opentracing - opentracing-api - - - javax.inject - javax.inject - - - org.eclipse.che.core - che-core-api-core - - - org.eclipse.che.core - che-core-api-model - - - org.eclipse.che.core - che-core-api-user - - - org.eclipse.che.core - che-core-commons-tracing - - - javax.servlet - javax.servlet-api - provided - - - org.eclipse.che.core - che-core-api-workspace-shared - provided - - - ch.qos.logback - logback-classic - test - - - com.google.inject.extensions - guice-persist - test - - - com.h2database - h2 - test - - - org.eclipse.che.core - che-core-commons-test - test - - - org.eclipse.che.core - che-core-db - test - - - org.eclipse.che.core - che-core-db-vendor-h2 - test - - - org.eclipse.che.core - che-core-sql-schema - test - - - org.eclipse.persistence - javax.persistence - test - - - org.eclipse.persistence - org.eclipse.persistence.core - test - - - org.everrest - everrest-assured - test - - - org.mockito - mockito-core - test - - - org.mockito - mockito-testng - test - - - org.testng - testng - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - resource-dependencies - process-test-resources - - unpack-dependencies - - - che-core-sql-schema - che-schema/ - ${project.build.directory} - - - - - - - diff --git a/wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/filters/EnvironmentInitializationFilter.java b/wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/filters/EnvironmentInitializationFilter.java deleted file mode 100644 index 942628f049..0000000000 --- a/wsmaster/wsmaster-local/src/main/java/org/eclipse/che/api/local/filters/EnvironmentInitializationFilter.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2012-2021 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.api.local.filters; - -import io.opentracing.Span; -import io.opentracing.Tracer; -import java.io.IOException; -import java.security.Principal; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import org.eclipse.che.commons.env.EnvironmentContext; -import org.eclipse.che.commons.subject.Subject; -import org.eclipse.che.commons.subject.SubjectImpl; -import org.eclipse.che.commons.tracing.TracingTags; - -/** - * Fills environment context with information about current subject. - * - * @author Dmitry Shnurenko - */ -@Singleton -public class EnvironmentInitializationFilter implements Filter { - - @Inject Tracer tracer; - - @Override - public void init(FilterConfig filterConfig) throws ServletException {} - - @Override - public final void doFilter( - ServletRequest request, ServletResponse response, FilterChain filterChain) - throws IOException, ServletException { - final HttpServletRequest httpRequest = (HttpServletRequest) request; - Subject subject = new SubjectImpl("che", "che", "dummy_token", false); - final EnvironmentContext environmentContext = EnvironmentContext.getCurrent(); - try { - environmentContext.setSubject(subject); - Span activeSpan = tracer.activeSpan(); - if (activeSpan != null) { - TracingTags.USER_ID.set(tracer.activeSpan(), subject.getUserId()); - } - filterChain.doFilter(addUserInRequest(httpRequest, subject), response); - } finally { - EnvironmentContext.reset(); - } - } - - private HttpServletRequest addUserInRequest( - final HttpServletRequest httpRequest, final Subject subject) { - return new HttpServletRequestWrapper(httpRequest) { - @Override - public String getRemoteUser() { - return subject.getUserName(); - } - - @Override - public Principal getUserPrincipal() { - return () -> subject.getUserName(); - } - }; - } - - @Override - public void destroy() {} -}