From b20fab78a56b737931b542c98b2fef3d58ad12e3 Mon Sep 17 00:00:00 2001 From: Jacques-Etienne Beaudet Date: Mon, 20 Nov 2017 22:16:33 -0500 Subject: [PATCH] Add an endpoint to print the id and refresh token --- README.md | 2 +- .../com/coveo/k8sproxy/domain/TokenInfo.java | 42 +++++++++++++++++++ .../coveo/k8sproxy/proxy/K8sReverseProxy.java | 28 ++++++++++++- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/coveo/k8sproxy/domain/TokenInfo.java diff --git a/README.md b/README.md index a901897..97f89d0 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ k8s: ### Command line argument You can inject the required parameter on the command line as such : ``` -java -jar -Dgoogle.clientId=something -Dgoogle.clientSecret=secret -Dgoogle.authorizeUrl=https://accounts.google.com/o/oauth2/auth -Dgoogle.tokenUrl=https://www.googleapis.com/oauth2/v4/token -Dk8s.clusterEndpoint=https://your.k8scluster.com +java -jar -Dgoogle.clientId=something -Dgoogle.clientSecret=secret -Dgoogle.authorizeUrl=https://accounts.google.com/o/oauth2/auth -Dgoogle.tokenUrl=https://www.googleapis.com/oauth2/v4/token -Dk8s.clusterEndpoint=https://your.k8scluster.com k8s-proxy-0.0.1.jar ``` ### Run the jar file diff --git a/src/main/java/com/coveo/k8sproxy/domain/TokenInfo.java b/src/main/java/com/coveo/k8sproxy/domain/TokenInfo.java new file mode 100644 index 0000000..d65999a --- /dev/null +++ b/src/main/java/com/coveo/k8sproxy/domain/TokenInfo.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2011 - 2017, Coveo Solutions Inc. + */ +package com.coveo.k8sproxy.domain; + +public class TokenInfo +{ + private String idToken; + private String refreshToken; + + public String getIdToken() + { + return idToken; + } + + public void setIdToken(String idToken) + { + this.idToken = idToken; + } + + public String getRefreshToken() + { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) + { + this.refreshToken = refreshToken; + } + + public TokenInfo withIdToken(String idToken) + { + setIdToken(idToken); + return this; + } + + public TokenInfo withRefreshToken(String refreshToken) + { + setRefreshToken(refreshToken); + return this; + } +} diff --git a/src/main/java/com/coveo/k8sproxy/proxy/K8sReverseProxy.java b/src/main/java/com/coveo/k8sproxy/proxy/K8sReverseProxy.java index 4eebf5d..ef1b68f 100644 --- a/src/main/java/com/coveo/k8sproxy/proxy/K8sReverseProxy.java +++ b/src/main/java/com/coveo/k8sproxy/proxy/K8sReverseProxy.java @@ -43,9 +43,11 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import com.coveo.k8sproxy.domain.GoogleIdAndRefreshToken; import com.coveo.k8sproxy.domain.JweToken; +import com.coveo.k8sproxy.domain.TokenInfo; import com.coveo.k8sproxy.token.GoogleTokenRetriever; import com.coveo.k8sproxy.token.JweTokenRetriever; @@ -99,6 +101,28 @@ public void callback(@RequestParam String code, HttpServletRequest request, Http response.sendRedirect(initialRedirect); } + @RequestMapping("/get_token") + @ResponseBody + public TokenInfo getTokens(HttpServletRequest request, HttpServletResponse response) + throws ClientProtocolException, + IOException + { + if (googleToken == null || googleToken.getIdToken() == null || googleToken.getRefreshToken() == null) { + initialRedirect = request.getRequestURI().toString(); + response.sendRedirect(googleTokenRetriever.getAuthorizeUrl()); + return null; + } + + ReadLock readLock = lock.readLock(); + try { + readLock.lock(); + return new TokenInfo().withIdToken(googleToken.getIdToken()) + .withRefreshToken(googleToken.getRefreshToken()); + } finally { + readLock.unlock(); + } + } + @RequestMapping("/ui") public void uiRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException { @@ -147,7 +171,9 @@ public void reverseProxy(HttpServletRequest request, HttpServletResponse respons response.setStatus(proxiedResponse.getStatusLine().getStatusCode()); Stream.of(proxiedResponse.getAllHeaders()) .forEach(header -> response.setHeader(header.getName(), header.getValue())); - IOUtils.copy(proxiedResponse.getEntity().getContent(), response.getOutputStream()); + if (proxiedResponse.getEntity() != null) { + IOUtils.copy(proxiedResponse.getEntity().getContent(), response.getOutputStream()); + } } }