diff --git a/assembly/assembly-main/pom.xml b/assembly/assembly-main/pom.xml
index 8ceefc74d3..bcd6530902 100644
--- a/assembly/assembly-main/pom.xml
+++ b/assembly/assembly-main/pom.xml
@@ -104,7 +104,7 @@
false
false
- ${project.basedir}/src/assembly/assembly.xml
+ ${project.basedir}/src/assembly/assembly.xml
eclipse-che-${project.version}
posix
diff --git a/assembly2/assembly-wsmaster-war/pom.xml b/assembly2/assembly-wsmaster-war/pom.xml
index f1c438a856..08a0d7ebb8 100644
--- a/assembly2/assembly-wsmaster-war/pom.xml
+++ b/assembly2/assembly-wsmaster-war/pom.xml
@@ -32,6 +32,18 @@
assembly-wsmaster-war
war
+
+ org.eclipse.che.core
+ che-core-api-workspace
+
+
+ org.eclipse.che.core
+ che-core-api-workspace
+
+
+ org.eclipse.che.core
+ che-machine-authentication
+
org.eclipse.che.plugin
che-plugin-keycloak-server
diff --git a/assembly2/dashboard/src/main/patches/src/app/index.module.ts.patch b/assembly2/dashboard/src/main/patches/src/app/index.module.ts.patch
index efef6b2305..d803c8a92e 100644
--- a/assembly2/dashboard/src/main/patches/src/app/index.module.ts.patch
+++ b/assembly2/dashboard/src/main/patches/src/app/index.module.ts.patch
@@ -1,8 +1,8 @@
--- src/app/index.module.ts
+++ src/app/index.module.ts
-@@ -32,12 +32,36 @@
- import {StacksConfig} from './stacks/stacks-config';
- import {DemoComponentsCtrl} from './demo-components/demo-components.controller';
+@@ -36,12 +36,36 @@
+ import {CheBranding} from '../components/branding/che-branding.factory';
+ import {ChePreferences} from '../components/api/che-preferences.factory';
-
+import * as Keycloak from '../components/keycloak/keycloak';
+
diff --git a/plugins/plugin-docker/che-plugin-docker-machine/pom.xml b/plugins/plugin-docker/che-plugin-docker-machine/pom.xml
index cc1021e807..eb12010b9a 100644
--- a/plugins/plugin-docker/che-plugin-docker-machine/pom.xml
+++ b/plugins/plugin-docker/che-plugin-docker-machine/pom.xml
@@ -93,6 +93,10 @@
org.eclipse.che.core
che-core-commons-schedule
+
+ org.eclipse.che.core
+ che-machine-authentication
+
org.eclipse.che.plugin
che-plugin-docker-client
diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceRuntimeInfo.java b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceRuntimeInfo.java
index bb1ad21831..99feaf6e42 100644
--- a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceRuntimeInfo.java
+++ b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceRuntimeInfo.java
@@ -84,6 +84,8 @@ public class DockerInstanceRuntimeInfo implements MachineRuntimeInfo {
*/
public static final String USER_TOKEN = "USER_TOKEN";
+ public static final String MACHINE_TOKEN = "MACHINE_TOKEN";
+
private final ContainerInfo info;
private final Map serversConf;
private final String internalHost;
diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/MachineProviderImpl.java b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/MachineProviderImpl.java
index 5fd1681a89..9fdd1252c9 100644
--- a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/MachineProviderImpl.java
+++ b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/MachineProviderImpl.java
@@ -76,6 +76,7 @@ import org.eclipse.che.plugin.docker.client.params.network.ConnectContainerToNet
import org.eclipse.che.plugin.docker.client.params.network.CreateNetworkParams;
import org.eclipse.che.plugin.docker.client.params.network.RemoveNetworkParams;
import org.eclipse.che.plugin.docker.machine.node.DockerNode;
+import org.eclipse.che.machine.authentication.server.MachineTokenRegistry;
import org.slf4j.Logger;
import javax.inject.Inject;
@@ -149,6 +150,7 @@ public class MachineProviderImpl implements MachineInstanceProvider {
private final DockerInstanceStopDetector dockerInstanceStopDetector;
private final RequestTransmitter transmitter;
private final JsonRpcEndpointToMachineNameHolder jsonRpcEndpointToMachineNameHolder;
+ private final MachineTokenRegistry machineTokenRegistry;
private final boolean doForcePullImage;
private final boolean privilegedMode;
private final int pidsLimit;
@@ -179,6 +181,7 @@ public class MachineProviderImpl implements MachineInstanceProvider {
DockerInstanceStopDetector dockerInstanceStopDetector,
RequestTransmitter transmitter,
JsonRpcEndpointToMachineNameHolder jsonRpcEndpointToMachineNameHolder,
+ MachineTokenRegistry machineTokenRegistry,
@Named("machine.docker.dev_machine.machine_servers") Set devMachineServers,
@Named("machine.docker.machine_servers") Set allMachinesServers,
@Named("machine.docker.dev_machine.machine_volumes") Set devMachineSystemVolumes,
@@ -204,6 +207,7 @@ public class MachineProviderImpl implements MachineInstanceProvider {
this.docker = dockerProvider.get();
this.dockerCredentials = dockerCredentials;
this.dockerMachineFactory = dockerMachineFactory;
+ this.machineTokenRegistry = machineTokenRegistry;
this.dockerInstanceStopDetector = dockerInstanceStopDetector;
this.transmitter = transmitter;
this.doForcePullImage = doForcePullImage;
@@ -658,6 +662,7 @@ public class MachineProviderImpl implements MachineInstanceProvider {
env = new HashMap<>(devMachineEnvVariables);
env.put(DockerInstanceRuntimeInfo.USER_TOKEN, getUserToken(workspaceId));
+ env.put(DockerInstanceRuntimeInfo.MACHINE_TOKEN, getMachineToken(workspaceId));
} else {
portsToExpose = commonMachinePortsToExpose;
env = new HashMap<>(commonMachineEnvVariables);
@@ -788,6 +793,15 @@ public class MachineProviderImpl implements MachineInstanceProvider {
return EnvironmentContext.getCurrent().getSubject().getToken();
}
+ protected String getMachineToken(String wsId) {
+ String userToken = null;
+ try {
+ userToken = machineTokenRegistry.getOrCreateToken(EnvironmentContext.getCurrent().getSubject().getUserId(), wsId);
+ } catch (NotFoundException ignore) {
+ }
+ return MoreObjects.firstNonNull(userToken, "");
+ }
+
/**
* Returns set that contains all non empty and non nullable values from specified set
*/
diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/MachineProviderImplTest.java b/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/MachineProviderImplTest.java
index e2d728eeae..34ccfbf9c4 100644
--- a/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/MachineProviderImplTest.java
+++ b/plugins/plugin-docker/che-plugin-docker-machine/src/test/java/org/eclipse/che/plugin/docker/machine/MachineProviderImplTest.java
@@ -44,6 +44,7 @@ import org.eclipse.che.plugin.docker.client.params.RemoveImageParams;
import org.eclipse.che.plugin.docker.client.params.StartContainerParams;
import org.eclipse.che.plugin.docker.client.params.TagParams;
import org.eclipse.che.plugin.docker.machine.node.DockerNode;
+import org.eclipse.che.machine.authentication.server.MachineTokenRegistry;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
@@ -143,6 +144,9 @@ public class MachineProviderImplTest {
@Mock
private RecipeRetriever recipeRetriever;
+ @Mock
+ private MachineTokenRegistry tokenRegistry;
+
@Mock
private WindowsPathEscaper pathEscaper;
@@ -1784,6 +1788,7 @@ public class MachineProviderImplTest {
dockerInstanceStopDetector,
transmitter,
jsonRpcEndpointToMachineNameHolder,
+ tokenRegistry,
devMachineServers,
allMachineServers,
devMachineVolumes,
@@ -1807,7 +1812,6 @@ public class MachineProviderImplTest {
emptyMap()));
doNothing().when(provider).readContainerLogsInSeparateThread(anyString(), anyString(),
anyString(), any(LineConsumer.class));
-
return provider;
}
}
diff --git a/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml b/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml
index 26d23daeba..5c15b8dff7 100644
--- a/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml
+++ b/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml
@@ -246,31 +246,31 @@
- integration
-
- false
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
-
-
- integration-test
- verify
-
-
-
-
-
- **/maven/server/**
-
-
-
-
-
-
+ integration
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+ **/maven/server/**
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 3457c455cb..2ecb509306 100644
--- a/pom.xml
+++ b/pom.xml
@@ -528,6 +528,16 @@
che-ide-core
${che.version}
+
+ org.eclipse.che.core
+ che-machine-authentication
+ ${che.version}
+
+
+ org.eclipse.che.core
+ che-machine-authentication-shared
+ ${che.version}
+
org.eclipse.che.core
che-wsagent-core
diff --git a/wsagent/che-core-api-languageserver/pom.xml b/wsagent/che-core-api-languageserver/pom.xml
index 8931d79d0e..1e6d7000b9 100644
--- a/wsagent/che-core-api-languageserver/pom.xml
+++ b/wsagent/che-core-api-languageserver/pom.xml
@@ -29,10 +29,10 @@
com.google.code.gson
gson
-
- com.google.guava
- guava
-
+
+ com.google.guava
+ guava
+
com.google.inject
guice
@@ -137,12 +137,12 @@
**/JsonUtil.java
**/DtoConversionTest.java
**/LanguageDescription.java
- **/ServerCapabilitiesOverlay.java
- **/DocumentFilter.java
- **/CheLanguageClient.java
- **/LanguageServerDescription.java
- **/LSOperation.java
- **/OperationUtil.java
+ **/ServerCapabilitiesOverlay.java
+ **/DocumentFilter.java
+ **/CheLanguageClient.java
+ **/LanguageServerDescription.java
+ **/LSOperation.java
+ **/OperationUtil.java
diff --git a/wsmaster/pom.xml b/wsmaster/pom.xml
index 92e45bca5b..d90d17dbed 100644
--- a/wsmaster/pom.xml
+++ b/wsmaster/pom.xml
@@ -44,5 +44,7 @@
integration-tests
che-core-api-system
che-core-api-system-shared
+ che-machine-authentication-shared
+ che-machine-authentication