diff --git a/spring-security-oauth/src/main/java/org/baeldung/config/SessionListener.java b/spring-security-oauth/src/main/java/org/baeldung/config/SessionListener.java index 53b68cbc1c..96cf6058e4 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/config/SessionListener.java +++ b/spring-security-oauth/src/main/java/org/baeldung/config/SessionListener.java @@ -13,7 +13,7 @@ public class SessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent event) { logger.info("==== Session is created ===="); - event.getSession().setMaxInactiveInterval(1 * 60); + event.getSession().setMaxInactiveInterval(30 * 60); event.getSession().setAttribute("PREDICTION_FEATURE", MyFeatures.PREDICTION_FEATURE); } diff --git a/spring-security-oauth/src/main/java/org/baeldung/config/WebConfig.java b/spring-security-oauth/src/main/java/org/baeldung/config/WebConfig.java index ebfbb990dc..d506815424 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/config/WebConfig.java +++ b/spring-security-oauth/src/main/java/org/baeldung/config/WebConfig.java @@ -127,7 +127,7 @@ public class WebConfig extends WebMvcConfigurerAdapter { details.setAccessTokenUri(accessTokenUri); details.setUserAuthorizationUri(userAuthorizationUri); details.setTokenName("oauth_token"); - details.setScope(Arrays.asList("identity", "read", "submit")); + details.setScope(Arrays.asList("identity", "read", "submit", "edit")); details.setGrantType("authorization_code"); details.setPreEstablishedRedirectUri("http://localhost:8080/spring-security-oauth/login"); details.setUseCurrentUri(false); diff --git a/spring-security-oauth/src/main/java/org/baeldung/persistence/dao/PostRepository.java b/spring-security-oauth/src/main/java/org/baeldung/persistence/dao/PostRepository.java index 60c7582dd8..50f0ccc718 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/persistence/dao/PostRepository.java +++ b/spring-security-oauth/src/main/java/org/baeldung/persistence/dao/PostRepository.java @@ -12,4 +12,6 @@ public interface PostRepository extends JpaRepository { List findBySubmissionDateBeforeAndIsSent(Date date, boolean isSent); List findByUser(User user); + + List findByRedditIDNotNullAndNoOfAttemptsGreaterThan(int attempts); } \ No newline at end of file diff --git a/spring-security-oauth/src/main/java/org/baeldung/persistence/model/Post.java b/spring-security-oauth/src/main/java/org/baeldung/persistence/model/Post.java index 045de363c3..71845976c4 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/persistence/model/Post.java +++ b/spring-security-oauth/src/main/java/org/baeldung/persistence/model/Post.java @@ -35,6 +35,14 @@ public class Post { private String submissionResponse; + private String redditID; + + private int noOfAttempts; + + private int timeInterval; + + private int minScoreRequired; + @ManyToOne @JoinColumn(name = "user_id", nullable = false) private User user; @@ -115,6 +123,38 @@ public class Post { this.submissionResponse = submissionResponse; } + public String getRedditID() { + return redditID; + } + + public void setRedditID(String redditID) { + this.redditID = redditID; + } + + public int getNoOfAttempts() { + return noOfAttempts; + } + + public void setNoOfAttempts(int noOfAttempts) { + this.noOfAttempts = noOfAttempts; + } + + public int getTimeInterval() { + return timeInterval; + } + + public void setTimeInterval(int timeInterval) { + this.timeInterval = timeInterval; + } + + public int getMinScoreRequired() { + return minScoreRequired; + } + + public void setMinScoreRequired(int minScoreRequired) { + this.minScoreRequired = minScoreRequired; + } + @Override public String toString() { return "Post [title=" + title + ", subreddit=" + subreddit + ", url=" + url + ", submissionDate=" + submissionDate + ", user=" + user + "]"; diff --git a/spring-security-oauth/src/main/java/org/baeldung/web/RedditController.java b/spring-security-oauth/src/main/java/org/baeldung/web/RedditController.java index 2656debbaa..26e546e9a9 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/web/RedditController.java +++ b/spring-security-oauth/src/main/java/org/baeldung/web/RedditController.java @@ -114,6 +114,10 @@ public class RedditController { post.setTitle(formParams.get("title")); post.setSubreddit(formParams.get("sr")); post.setUrl(formParams.get("url")); + post.setNoOfAttempts(Integer.parseInt(formParams.get("attempt"))); + post.setTimeInterval(Integer.parseInt(formParams.get("interval"))); + post.setMinScoreRequired(Integer.parseInt(formParams.get("score"))); + if (formParams.containsKey("sendreplies")) { post.setSendReplies(true); } diff --git a/spring-security-oauth/src/main/java/org/baeldung/web/schedule/ScheduledTasks.java b/spring-security-oauth/src/main/java/org/baeldung/web/schedule/ScheduledTasks.java index e4cc42bd06..ee7bcc36ac 100644 --- a/spring-security-oauth/src/main/java/org/baeldung/web/schedule/ScheduledTasks.java +++ b/spring-security-oauth/src/main/java/org/baeldung/web/schedule/ScheduledTasks.java @@ -3,6 +3,7 @@ package org.baeldung.web.schedule; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; import org.baeldung.persistence.dao.PostRepository; import org.baeldung.persistence.model.Post; @@ -38,6 +39,12 @@ public class ScheduledTasks { for (final Post post : posts) { submitPost(post); } + + final List submitted = postReopsitory.findByRedditIDNotNullAndNoOfAttemptsGreaterThan(0); + logger.info(submitted.size() + " Posts to check their score"); + for (final Post post : submitted) { + checkIfNeedResubmit(post); + } } private void submitPost(final Post post) { @@ -72,10 +79,16 @@ public class ScheduledTasks { logger.info("Submit link with these parameters: " + param.entrySet()); final JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param, JsonNode.class); + parseResponse(node, post); + } + + private void parseResponse(JsonNode node, Post post) { final JsonNode errorNode = node.get("json").get("errors").get(0); if (errorNode == null) { post.setSent(true); post.setSubmissionResponse("Successfully sent"); + post.setRedditID(node.get("json").get("data").get("id").asText()); + post.setNoOfAttempts(post.getNoOfAttempts() - 1); postReopsitory.save(post); logger.info("Successfully sent " + post.toString()); } else { @@ -85,7 +98,42 @@ public class ScheduledTasks { } } + private int getPostScore(String redditId) { + final JsonNode node = redditRestTemplate.getForObject("https://oauth.reddit.com/api/info?id=t3_" + redditId, JsonNode.class); + logger.info(node.toString()); + final int score = node.get("data").get("children").get(0).get("data").get("score").asInt(); + logger.info("post score = " + score); + return score; + } + + private void deletePost(String redditId) { + final MultiValueMap param = new LinkedMultiValueMap(); + param.add("id", "t3_" + redditId); + final JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/del.json", param, JsonNode.class); + logger.info(node.toString()); + } + + private void checkIfNeedResubmit(Post post) { + final long currentTime = new Date().getTime(); + final long interval = currentTime - post.getSubmissionDate().getTime(); + final long intervalInMinutes = TimeUnit.MINUTES.convert(interval, TimeUnit.MILLISECONDS); + if (intervalInMinutes > post.getTimeInterval()) { + final int score = getPostScore(post.getRedditID()); + if (score < post.getMinScoreRequired()) { + deletePost(post.getRedditID()); + post.setRedditID(null); + post.setSubmissionDate(new Date(currentTime + interval)); + post.setSent(false); + post.setSubmissionResponse("Not sent yet"); + postReopsitory.save(post); + } else { + post.setNoOfAttempts(0); + postReopsitory.save(post); + } + } + } + public void setRedditRestTemplate(final OAuth2RestTemplate redditRestTemplate) { this.redditRestTemplate = redditRestTemplate; } -} \ No newline at end of file +} diff --git a/spring-security-oauth/src/main/webapp/WEB-INF/jsp/schedulePostForm.jsp b/spring-security-oauth/src/main/webapp/WEB-INF/jsp/schedulePostForm.jsp index 62f35e63d5..ff8babd2df 100755 --- a/spring-security-oauth/src/main/webapp/WEB-INF/jsp/schedulePostForm.jsp +++ b/spring-security-oauth/src/main/webapp/WEB-INF/jsp/schedulePostForm.jsp @@ -8,6 +8,7 @@ "> +