Merge pull request #149 from Doha2012/master

fix submit reddit
This commit is contained in:
Eugen 2015-02-23 16:20:38 +02:00
commit 7ae4b80177
4 changed files with 65 additions and 25 deletions

View File

@ -17,6 +17,8 @@ import org.springframework.security.oauth2.client.resource.UserApprovalRequiredE
import org.springframework.security.oauth2.client.resource.UserRedirectRequiredException; import org.springframework.security.oauth2.client.resource.UserRedirectRequiredException;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -43,7 +45,7 @@ public class RedditController {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Error occurred", e); LOGGER.error("Error occurred", e);
model.addAttribute("error", e.getLocalizedMessage()); model.addAttribute("error", e.getMessage());
} }
return "reddit"; return "reddit";
} }
@ -51,29 +53,31 @@ public class RedditController {
@RequestMapping("/submit") @RequestMapping("/submit")
public String submit(Model model, @RequestParam Map<String, String> formParams) { public String submit(Model model, @RequestParam Map<String, String> formParams) {
try { try {
System.out.println(formParams.keySet()); MultiValueMap<String, String> param = new LinkedMultiValueMap<String, String>();
HttpHeaders headers = new HttpHeaders(); param.add("api_type", "json");
headers.setContentType(MediaType.APPLICATION_JSON); param.add("kind", "link");
HttpEntity req = new HttpEntity(headers); param.add("resubmit", "true");
param.add("sendreplies", "false");
param.add("then", "comments");
Map<String, String> param = new HashMap<String, String>(); for (Map.Entry<String, String> entry : formParams.entrySet()) {
param.put("api_type", "json"); param.add(entry.getKey(), entry.getValue());
param.put("kind", "link"); }
param.putAll(formParams);
System.out.println(param.keySet()); LOGGER.info("User submitting Link with these parameters: " + formParams.entrySet());
System.out.println(param.entrySet()); String result = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param, String.class);
ResponseEntity<String> result = redditRestTemplate.postForEntity("https://oauth.reddit.com/api/submit", req, String.class, param); LOGGER.info("Full Reddit Response: " + result);
model.addAttribute("error", result.getBody()); String responseMsg = parseResponse(result);
model.addAttribute("msg", responseMsg);
} catch (UserApprovalRequiredException e) { } catch (UserApprovalRequiredException e) {
throw e; throw e;
} catch (UserRedirectRequiredException e) { } catch (UserRedirectRequiredException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Error occurred", e); LOGGER.error("Error occurred", e);
model.addAttribute("error", e.getLocalizedMessage()); model.addAttribute("msg", e.getLocalizedMessage());
} }
return "reddit"; return "submissionResponse";
} }
@RequestMapping("/post") @RequestMapping("/post")
@ -81,10 +85,8 @@ public class RedditController {
try { try {
String needsCaptchaResult = needsCaptcha(); String needsCaptchaResult = needsCaptcha();
if (needsCaptchaResult.equalsIgnoreCase("true")) { if (needsCaptchaResult.equalsIgnoreCase("true")) {
String newCaptchaResult = getNewCaptcha(); String iden = getNewCaptcha();
String[] split = newCaptchaResult.split("\""); model.addAttribute("iden", iden);
String iden = split[split.length - 2];
model.addAttribute("iden", iden.trim());
} }
} catch (UserApprovalRequiredException e) { } catch (UserApprovalRequiredException e) {
throw e; throw e;
@ -98,7 +100,7 @@ public class RedditController {
return "submissionForm"; return "submissionForm";
} }
// // === private
private List<String> getSubreddit() throws JsonProcessingException, IOException { private List<String> getSubreddit() throws JsonProcessingException, IOException {
String result = redditRestTemplate.getForObject("https://oauth.reddit.com/subreddits/popular?limit=50", String.class); String result = redditRestTemplate.getForObject("https://oauth.reddit.com/subreddits/popular?limit=50", String.class);
@ -125,7 +127,25 @@ public class RedditController {
param.put("api_type", "json"); param.put("api_type", "json");
ResponseEntity<String> result = redditRestTemplate.postForEntity("https://oauth.reddit.com/api/new_captcha", req, String.class, param); ResponseEntity<String> result = redditRestTemplate.postForEntity("https://oauth.reddit.com/api/new_captcha", req, String.class, param);
return result.getBody(); String[] split = result.getBody().split("\"");
return split[split.length - 2];
}
private String parseResponse(String responseBody) throws JsonProcessingException, IOException {
String result = "";
JsonNode node = new ObjectMapper().readTree(responseBody);
JsonNode errorNode = node.get("json").get("errors").get(0);
if (errorNode != null) {
for (JsonNode child : errorNode) {
result = result + child.toString().replaceAll("\"|null", "") + "<br>";
}
return result;
} else {
if (node.get("json").get("data") != null && node.get("json").get("data").get("url") != null)
return "Post submitted successfully <a href=\"" + node.get("json").get("data").get("url").asText() + "\"> check it out </a>";
else
return "Error Occurred";
}
} }
public void setRedditRestTemplate(OAuth2RestTemplate redditRestTemplate) { public void setRedditRestTemplate(OAuth2RestTemplate redditRestTemplate) {

View File

@ -3,14 +3,17 @@
<head> <head>
<title>Spring Security OAuth</title> <title>Spring Security OAuth</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
</head> </head>
<body> <body>
<div class="container">
<c:choose> <c:choose>
<c:when test="${info != null}"> <c:when test="${info != null}">
<h1>Your Reddit Info</h1> <h1>Your Reddit Info</h1>
<b>Your reddit username is </b>${info} <b>Your reddit username is </b>${info}
<br><br><br> <br><br><br>
<a href="post">Submit to Reddit</a> <a href="post" class="btn btn-primary">Submit to Reddit</a>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<b>Sorry, error occurred</b> <b>Sorry, error occurred</b>
@ -18,5 +21,6 @@
<div>${error}</div> <div>${error}</div>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,15 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Spring Security OAuth</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>${msg}</h1>
<a href="post" class="btn btn-primary">Submit another link to Reddit</a>
</div>
</body>
</html>

View File

@ -5,11 +5,12 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Spring Security OAuth</title> <title>Spring Security OAuth</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
</head> </head>
<body> <body>
<div class="container">
<h1>Welcome to Spring Security OAuth</h1> <h1>Welcome to Spring Security OAuth</h1>
<a href="info">Login with Reddit</a> <a href="info" class="btn btn-primary">Login with Reddit</a>
</body> </body>
</html> </html>