From 861f4eccbbab8c67ba13dbc55408b954df0eaabf Mon Sep 17 00:00:00 2001 From: Sergii Leshchenko Date: Wed, 27 Sep 2017 14:37:21 +0300 Subject: [PATCH] CHE-6463 Remove machine auth code that is outdated in spi --- .../assembly-wsmaster-war/pom.xml | 8 +- .../che/api/deploy/CheWsMasterModule.java | 6 - .../keycloak/ide/KeycloakProvider.java | 2 +- .../pom.xml | 4 - .../ide/CheAuthMachineLinksModifier.java | 51 ----- .../ide/MachineAsyncRequestFactory.java | 15 +- .../ide/MachineTokenServiceClientImpl.java | 4 +- .../ide/inject/MachineAuthGinModule.java | 4 - .../pom.xml | 4 - .../server/AuthWsAgentHealthChecker.java | 67 ------- .../server/MachineAuthLinksInjector.java | 121 ------------ .../server/MachineSessionInvalidator.java | 3 +- .../WorkspaceServiceAuthLinksInjector.java | 184 ------------------ .../MachineServiceAuthLinksInjectorTest.java | 118 ----------- .../MachineTokenInterceptorTest.java | 7 - 15 files changed, 10 insertions(+), 588 deletions(-) delete mode 100644 multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/CheAuthMachineLinksModifier.java delete mode 100644 multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/AuthWsAgentHealthChecker.java delete mode 100644 multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineAuthLinksInjector.java delete mode 100644 multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/WorkspaceServiceAuthLinksInjector.java delete mode 100644 multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/MachineServiceAuthLinksInjectorTest.java diff --git a/assembly-multiuser/assembly-wsmaster-war/pom.xml b/assembly-multiuser/assembly-wsmaster-war/pom.xml index 320ea19bec..73a21ab4b1 100644 --- a/assembly-multiuser/assembly-wsmaster-war/pom.xml +++ b/assembly-multiuser/assembly-wsmaster-war/pom.xml @@ -103,10 +103,10 @@ org.eclipse.che.plugin che-plugin-activity-wsmaster - - org.eclipse.che.plugin - che-plugin-docker-machine-auth - + + + + org.postgresql postgresql diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/CheWsMasterModule.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/CheWsMasterModule.java index 11ceeb2850..c484a60b16 100644 --- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/CheWsMasterModule.java +++ b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/CheWsMasterModule.java @@ -27,12 +27,6 @@ public class CheWsMasterModule extends AbstractModule { bind(TokenValidator.class).to(org.eclipse.che.api.local.DummyTokenValidator.class); - bind(org.eclipse.che.api.agent.server.WsAgentHealthChecker.class) - .to(org.eclipse.che.api.agent.server.WsAgentHealthCheckerImpl.class); - - bind(org.eclipse.che.api.environment.server.MachineInstanceProvider.class) - .to(org.eclipse.che.plugin.docker.machine.MachineProviderImpl.class); - bind(org.eclipse.che.api.workspace.server.stack.StackLoader.class); bind(DataSource.class).toProvider(org.eclipse.che.core.db.h2.H2DataSourceProvider.class); diff --git a/multiuser/keycloak/che-multiuser-keycloak-ide/src/main/java/org/eclipse/che/multiuser/keycloak/ide/KeycloakProvider.java b/multiuser/keycloak/che-multiuser-keycloak-ide/src/main/java/org/eclipse/che/multiuser/keycloak/ide/KeycloakProvider.java index 5d51de4ed8..2dda308197 100644 --- a/multiuser/keycloak/che-multiuser-keycloak-ide/src/main/java/org/eclipse/che/multiuser/keycloak/ide/KeycloakProvider.java +++ b/multiuser/keycloak/che-multiuser-keycloak-ide/src/main/java/org/eclipse/che/multiuser/keycloak/ide/KeycloakProvider.java @@ -40,7 +40,7 @@ public class KeycloakProvider { public KeycloakProvider(AppContext appContext, PromiseProvider promiseProvider) { this.appContext = appContext; String keycloakSettings = - getKeycloakSettings(KeycloakConstants.getEndpoint(appContext.getMasterEndpoint())); + getKeycloakSettings(KeycloakConstants.getEndpoint(appContext.getMasterApiEndpoint())); Map settings = JsonHelper.toMap(keycloakSettings); Log.info(getClass(), "Keycloak settings: ", settings); diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml index b6538a021f..1c51f5a18b 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml @@ -41,10 +41,6 @@ javax.annotation javax.annotation-api - - org.eclipse.che.core - che-core-api-core - org.eclipse.che.core che-core-api-dto diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/CheAuthMachineLinksModifier.java b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/CheAuthMachineLinksModifier.java deleted file mode 100644 index 525a858ac9..0000000000 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/CheAuthMachineLinksModifier.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.multiuser.machine.authentication.ide; - -import static org.eclipse.che.api.machine.shared.Constants.WSAGENT_WEBSOCKET_REFERENCE; - -import com.google.inject.Singleton; -import org.eclipse.che.api.core.rest.shared.dto.Link; -import org.eclipse.che.api.core.rest.shared.dto.LinkParameter; -import org.eclipse.che.ide.api.machine.CheWsAgentLinksModifier; -import org.eclipse.che.ide.api.machine.DevMachine; - -/** - * Inserts in each URL machine token. - * - * @author Anton Korneta - */ -@Singleton -public class CheAuthMachineLinksModifier extends CheWsAgentLinksModifier { - private static final String MACHINE_TOKEN = "token"; - - private String machineToken; - - @Override - public void initialize(DevMachine devMachine) { - Link link = devMachine.getMachineLink(WSAGENT_WEBSOCKET_REFERENCE); - if (link != null) { - for (LinkParameter parameter : link.getParameters()) { - if (MACHINE_TOKEN.equals(parameter.getName())) { - machineToken = parameter.getDefaultValue(); - } - } - } - } - - @Override - public String modify(String agentUrl) { - if (machineToken != null) { - return agentUrl + (agentUrl.contains("?") ? '&' : '?') + "token=" + machineToken; - } - throw new RuntimeException("Failed to modify url, machine token in not specified"); - } -} diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineAsyncRequestFactory.java b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineAsyncRequestFactory.java index 5451700cd0..422c6f2352 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineAsyncRequestFactory.java +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineAsyncRequestFactory.java @@ -25,7 +25,6 @@ import org.eclipse.che.api.promises.client.Function; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.api.app.AppContext; -import org.eclipse.che.ide.api.machine.DevMachine; import org.eclipse.che.ide.api.workspace.event.WorkspaceStoppedEvent; import org.eclipse.che.ide.commons.exception.UnmarshallerException; import org.eclipse.che.ide.dto.DtoFactory; @@ -49,7 +48,6 @@ public class MachineAsyncRequestFactory extends AsyncRequestFactory private final AppContext appContext; private String machineToken; - private String wsAgentBaseUrl; private String csrfToken; @Inject @@ -101,7 +99,6 @@ public class MachineAsyncRequestFactory extends AsyncRequestFactory @Override public void onWorkspaceStopped(WorkspaceStoppedEvent event) { machineToken = null; - wsAgentBaseUrl = null; } /** @@ -115,22 +112,14 @@ public class MachineAsyncRequestFactory extends AsyncRequestFactory || !RUNNING.equals(appContext.getWorkspace().getStatus())) { return false; //ws-agent not started } - if (isNullOrEmpty(wsAgentBaseUrl)) { - final DevMachine devMachine = appContext.getDevMachine(); - if (devMachine != null) { - wsAgentBaseUrl = devMachine.getWsAgentBaseUrl(); - } else { - return false; - } - } - return url.contains(nullToEmpty(wsAgentBaseUrl)); + return url.contains(nullToEmpty(appContext.getWsAgentServerApiEndpoint())); } private Promise requestCsrfToken() { if (csrfToken != null) { return Promises.resolve(csrfToken); } - return createGetRequest(appContext.getMasterEndpoint() + "/profile") + return createGetRequest(appContext.getMasterApiEndpoint() + "/profile") .header(CSRF_TOKEN_HEADER_NAME, "Fetch") .send( new Unmarshallable() { diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineTokenServiceClientImpl.java b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineTokenServiceClientImpl.java index fb2e7f4497..4538ab7a1a 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineTokenServiceClientImpl.java +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/MachineTokenServiceClientImpl.java @@ -16,7 +16,6 @@ import org.eclipse.che.api.user.shared.dto.UserDto; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.rest.AsyncRequestFactory; import org.eclipse.che.ide.rest.DtoUnmarshallerFactory; -import org.eclipse.che.ide.rest.RestContext; import org.eclipse.che.multiuser.machine.authentication.shared.dto.MachineTokenDto; /** @@ -34,14 +33,13 @@ public class MachineTokenServiceClientImpl implements MachineTokenServiceClient @Inject public MachineTokenServiceClientImpl( - @RestContext String restContext, AppContext appContext, AsyncRequestFactory asyncRequestFactory, DtoUnmarshallerFactory dtoUnmarshallerFactory) { this.appContext = appContext; this.asyncRequestFactory = asyncRequestFactory; this.dtoUnmarshallerFactory = dtoUnmarshallerFactory; - this.baseUrl = restContext + MACHINE_TOKEN_SERVICE_PATH; + this.baseUrl = appContext.getMasterApiEndpoint() + MACHINE_TOKEN_SERVICE_PATH; } public Promise getMachineToken() { diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/inject/MachineAuthGinModule.java b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/inject/MachineAuthGinModule.java index f03501f069..247d2c3a04 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/inject/MachineAuthGinModule.java +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/src/main/java/org/eclipse/che/multiuser/machine/authentication/ide/inject/MachineAuthGinModule.java @@ -13,8 +13,6 @@ package org.eclipse.che.multiuser.machine.authentication.ide.inject; import com.google.gwt.inject.client.AbstractGinModule; import com.google.inject.Singleton; import org.eclipse.che.ide.api.extension.ExtensionGinModule; -import org.eclipse.che.ide.api.machine.CheWsAgentLinksModifier; -import org.eclipse.che.multiuser.machine.authentication.ide.CheAuthMachineLinksModifier; import org.eclipse.che.multiuser.machine.authentication.ide.MachineTokenServiceClient; import org.eclipse.che.multiuser.machine.authentication.ide.MachineTokenServiceClientImpl; @@ -24,10 +22,8 @@ public class MachineAuthGinModule extends AbstractGinModule { @Override protected void configure() { - //bind(AsyncRequestFactory.class).to(MachineAsyncRequestFactory.class); bind(MachineTokenServiceClient.class) .to(MachineTokenServiceClientImpl.class) .in(Singleton.class); - bind(CheWsAgentLinksModifier.class).to(CheAuthMachineLinksModifier.class); } } diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml index 4e0c2ca7b4..41d515ec39 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml @@ -113,10 +113,6 @@ org.everrest everrest-core - - org.slf4j - slf4j-api - org.eclipse.che.multiuser che-multiuser-api-permission diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/AuthWsAgentHealthChecker.java b/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/AuthWsAgentHealthChecker.java deleted file mode 100644 index 92ce68d11f..0000000000 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/AuthWsAgentHealthChecker.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.multiuser.machine.authentication.server; - -import java.io.IOException; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.UriBuilder; -import org.eclipse.che.api.agent.server.WsAgentHealthCheckerImpl; -import org.eclipse.che.api.agent.server.WsAgentPingRequestFactory; -import org.eclipse.che.api.core.ApiException; -import org.eclipse.che.api.core.ServerException; -import org.eclipse.che.api.core.model.machine.Machine; -import org.eclipse.che.api.core.rest.HttpJsonRequest; -import org.eclipse.che.api.core.rest.HttpJsonRequestFactory; -import org.eclipse.che.multiuser.machine.authentication.shared.dto.MachineTokenDto; - -/** @author Max Shaposhnik (mshaposhnik@redhat.com) */ -@Singleton -public class AuthWsAgentHealthChecker extends WsAgentHealthCheckerImpl { - - private final HttpJsonRequestFactory httpJsonRequestFactory; - private final String apiEndpoint; - - @Inject - public AuthWsAgentHealthChecker( - WsAgentPingRequestFactory pingRequestFactory, - HttpJsonRequestFactory httpJsonRequestFactory, - @Named("che.api") String apiEndpoint) { - super(pingRequestFactory); - this.apiEndpoint = apiEndpoint; - this.httpJsonRequestFactory = httpJsonRequestFactory; - } - - // modifies the ping request if it is possible to get the machine token. - protected HttpJsonRequest createPingRequest(Machine devMachine) throws ServerException { - final HttpJsonRequest pingRequest = super.createPingRequest(devMachine); - final String tokenServiceUrl = - UriBuilder.fromUri(apiEndpoint) - .replacePath("api/machine/token/" + devMachine.getWorkspaceId()) - .build() - .toString(); - String machineToken = null; - try { - machineToken = - httpJsonRequestFactory - .fromUrl(tokenServiceUrl) - .setMethod(HttpMethod.GET) - .request() - .asDto(MachineTokenDto.class) - .getMachineToken(); - } catch (ApiException | IOException ex) { - LOG.warn("Failed to get machine token", ex); - } - return machineToken == null ? pingRequest : pingRequest.setAuthorizationHeader(machineToken); - } -} diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineAuthLinksInjector.java b/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineAuthLinksInjector.java deleted file mode 100644 index efebe1422a..0000000000 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineAuthLinksInjector.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.multiuser.machine.authentication.server; - -import static org.eclipse.che.api.core.util.LinksHelper.createLink; -import static org.eclipse.che.api.machine.shared.Constants.EXEC_AGENT_REFERENCE; -import static org.eclipse.che.api.machine.shared.Constants.TERMINAL_REFERENCE; - -import com.google.common.annotations.VisibleForTesting; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import javax.inject.Inject; -import javax.inject.Named; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.UriBuilder; -import org.eclipse.che.api.core.ApiException; -import org.eclipse.che.api.core.rest.HttpJsonRequestFactory; -import org.eclipse.che.api.core.rest.ServiceContext; -import org.eclipse.che.api.core.rest.shared.dto.Link; -import org.eclipse.che.api.environment.server.MachineLinksInjector; -import org.eclipse.che.api.machine.shared.dto.MachineDto; -import org.eclipse.che.api.machine.shared.dto.ServerDto; -import org.eclipse.che.multiuser.machine.authentication.shared.dto.MachineTokenDto; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Helps to inject Machine related links. - * - * @author Anton Korneta - */ -public class MachineAuthLinksInjector extends MachineLinksInjector { - private static final Logger LOG = LoggerFactory.getLogger(MachineAuthLinksInjector.class); - private static final String MACHINE_TOKEN_SERVICE_PATH = "/machine/token/"; - - private final String tokenServiceBaseUrl; - private final HttpJsonRequestFactory httpJsonRequestFactory; - - @Inject - public MachineAuthLinksInjector( - @Named("che.api") String apiEndpoint, HttpJsonRequestFactory httpJsonRequestFactory) { - this.tokenServiceBaseUrl = apiEndpoint + MACHINE_TOKEN_SERVICE_PATH; - this.httpJsonRequestFactory = httpJsonRequestFactory; - } - - @VisibleForTesting - @Override - protected void injectTerminalLink( - MachineDto machine, ServiceContext serviceContext, List links) { - if (machine.getRuntime() != null) { - final String machineToken = getMachineToken(machine); - final String scheme = serviceContext.getBaseUriBuilder().build().getScheme(); - final Collection servers = machine.getRuntime().getServers().values(); - servers - .stream() - .filter(server -> TERMINAL_REFERENCE.equals(server.getRef())) - .findAny() - .ifPresent( - terminal -> - links.add( - createLink( - "GET", - UriBuilder.fromUri(terminal.getUrl()) - .scheme("https".equals(scheme) ? "wss" : "ws") - .queryParam("token", machineToken) - .path("/pty") - .build() - .toString(), - TERMINAL_REFERENCE))); - } - } - - @Override - protected void injectExecAgentLink( - MachineDto machine, ServiceContext serviceContext, List links) { - final String scheme = serviceContext.getBaseUriBuilder().build().getScheme(); - if (machine.getRuntime() != null) { - final String machineToken = getMachineToken(machine); - final Collection servers = machine.getRuntime().getServers().values(); - servers - .stream() - .filter(server -> EXEC_AGENT_REFERENCE.equals(server.getRef())) - .findAny() - .ifPresent( - exec -> - links.add( - createLink( - "GET", - UriBuilder.fromUri(exec.getUrl()) - .scheme("https".equals(scheme) ? "wss" : "ws") - .queryParam("token", machineToken) - .path("/connect") - .build() - .toString(), - EXEC_AGENT_REFERENCE))); - } - } - - private String getMachineToken(MachineDto machine) { - try { - return httpJsonRequestFactory - .fromUrl(tokenServiceBaseUrl + machine.getWorkspaceId()) - .setMethod(HttpMethod.GET) - .request() - .asDto(MachineTokenDto.class) - .getMachineToken(); - } catch (ApiException | IOException ex) { - LOG.warn("Failed to get machine token", ex); - } - return ""; - } -} diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineSessionInvalidator.java b/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineSessionInvalidator.java index 0499124b75..7e51b2df10 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineSessionInvalidator.java +++ b/multiuser/machine-auth/che-multiuser-machine-authentication/src/main/java/org/eclipse/che/multiuser/machine/authentication/server/MachineSessionInvalidator.java @@ -14,6 +14,7 @@ import com.google.common.annotations.VisibleForTesting; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Singleton; +import org.eclipse.che.api.core.model.workspace.WorkspaceStatus; import org.eclipse.che.api.core.notification.EventService; import org.eclipse.che.api.core.notification.EventSubscriber; import org.eclipse.che.api.workspace.shared.dto.event.WorkspaceStatusEvent; @@ -37,7 +38,7 @@ public class MachineSessionInvalidator implements EventSubscriber injectMachineLinks(machine, serviceContext)); - - final MachineDto devMachine = runtime.getDevMachine(); - if (devMachine != null) { - final Collection servers = devMachine.getRuntime().getServers().values(); - servers - .stream() - .filter(server -> WSAGENT_REFERENCE.equals(server.getRef())) - .findAny() - .ifPresent( - wsAgent -> { - runtime.getLinks().add(createLink("GET", wsAgent.getUrl(), WSAGENT_REFERENCE)); - runtime - .getLinks() - .add( - createLink( - "GET", - UriBuilder.fromUri(wsAgent.getUrl()) - .path("ws") - .scheme("https".equals(ideUri.getScheme()) ? "wss" : "ws") - .build() - .toString(), - WSAGENT_WEBSOCKET_REFERENCE)); - - devMachine - .getLinks() - .add( - createLink( - "GET", - UriBuilder.fromUri(wsAgent.getUrl()) - .scheme("https".equals(ideUri.getScheme()) ? "wss" : "ws") - .path("/ws") - .queryParam(MACHINE_TOKEN, machineToken) - .build() - .toString(), - WSAGENT_WEBSOCKET_REFERENCE, - ImmutableList.of( - newDto(LinkParameter.class) - .withName(MACHINE_TOKEN) - .withDefaultValue(machineToken) - .withRequired(true)))); - }); - - servers - .stream() - .filter(server -> TERMINAL_REFERENCE.equals(server.getRef())) - .findAny() - .ifPresent( - terminal -> { - devMachine - .getLinks() - .add( - createLink( - "GET", - UriBuilder.fromUri(terminal.getUrl()) - .scheme("https".equals(ideUri.getScheme()) ? "wss" : "ws") - .queryParam(MACHINE_TOKEN, machineToken) - .path("/pty") - .build() - .toString(), - TERMINAL_REFERENCE)); - }); - servers - .stream() - .filter(server -> EXEC_AGENT_REFERENCE.equals(server.getRef())) - .findAny() - .ifPresent( - exec -> { - devMachine - .getLinks() - .add( - createLink( - "GET", - UriBuilder.fromUri(exec.getUrl()) - .scheme("https".equals(ideUri.getScheme()) ? "wss" : "ws") - .queryParam(MACHINE_TOKEN, machineToken) - .path("/connect") - .build() - .toString(), - EXEC_AGENT_REFERENCE)); - }); - } - } - } -} diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/MachineServiceAuthLinksInjectorTest.java b/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/MachineServiceAuthLinksInjectorTest.java deleted file mode 100644 index fe495d9b5f..0000000000 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/MachineServiceAuthLinksInjectorTest.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.multiuser.machine.authentication.server; - -import static org.eclipse.che.api.machine.shared.Constants.TERMINAL_REFERENCE; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; - -import com.google.common.collect.ImmutableMap; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import javax.ws.rs.core.UriBuilder; -import org.eclipse.che.api.core.rest.HttpJsonRequest; -import org.eclipse.che.api.core.rest.HttpJsonRequestFactory; -import org.eclipse.che.api.core.rest.HttpJsonResponse; -import org.eclipse.che.api.core.rest.ServiceContext; -import org.eclipse.che.api.core.rest.shared.dto.Link; -import org.eclipse.che.api.machine.shared.dto.MachineDto; -import org.eclipse.che.api.machine.shared.dto.MachineRuntimeInfoDto; -import org.eclipse.che.api.machine.shared.dto.ServerDto; -import org.eclipse.che.commons.test.mockito.answer.SelfReturningAnswer; -import org.eclipse.che.dto.server.DtoFactory; -import org.eclipse.che.multiuser.machine.authentication.shared.dto.MachineTokenDto; -import org.everrest.core.impl.uri.UriBuilderImpl; -import org.mockito.Mock; -import org.mockito.testng.MockitoTestNGListener; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Listeners; -import org.testng.annotations.Test; - -/** @author Anton Korneta. */ -@Listeners(MockitoTestNGListener.class) -public class MachineServiceAuthLinksInjectorTest { - private static final String URI_BASE = "http://localhost:8080"; - private static final String API_ENDPOINT = URI_BASE + "/api"; - - @Mock private ServiceContext serviceContextMock; - @Mock private MachineRuntimeInfoDto machineRuntimeInfoDtoMock; - @Mock private HttpJsonRequestFactory requestFactoryMock; - @Mock private ServerDto serverDtoMock; - private HttpJsonRequest requestMock; - - private MachineAuthLinksInjector machineLinksInjector; - - @BeforeMethod - public void setUp() throws Exception { - final UriBuilder uriBuilder = new UriBuilderImpl(); - uriBuilder.uri(URI_BASE); - requestMock = mock(HttpJsonRequest.class, new SelfReturningAnswer()); - when(requestFactoryMock.fromUrl(anyString())).thenReturn(requestMock); - machineLinksInjector = new MachineAuthLinksInjector(API_ENDPOINT, requestFactoryMock); - when(serviceContextMock.getBaseUriBuilder()).thenReturn(uriBuilder); - when(serverDtoMock.getRef()).thenReturn(TERMINAL_REFERENCE); - when(serverDtoMock.getUrl()).thenReturn(URI_BASE); - when(machineRuntimeInfoDtoMock.getServers()) - .thenReturn(ImmutableMap.of("server", serverDtoMock)); - } - - @Test - public void shouldInjectTerminalLinkWithMachineToken() throws Exception { - final String machineToken = "machine12"; - final MachineTokenDto tokenDto = - DtoFactory.newDto(MachineTokenDto.class).withMachineToken(machineToken); - final HttpJsonResponse responseMock = mock(HttpJsonResponse.class); - when(responseMock.asDto(MachineTokenDto.class)).thenReturn(tokenDto); - when(requestMock.request()).thenReturn(responseMock); - final MachineDto machineDto = - DtoFactory.newDto(MachineDto.class) - .withId("id") - .withWorkspaceId("wsId") - .withRuntime(machineRuntimeInfoDtoMock); - final List links = new ArrayList<>(); - machineLinksInjector.injectTerminalLink(machineDto, serviceContextMock, links); - - final Link resultTerminalLink = links.get(0); - assertEquals(1, links.size()); - assertEquals(resultTerminalLink.getRel(), TERMINAL_REFERENCE); - assertEquals(resultTerminalLink.getHref(), "ws://localhost:8080/pty?token=" + machineToken); - } - - @Test - public void shouldInjectTerminalLinkWithoutMachineToken() throws Exception { - when(requestMock.request()).thenThrow(new IOException("ioEx")); - final MachineDto machineDto = - DtoFactory.newDto(MachineDto.class) - .withId("id") - .withWorkspaceId("wsId") - .withRuntime(machineRuntimeInfoDtoMock); - final List links = new ArrayList<>(); - machineLinksInjector.injectTerminalLink(machineDto, serviceContextMock, links); - - final Link resultTerminalLink = links.get(0); - assertEquals(1, links.size()); - assertEquals(resultTerminalLink.getRel(), TERMINAL_REFERENCE); - } - - @Test - public void shouldNotInjectTerminalLinkWhenNoRuntimeMachine() { - final MachineDto machineDto = DtoFactory.newDto(MachineDto.class).withRuntime(null); - final List links = new ArrayList<>(); - - machineLinksInjector.injectTerminalLink(machineDto, serviceContextMock, links); - - assertTrue(links.isEmpty()); - } -} diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/interceptor/MachineTokenInterceptorTest.java b/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/interceptor/MachineTokenInterceptorTest.java index 5bdd378299..5cef37db44 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/interceptor/MachineTokenInterceptorTest.java +++ b/multiuser/machine-auth/che-multiuser-machine-authentication/src/test/java/org/eclipse/che/multiuser/machine/authentication/server/interceptor/MachineTokenInterceptorTest.java @@ -26,9 +26,6 @@ import com.google.inject.spi.ConstructorBinding; import java.lang.reflect.Method; import org.eclipse.che.account.spi.AccountDao; import org.eclipse.che.api.core.notification.EventService; -import org.eclipse.che.api.environment.server.MachineProcessManager; -import org.eclipse.che.api.machine.server.spi.SnapshotDao; -import org.eclipse.che.api.workspace.server.WorkspaceFilesCleaner; import org.eclipse.che.api.workspace.server.WorkspaceManager; import org.eclipse.che.api.workspace.server.WorkspaceRuntimes; import org.eclipse.che.api.workspace.server.WorkspaceSharedPool; @@ -52,7 +49,6 @@ public class MachineTokenInterceptorTest { @Mock private MachineTokenRegistry tokenRegistry; @Mock private WorkspaceImpl workspaceImpl; - @Mock private WorkspaceFilesCleaner workspaceFilesCleaner; private WorkspaceManager workspaceManager; @@ -68,15 +64,12 @@ public class MachineTokenInterceptorTest { bind(WorkspaceDao.class).toInstance(mock(WorkspaceDao.class)); bind(WorkspaceRuntimes.class).toInstance(mock(WorkspaceRuntimes.class)); bind(EventService.class).toInstance(mock(EventService.class)); - bind(MachineProcessManager.class).toInstance(mock(MachineProcessManager.class)); bind(AccountDao.class).toInstance(mock(AccountDao.class)); bindConstant().annotatedWith(Names.named("che.workspace.auto_restore")).to(false); bindConstant().annotatedWith(Names.named("che.workspace.auto_snapshot")).to(false); bind(WorkspaceSharedPool.class) .toInstance(new WorkspaceSharedPool("cached", null, null)); bind(WorkspaceManager.class); - bind(SnapshotDao.class).toInstance(mock(SnapshotDao.class)); - bind(WorkspaceFilesCleaner.class).toInstance(workspaceFilesCleaner); bind(MachineTokenRegistry.class).toInstance(tokenRegistry);