/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.keycloak.example; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.keycloak.adapters.ServerRequest; import org.keycloak.adapters.installed.KeycloakInstalled; import org.keycloak.common.util.Time; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.concurrent.TimeUnit; /** * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a> */ public class CustomerCli { public static final ObjectMapper mapper = new ObjectMapper(); static { mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } private static BufferedReader br; private static KeycloakInstalled keycloak; public static void main(String[] args) throws Exception { keycloak = new KeycloakInstalled(); br = new BufferedReader(new InputStreamReader(System.in)); printHelp(); printDivider(); System.out.print("$ "); for (String s = br.readLine(); s != null; s = br.readLine()) { printDivider(); try { if (s.equals("login")) { keycloak.login(System.out, br); System.out.println("Logged in: " + keycloak.getToken().getSubject()); } else if (s.equals("logout")) { keycloak.logout(); System.out.println("Logged out"); } else if (s.equals("login-desktop")) { keycloak.loginDesktop(); System.out.println("Logged in: " + keycloak.getToken().getSubject()); } else if (s.equals("login-manual")) { keycloak.loginManual(System.out, br); System.out.println("Logged in: " + keycloak.getToken().getSubject()); } else if (s.equals("profile")) { profile(); } else if (s.equals("customers")) { customers(); } else if (s.equals("token")) { System.out.println(mapper.writeValueAsString(keycloak.getToken())); } else if (s.equals("id-token")) { System.out.println(mapper.writeValueAsString(keycloak.getIdToken())); } else if (s.equals("refresh")) { keycloak.refreshToken(); System.out.println("Token refreshed: expires at " + Time.toDate(keycloak.getToken().getExpiration())); } else if (s.equals("exit")) { System.exit(0); } else { printHelp(); } } catch (ServerRequest.HttpFailure t) { System.out.println(t.getError()); }catch (Throwable t) { System.out.println(t.getMessage() != null ? t.getMessage() : t.getClass().toString()); } printDivider(); System.out.print("$ "); } } public static void printHelp() { System.out.println("Commands:"); System.out.println(" login - login with desktop browser if available, otherwise do manual login"); System.out.println(" login-manual - manual login"); System.out.println(" login-desktop - desktop login"); System.out.println(" token - show token details"); System.out.println(" id-token - show ID token details"); System.out.println(" profile - retrieve user profile"); System.out.println(" customers - retrieve customers listing"); System.out.println(" refresh - refresh token"); System.out.println(" exit - exit"); } public static void printDivider() { System.out.println(""); } public static void profile() throws Exception { String accountUrl = keycloak.getDeployment().getAccountUrl(); HttpGet get = new HttpGet(accountUrl); get.setHeader("Accept", "application/json"); get.setHeader("Authorization", "Bearer " + keycloak.getTokenString(10, TimeUnit.SECONDS)); HttpResponse response = keycloak.getDeployment().getClient().execute(get); if (response.getStatusLine().getStatusCode() == 200) { print(response.getEntity().getContent()); } else { System.out.println(response.getStatusLine().toString()); } } public static void customers() throws Exception { String baseUrl = keycloak.getDeployment().getAuthServerBaseUrl(); baseUrl = baseUrl.substring(0, baseUrl.indexOf('/', 8)); String customersUrl = baseUrl + "/database/customers"; HttpGet get = new HttpGet(customersUrl); get.setHeader("Accept", "application/json"); get.setHeader("Authorization", "Bearer " + keycloak.getTokenString(10, TimeUnit.SECONDS)); HttpResponse response = keycloak.getDeployment().getClient().execute(get); if (response.getStatusLine().getStatusCode() == 200) { print(response.getEntity().getContent()); } else { System.out.println(response.getStatusLine().toString()); } } private static void print(InputStream is) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(is)); for (String l = br.readLine(); l != null; l = br.readLine()) { System.out.println(l); } } }