You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2019/10/21 14:42:21 UTC

[incubator-dlab] 01/01: [DLAB-1201] Fixed scheduler issue with token expiration

This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch DLAB-1201
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 1ecb8ae87c04c20dba80be7a9571517340e95b02
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Mon Oct 21 17:41:52 2019 +0300

    [DLAB-1201] Fixed scheduler issue with token expiration
---
 .../java/com/epam/dlab/backendapi/service/KeycloakService.java |  1 +
 .../com/epam/dlab/backendapi/service/KeycloakServiceImpl.java  | 10 ++++++++++
 .../java/com/epam/dlab/backendapi/service/SecurityService.java |  1 +
 .../com/epam/dlab/backendapi/service/SecurityServiceImpl.java  |  6 ++++++
 .../dlab/backendapi/service/impl/EnvironmentServiceImpl.java   |  2 +-
 5 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakService.java
index ce682bb..e55b0cc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakService.java
@@ -6,4 +6,5 @@ public interface KeycloakService {
 	AccessTokenResponse getToken(String code);
 	AccessTokenResponse refreshToken(String refreshToken);
 	AccessTokenResponse generateAccessToken(String refreshToken);
+	AccessTokenResponse generateServiceAccountToken();
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakServiceImpl.java
index 8458d85..b7c508a 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/KeycloakServiceImpl.java
@@ -51,6 +51,11 @@ public class KeycloakServiceImpl implements KeycloakService {
 		return tokenResponse;
 	}
 
+	@Override
+	public AccessTokenResponse generateServiceAccountToken() {
+		return requestToken(serviceAccountRequestForm());
+	}
+
 	private AccessTokenResponse requestToken(Form requestForm) {
 		final String credentials = Base64.encodeAsString(String.join(":", conf.getResource(),
 				String.valueOf(conf.getCredentials().get("secret"))));
@@ -78,4 +83,9 @@ public class KeycloakServiceImpl implements KeycloakService {
 				.param("grant_type", "refresh_token")
 				.param("refresh_token", refreshToken);
 	}
+
+	private Form serviceAccountRequestForm() {
+		return new Form()
+				.param("grant_type", "client_credentials");
+	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityService.java
index 2438e24..9954cff 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityService.java
@@ -5,4 +5,5 @@ import com.epam.dlab.auth.UserInfo;
 public interface SecurityService {
 	UserInfo getUserInfo(String code);
 	UserInfo getUserInfoOffline(String username);
+	UserInfo getServiceAccountInfo(String username);
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityServiceImpl.java
index 9b17d91..b43128d 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/SecurityServiceImpl.java
@@ -36,4 +36,10 @@ public class SecurityServiceImpl implements SecurityService {
 						accessTokenResponse.getToken()))
 				.orElseThrow(() -> new DlabException("Can not find token for user " + username));
 	}
+
+	@Override
+	public UserInfo getServiceAccountInfo(String username) {
+		AccessTokenResponse accessTokenResponse = keycloakService.generateServiceAccountToken();
+		return new UserInfo(username, accessTokenResponse.getToken());
+	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
index dc18fb2..2125398 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
@@ -194,7 +194,7 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	}
 
 	private void stopNotebook(UserInstanceDTO instance) {
-		final UserInfo userInfo = securityService.getUserInfoOffline(instance.getUser());
+		final UserInfo userInfo = securityService.getServiceAccountInfo(instance.getUser());
 		exploratoryService.stop(userInfo, instance.getExploratoryName());
 	}
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org