Guest User

Untitled

a guest
Oct 22nd, 2017
454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.46 KB | None | 0 0
  1. package com.sap.ngom.collection.client;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.UnsupportedEncodingException;
  6. import java.net.URI;
  7. import java.net.URISyntaxException;
  8. import java.net.URL;
  9. import java.net.URLEncoder;
  10.  
  11. import org.cloudfoundry.uaa.tokens.AbstractToken;
  12. import org.cloudfoundry.uaa.tokens.GetTokenByPasswordResponse;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.http.HttpHeaders;
  15. import org.springframework.http.HttpMethod;
  16. import org.springframework.http.HttpStatus;
  17. import org.springframework.http.MediaType;
  18. import org.springframework.http.RequestEntity;
  19. import org.springframework.http.ResponseEntity;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.web.client.RestOperations;
  22.  
  23. import com.fasterxml.jackson.core.JsonParseException;
  24. import com.fasterxml.jackson.databind.JsonMappingException;
  25. import com.fasterxml.jackson.databind.JsonNode;
  26. import com.fasterxml.jackson.databind.ObjectMapper;
  27.  
  28.  
  29. @Service
  30. public class ElasticSearchClient {
  31.  
  32. private static final String CF_TOKEN_URL = "https://uaa.cf.us10.hana.ondemand.com";
  33. private static final String CF_LOGS_URL = "https://logs.cf.us10.hana.ondemand.com";
  34. private static ObjectMapper mapper = new ObjectMapper();
  35.  
  36. String username = System.getenv("USER");
  37. String password = System.getenv("PWD");
  38. String token = "";
  39.  
  40. @Autowired
  41. private RestOperations restOperations;
  42.  
  43. public JsonNode getLogsByElasticSearch() throws JsonParseException, JsonMappingException, IOException{
  44.  
  45. String query = mapper.readValue(new File(getFileURI("/query.json")), JsonNode.class).toString();
  46. String index = mapper.readValue(new File(getFileURI("/index.json")), JsonNode.class).toString();
  47. String queryBody = index + "n" + query + "n" + index + "n" + query;
  48.  
  49. ResponseEntity responseEntity = retrieveLog(queryBody);
  50.  
  51. if (responseEntity.getStatusCode() == HttpStatus.FOUND){
  52.  
  53. dealWithRedirect(responseEntity);
  54. }
  55.  
  56. return null;
  57. }
  58.  
  59. private void dealWithRedirect(ResponseEntity responseEntity){
  60. HttpHeaders responseHeaders = responseEntity.getHeaders();
  61. String loction = responseHeaders.get("Location").toString();
  62. String loginUrl = loction.substring(1, loction.length()-1);
  63.  
  64. String setCookie = responseHeaders.get("Set-Cookie").toString();
  65. setCookie = setCookie.substring(1, loction.length()-1);
  66.  
  67. HttpHeaders loginHeaders = new HttpHeaders();
  68. loginHeaders.set("Cookie", setCookie);
  69. loginHeaders.set(HttpHeaders.AUTHORIZATION, "Basic Y2Y6");
  70. loginHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  71.  
  72. String body = "grant_type=password&username=jane.wang03@sap.com&password="+ System.getenv("PWD") + "&response_type=user_token";
  73.  
  74. RequestEntity<String> loginRequestEntity = new RequestEntity<>(body, loginHeaders, HttpMethod.POST, URI.create(loginUrl));
  75. ResponseEntity loginResponse = restOperations.exchange(loginRequestEntity, Object.class);
  76.  
  77. String temp = "";
  78. }
  79.  
  80. private void passAuthentication(String state){
  81. String url = CF_TOKEN_URL + "/oauth/authorize?grant_type=authorization_code&client_id=sleeve-app-logs&response_type=code&state=" + state;
  82.  
  83. HttpHeaders headers = new HttpHeaders();
  84. headers.set(HttpHeaders.AUTHORIZATION, "bearer " + token);
  85.  
  86. RequestEntity<String> requestEntity = new RequestEntity<>(headers, HttpMethod.GET, URI.create(url));
  87.  
  88. HttpStatus responseEntity = restOperations.exchange(requestEntity, Object.class).getStatusCode();
  89. }
  90.  
  91.  
  92. private ResponseEntity retrieveLog(String queryBody){
  93.  
  94. if (token == ""){
  95. token = getToken();
  96. }
  97.  
  98. HttpHeaders headers = new HttpHeaders();
  99. headers.set(HttpHeaders.AUTHORIZATION, "bearer " + token);
  100. headers.set("kbn-xsrf", "reporting");
  101.  
  102. String url = CF_LOGS_URL + "/elasticsearch/_msearch";
  103. RequestEntity<String> requestEntity = new RequestEntity<>(queryBody, headers, HttpMethod.POST, URI.create(url));
  104. ResponseEntity responseEntity = restOperations.exchange(requestEntity, Object.class);
  105.  
  106. return responseEntity;
  107. }
  108.  
  109.  
  110. private String getToken() {
  111.  
  112. String body = "grant_type=password";
  113. try {
  114. body += "&username=" + URLEncoder.encode(username, "UTF-8");
  115. body += "&password=" + URLEncoder.encode(password, "UTF-8");
  116. body += "&response_type=user_token";
  117. } catch (UnsupportedEncodingException ex) {
  118. throw new RuntimeException(ex);
  119. }
  120.  
  121. HttpHeaders headers = new HttpHeaders();
  122. headers.set(HttpHeaders.AUTHORIZATION, "Basic Y2Y6");
  123. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  124.  
  125. RequestEntity<String> requestEntity = new RequestEntity<>(body, headers, HttpMethod.POST, URI.create(CF_TOKEN_URL + "/oauth/token"));
  126. ResponseEntity<GetTokenByPasswordResponse> responseEntity = restOperations.exchange(requestEntity, GetTokenByPasswordResponse.class);
  127. AbstractToken token = responseEntity.getBody();
  128.  
  129. return token.getAccessToken();
  130. }
  131.  
  132.  
  133. private URI getFileURI(String path) {
  134. URL ruleURL = ElasticSearchClient.class.getResource(path);
  135. URI uri = null;
  136.  
  137. try {
  138. uri = ruleURL.toURI();
  139. } catch (URISyntaxException e) {
  140. e.printStackTrace();
  141. }
  142. return uri;
  143. }
  144. }
Add Comment
Please, Sign In to add comment