Skip to content

Commit 76ed698

Browse files
committed
modify schedule reddit
1 parent e05e2c5 commit 76ed698

File tree

12 files changed

+215
-77
lines changed

12 files changed

+215
-77
lines changed

spring-security-oauth/src/main/java/org/baeldung/config/MyAuthorizationCodeAccessTokenProvider.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ public class MyAuthorizationCodeAccessTokenProvider extends AuthorizationCodeAcc
2525

2626
private static final long serialVersionUID = 3822611002661972274L;
2727

28-
private StateKeyGenerator stateKeyGenerator = new DefaultStateKeyGenerator();
28+
private final StateKeyGenerator stateKeyGenerator = new DefaultStateKeyGenerator();
2929

3030
@Override
3131
public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request) throws UserRedirectRequiredException, UserApprovalRequiredException, AccessDeniedException, OAuth2AccessDeniedException {
32-
AuthorizationCodeResourceDetails resource = (AuthorizationCodeResourceDetails) details;
32+
final AuthorizationCodeResourceDetails resource = (AuthorizationCodeResourceDetails) details;
3333

3434
if (request.getAuthorizationCode() == null) {
3535
if (request.getStateKey() == null) {
@@ -41,16 +41,16 @@ public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails detail
4141
}
4242

4343
private HttpHeaders getHeadersForTokenRequest(AccessTokenRequest request) {
44-
HttpHeaders headers = new HttpHeaders();
44+
final HttpHeaders headers = new HttpHeaders();
4545
return headers;
4646
}
4747

4848
private MultiValueMap<String, String> getParametersForTokenRequest(AuthorizationCodeResourceDetails resource, AccessTokenRequest request) {
49-
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
49+
final MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
5050
form.set("grant_type", "authorization_code");
5151
form.set("code", request.getAuthorizationCode());
5252

53-
Object preservedState = request.getPreservedState();
53+
final Object preservedState = request.getPreservedState();
5454
if (request.getStateKey() != null) {
5555
if (preservedState == null) {
5656
throw new InvalidRequestException("Possible CSRF detected - state parameter was present but no state could be found");
@@ -64,32 +64,31 @@ private MultiValueMap<String, String> getParametersForTokenRequest(Authorization
6464
redirectUri = resource.getRedirectUri(request);
6565
}
6666

67-
if (redirectUri != null && !"NONE".equals(redirectUri)) {
67+
if ((redirectUri != null) && !"NONE".equals(redirectUri)) {
6868
form.set("redirect_uri", redirectUri);
6969
}
7070

7171
return form;
7272
}
7373

7474
private UserRedirectRequiredException getRedirectForAuthorization(AuthorizationCodeResourceDetails resource, AccessTokenRequest request) {
75-
TreeMap<String, String> requestParameters = new TreeMap<String, String>();
75+
final TreeMap<String, String> requestParameters = new TreeMap<String, String>();
7676
requestParameters.put("response_type", "code");
7777
requestParameters.put("client_id", resource.getClientId());
7878
requestParameters.put("duration", "permanent");
79-
System.out.println("===== at private message redirect ===");
8079

81-
String redirectUri = resource.getRedirectUri(request);
80+
final String redirectUri = resource.getRedirectUri(request);
8281
if (redirectUri != null) {
8382
requestParameters.put("redirect_uri", redirectUri);
8483
}
8584

8685
if (resource.isScoped()) {
8786

88-
StringBuilder builder = new StringBuilder();
89-
List<String> scope = resource.getScope();
87+
final StringBuilder builder = new StringBuilder();
88+
final List<String> scope = resource.getScope();
9089

9190
if (scope != null) {
92-
Iterator<String> scopeIt = scope.iterator();
91+
final Iterator<String> scopeIt = scope.iterator();
9392
while (scopeIt.hasNext()) {
9493
builder.append(scopeIt.next());
9594
if (scopeIt.hasNext()) {
@@ -101,9 +100,9 @@ private UserRedirectRequiredException getRedirectForAuthorization(AuthorizationC
101100
requestParameters.put("scope", builder.toString());
102101
}
103102

104-
UserRedirectRequiredException redirectException = new UserRedirectRequiredException(resource.getUserAuthorizationUri(), requestParameters);
103+
final UserRedirectRequiredException redirectException = new UserRedirectRequiredException(resource.getUserAuthorizationUri(), requestParameters);
105104

106-
String stateKey = stateKeyGenerator.generateKey(resource);
105+
final String stateKey = stateKeyGenerator.generateKey(resource);
107106
redirectException.setStateKey(stateKey);
108107
request.setStateKey(stateKey);
109108
redirectException.setStateToPreserve(redirectUri);

spring-security-oauth/src/main/java/org/baeldung/config/SessionListener.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
import javax.servlet.http.HttpSessionEvent;
44
import javax.servlet.http.HttpSessionListener;
55

6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
69
public class SessionListener implements HttpSessionListener {
10+
private final Logger logger = LoggerFactory.getLogger(getClass());
711

812
@Override
913
public void sessionCreated(HttpSessionEvent event) {
10-
System.out.println("==== Session is created ====");
14+
logger.info("==== Session is created ====");
1115
event.getSession().setMaxInactiveInterval(30 * 60);
1216
}
1317

1418
@Override
1519
public void sessionDestroyed(HttpSessionEvent event) {
16-
System.out.println("==== Session is destroyed ====");
20+
logger.info("==== Session is destroyed ====");
1721
}
1822
}

spring-security-oauth/src/main/java/org/baeldung/persistence/dao/PostRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
public interface PostRepository extends JpaRepository<Post, Long> {
1111

12-
public List<Post> findBySubmissionDateBeforeAndIsSent(Date date, boolean isSent);
12+
List<Post> findBySubmissionDateBeforeAndIsSent(Date date, boolean isSent);
1313

14-
public List<Post> findByUser(User user);
14+
List<Post> findByUser(User user);
1515
}

spring-security-oauth/src/main/java/org/baeldung/persistence/dao/UserRepository.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66
public interface UserRepository extends JpaRepository<User, Long> {
7-
public User findByUsername(String username);
87

9-
public User findByAccessToken(String token);
8+
User findByUsername(String username);
9+
10+
User findByAccessToken(String token);
1011
}

spring-security-oauth/src/main/java/org/baeldung/persistence/model/Post.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,9 @@ public void setSubmissionResponse(String submissionResponse) {
100100
this.submissionResponse = submissionResponse;
101101
}
102102

103+
@Override
104+
public String toString() {
105+
return "Post [title=" + title + ", subreddit=" + subreddit + ", url=" + url + ", submissionDate=" + submissionDate + ", user=" + user + "]";
106+
}
107+
103108
}

spring-security-oauth/src/main/java/org/baeldung/persistence/model/User.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,22 +83,30 @@ public void setPosts(List<Post> posts) {
8383
public int hashCode() {
8484
final int prime = 31;
8585
int result = 1;
86-
result = prime * result + ((username == null) ? 0 : username.hashCode());
86+
result = (prime * result) + ((username == null) ? 0 : username.hashCode());
8787
return result;
8888
}
8989

9090
@Override
9191
public boolean equals(final Object obj) {
92-
if (this == obj)
92+
if (this == obj) {
9393
return true;
94-
if (obj == null)
94+
}
95+
if (obj == null) {
9596
return false;
96-
if (getClass() != obj.getClass())
97+
}
98+
if (getClass() != obj.getClass()) {
9799
return false;
100+
}
98101
final User user = (User) obj;
99-
if (!username.equals(user.username))
102+
if (!username.equals(user.username)) {
100103
return false;
104+
}
101105
return true;
102106
}
103107

108+
@Override
109+
public String toString() {
110+
return "User [username=" + username + "]";
111+
}
104112
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baeldung.reddit.util;
2+
3+
/**
4+
* Specified by Reddit API at http://www.reddit.com/dev/api#POST_api_submit
5+
*/
6+
public final class RedditApiConstants {
7+
public static final String API_TYPE = "api_type";
8+
public static final String URL = "url";
9+
public static final String SR = "sr";
10+
public static final String TITLE = "title";
11+
public static final String THEN = "then";
12+
public static final String SENDREPLIES = "sendreplies";
13+
public static final String RESUBMIT = "resubmit";
14+
public static final String KIND = "kind";
15+
16+
private RedditApiConstants() {
17+
throw new AssertionError();
18+
}
19+
}

spring-security-oauth/src/main/java/org/baeldung/web/RedditController.java

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.baeldung.persistence.dao.UserRepository;
1212
import org.baeldung.persistence.model.Post;
1313
import org.baeldung.persistence.model.User;
14+
import org.baeldung.reddit.util.RedditApiConstants;
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
1617
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,47 +44,47 @@ public class RedditController {
4344

4445
@RequestMapping("/info")
4546
public final String getInfo(Model model) {
46-
JsonNode node = redditRestTemplate.getForObject("https://oauth.reddit.com/api/v1/me", JsonNode.class);
47-
String name = node.get("name").asText();
47+
final JsonNode node = redditRestTemplate.getForObject("https://oauth.reddit.com/api/v1/me", JsonNode.class);
48+
final String name = node.get("name").asText();
4849
addUser(name, redditRestTemplate.getAccessToken());
4950
model.addAttribute("info", name);
5051
return "reddit";
5152
}
5253

5354
@RequestMapping("/submit")
5455
public final String submit(Model model, @RequestParam Map<String, String> formParams) {
55-
MultiValueMap<String, String> param = new LinkedMultiValueMap<String, String>();
56-
param.add("api_type", "json");
57-
param.add("kind", "link");
58-
param.add("resubmit", "true");
59-
param.add("sendreplies", "false");
60-
param.add("then", "comments");
61-
62-
for (Map.Entry<String, String> entry : formParams.entrySet()) {
56+
final MultiValueMap<String, String> param = new LinkedMultiValueMap<String, String>();
57+
param.add(RedditApiConstants.API_TYPE, "json");
58+
param.add(RedditApiConstants.KIND, "link");
59+
param.add(RedditApiConstants.RESUBMIT, "true");
60+
param.add(RedditApiConstants.SENDREPLIES, "false");
61+
param.add(RedditApiConstants.THEN, "comments");
62+
63+
for (final Map.Entry<String, String> entry : formParams.entrySet()) {
6364
param.add(entry.getKey(), entry.getValue());
6465
}
6566

6667
logger.info("User submitting Link with these parameters: " + formParams.entrySet());
67-
JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param, JsonNode.class);
68+
final JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param, JsonNode.class);
6869
logger.info("Full Reddit Response: " + node.toString());
69-
String responseMsg = parseResponse(node);
70+
final String responseMsg = parseResponse(node);
7071
model.addAttribute("msg", responseMsg);
7172
return "submissionResponse";
7273
}
7374

7475
@RequestMapping("/post")
7576
public final String showSubmissionForm(Model model) {
76-
String needsCaptchaResult = needsCaptcha();
77+
final String needsCaptchaResult = needsCaptcha();
7778
if (needsCaptchaResult.equalsIgnoreCase("true")) {
78-
String iden = getNewCaptcha();
79+
final String iden = getNewCaptcha();
7980
model.addAttribute("iden", iden);
8081
}
8182
return "submissionForm";
8283
}
8384

8485
@RequestMapping("/postSchedule")
8586
public final String showSchedulePostForm(Model model) {
86-
String needsCaptchaResult = needsCaptcha();
87+
final String needsCaptchaResult = needsCaptcha();
8788
if (needsCaptchaResult.equalsIgnoreCase("true")) {
8889
model.addAttribute("msg", "Sorry, You do not have enought karma");
8990
return "submissionResponse";
@@ -94,8 +95,8 @@ public final String showSchedulePostForm(Model model) {
9495
@RequestMapping("/schedule")
9596
public final String schedule(Model model, @RequestParam Map<String, String> formParams) throws ParseException {
9697
logger.info("User scheduling Post with these parameters: " + formParams.entrySet());
97-
User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
98-
Post post = new Post();
98+
final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
99+
final Post post = new Post();
99100
post.setUser(user);
100101
post.setSent(false);
101102
post.setTitle(formParams.get("title"));
@@ -108,48 +109,49 @@ public final String schedule(Model model, @RequestParam Map<String, String> form
108109
return "submissionResponse";
109110
}
110111
postReopsitory.save(post);
111-
List<Post> posts = postReopsitory.findByUser(user);
112+
final List<Post> posts = postReopsitory.findByUser(user);
112113
model.addAttribute("posts", posts);
113114
return "postListView";
114115
}
115116

116117
@RequestMapping("/posts")
117118
public final String getScheduledPosts(Model model) {
118-
User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
119-
List<Post> posts = postReopsitory.findByUser(user);
119+
final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
120+
final List<Post> posts = postReopsitory.findByUser(user);
120121
model.addAttribute("posts", posts);
121122
return "postListView";
122123
}
123124

124125
// === private
125126

126127
private final String needsCaptcha() {
127-
String result = redditRestTemplate.getForObject("https://oauth.reddit.com/api/needs_captcha.json", String.class);
128+
final String result = redditRestTemplate.getForObject("https://oauth.reddit.com/api/needs_captcha.json", String.class);
128129
return result;
129130
}
130131

131132
private final String getNewCaptcha() {
132-
Map<String, String> param = new HashMap<String, String>();
133+
final Map<String, String> param = new HashMap<String, String>();
133134
param.put("api_type", "json");
134135

135-
String result = redditRestTemplate.postForObject("https://oauth.reddit.com/api/new_captcha", param, String.class, param);
136-
String[] split = result.split("\"");
136+
final String result = redditRestTemplate.postForObject("https://oauth.reddit.com/api/new_captcha", param, String.class, param);
137+
final String[] split = result.split("\"");
137138
return split[split.length - 2];
138139
}
139140

140141
private final String parseResponse(JsonNode node) {
141142
String result = "";
142-
JsonNode errorNode = node.get("json").get("errors").get(0);
143+
final JsonNode errorNode = node.get("json").get("errors").get(0);
143144
if (errorNode != null) {
144-
for (JsonNode child : errorNode) {
145+
for (final JsonNode child : errorNode) {
145146
result = result + child.toString().replaceAll("\"|null", "") + "<br>";
146147
}
147148
return result;
148149
} else {
149-
if (node.get("json").get("data") != null && node.get("json").get("data").get("url") != null)
150+
if ((node.get("json").get("data") != null) && (node.get("json").get("data").get("url") != null)) {
150151
return "Post submitted successfully <a href=\"" + node.get("json").get("data").get("url").asText() + "\"> check it out </a>";
151-
else
152+
} else {
152153
return "Error Occurred";
154+
}
153155
}
154156
}
155157

spring-security-oauth/src/main/java/org/baeldung/web/RestExceptionHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ public RestExceptionHandler() {
2626
// 500
2727
@ExceptionHandler({ UserApprovalRequiredException.class, UserRedirectRequiredException.class })
2828
public ResponseEntity<Object> handleRedirect(final RuntimeException ex, final WebRequest request) {
29-
logger.error("500 Status Code", ex);
29+
logger.info(ex.getLocalizedMessage());
3030
throw ex;
3131
}
3232

3333
@ExceptionHandler({ Exception.class })
3434
public ResponseEntity<Object> handleInternal(final RuntimeException ex, final WebRequest request) {
3535
logger.info(request.getHeader("x-ratelimit-remaining"));
3636
logger.error("500 Status Code", ex);
37-
String response = "Error Occurred : " + ex.getMessage();
37+
final String response = "Error Occurred : " + ex.getMessage();
3838
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
3939
}
4040
}

0 commit comments

Comments
 (0)