From 13309be164db5dcb0633585367578297e51980e2 Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Wed, 1 Aug 2018 14:39:12 +0300 Subject: [PATCH 1/4] Added cookie request token extractor --- .../auth/token/ChainedTokenExtractor.java | 7 +++- .../token/CookieRequestTokenExtractor.java | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java diff --git a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java index c586a5a441f..8ade38e58a2 100644 --- a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java +++ b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java @@ -25,16 +25,21 @@ public class ChainedTokenExtractor implements RequestTokenExtractor { private final QueryRequestTokenExtractor queryRequestTokenExtractor; + private final CookieRequestTokenExtractor cookieRequestTokenExtractor; + public ChainedTokenExtractor() { headerRequestTokenExtractor = new HeaderRequestTokenExtractor(); queryRequestTokenExtractor = new QueryRequestTokenExtractor(); + cookieRequestTokenExtractor = new CookieRequestTokenExtractor(); } @Override public String getToken(HttpServletRequest req) { String token; if ((token = queryRequestTokenExtractor.getToken(req)) == null) { - token = headerRequestTokenExtractor.getToken(req); + if ((token = headerRequestTokenExtractor.getToken(req)) == null) { + token = cookieRequestTokenExtractor.getToken(req); + } } return token; } diff --git a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java new file mode 100644 index 00000000000..3e611efb452 --- /dev/null +++ b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012-2018 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.commons.auth.token; + +import java.util.Arrays; +import java.util.Optional; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; + + +/** + * Extract sso token from request headers. + */ +public class CookieRequestTokenExtractor implements RequestTokenExtractor { + + @Override + public String getToken(HttpServletRequest req) { + if (req.getCookies() == null) { + return null; + } + Optional optional = Arrays.stream(req.getCookies()) + .filter(cookie -> cookie.getName().equals("access_token")).findFirst(); + return optional.map(Cookie::getValue).orElse(null); + } +} From bd5001724a7ff317d8109361cdfa0c1039c737eb Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Wed, 1 Aug 2018 14:46:31 +0300 Subject: [PATCH 2/4] Fixes in loadet.html --- .../org/eclipse/che/ide/public/loader.html | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html b/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html index 5a885bf363c..78539f1082b 100644 --- a/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html +++ b/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html @@ -172,7 +172,21 @@ return; } - const server = workspace.runtime.links.find(link => redirectUrl.startsWith(link)); + var machines = Object.keys(workspace.runtime.machines) + .map(machineName => workspace.runtime.machines[machineName]); + + var servers = machines.map(machine => { + const servers = Object.keys(machine.servers) + .map(serverName => machine.servers[serverName]); + return servers; + }).reduce((servers, machineServers) => { + return servers.concat(...machineServers); + }, []); + + var server = servers.find(_server => { + return _server.url && redirectUrl.startsWith( _server.url); + }); + if (server) { resolve(server); } else { From c2a02e19bc0204a3ca543f08575deedf2806e7c9 Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Wed, 1 Aug 2018 14:50:36 +0300 Subject: [PATCH 3/4] fixup! Fixes in loadet.html --- .../auth/token/ChainedTokenExtractor.java | 7 +--- .../token/CookieRequestTokenExtractor.java | 33 ------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java diff --git a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java index 8ade38e58a2..c586a5a441f 100644 --- a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java +++ b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/ChainedTokenExtractor.java @@ -25,21 +25,16 @@ public class ChainedTokenExtractor implements RequestTokenExtractor { private final QueryRequestTokenExtractor queryRequestTokenExtractor; - private final CookieRequestTokenExtractor cookieRequestTokenExtractor; - public ChainedTokenExtractor() { headerRequestTokenExtractor = new HeaderRequestTokenExtractor(); queryRequestTokenExtractor = new QueryRequestTokenExtractor(); - cookieRequestTokenExtractor = new CookieRequestTokenExtractor(); } @Override public String getToken(HttpServletRequest req) { String token; if ((token = queryRequestTokenExtractor.getToken(req)) == null) { - if ((token = headerRequestTokenExtractor.getToken(req)) == null) { - token = cookieRequestTokenExtractor.getToken(req); - } + token = headerRequestTokenExtractor.getToken(req); } return token; } diff --git a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java b/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java deleted file mode 100644 index 3e611efb452..00000000000 --- a/core/commons/che-core-commons-auth/src/main/java/org/eclipse/che/commons/auth/token/CookieRequestTokenExtractor.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012-2018 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.commons.auth.token; - -import java.util.Arrays; -import java.util.Optional; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - - -/** - * Extract sso token from request headers. - */ -public class CookieRequestTokenExtractor implements RequestTokenExtractor { - - @Override - public String getToken(HttpServletRequest req) { - if (req.getCookies() == null) { - return null; - } - Optional optional = Arrays.stream(req.getCookies()) - .filter(cookie -> cookie.getName().equals("access_token")).findFirst(); - return optional.map(Cookie::getValue).orElse(null); - } -} From 34b7a2cac0b98be20e15e81038e4eea90c8e589c Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Wed, 1 Aug 2018 16:04:52 +0300 Subject: [PATCH 4/4] fixup! fixup! Fixes in loadet.html --- .../org/eclipse/che/ide/public/loader.html | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html b/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html index 78539f1082b..bcf48391cbd 100644 --- a/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html +++ b/ide/che-ide-gwt-app/src/main/resources/org/eclipse/che/ide/public/loader.html @@ -172,20 +172,18 @@ return; } - var machines = Object.keys(workspace.runtime.machines) + var machines = Object.keys(workspace.runtime.machines) .map(machineName => workspace.runtime.machines[machineName]); - var servers = machines.map(machine => { - const servers = Object.keys(machine.servers) - .map(serverName => machine.servers[serverName]); - return servers; - }).reduce((servers, machineServers) => { - return servers.concat(...machineServers); - }, []); - - var server = servers.find(_server => { - return _server.url && redirectUrl.startsWith( _server.url); - }); + const servers = Object.keys(machine.servers) + .map(serverName => machine.servers[serverName]); + return servers; + }).reduce((servers, machineServers) => { + return servers.concat(...machineServers); + }, []); + var server = servers.find(_server => { + return _server.url && redirectUrl.startsWith( _server.url); + }); if (server) { resolve(server);