1
22
23 package com.liferay.portlet.blogs.util;
24
25 import com.liferay.portal.kernel.util.HttpUtil;
26 import com.liferay.portal.kernel.util.Tuple;
27 import com.liferay.portal.kernel.util.Validator;
28 import com.liferay.portal.service.UserLocalServiceUtil;
29 import com.liferay.portlet.blogs.model.BlogsEntry;
30 import com.liferay.portlet.messageboards.model.MBMessage;
31 import com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil;
32
33 import java.util.ArrayList;
34 import java.util.Collections;
35 import java.util.List;
36
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39
40
46 public class TrackbackVerifierUtil {
47
48 public static void addNewPost(
49 long messageId, String url, String trackbackUrl) {
50
51 _trackbacks.add(new Tuple(messageId, url, trackbackUrl));
52 }
53
54 public static void verifyNewPosts() {
55 Tuple tuple = null;
56
57 while (!_trackbacks.isEmpty()) {
58 synchronized (_trackbacks) {
59 tuple = _trackbacks.remove(0);
60 }
61
62 long messageId = (Long)tuple.getObject(0);
63 String url = (String)tuple.getObject(1);
64 String trackbackUrl = (String)tuple.getObject(2);
65
66 _verifyPost(messageId, url, trackbackUrl);
67 }
68 }
69
70 public static void verifyPost(BlogsEntry entry, MBMessage message)
71 throws Exception {
72
73 long messageId = message.getMessageId();
74 String trackbackURL = "/-/blogs/trackback/" + entry.getUrlTitle();
75 String body = message.getBody();
76 String url = null;
77
78 int start = body.indexOf("[url=");
79
80 if (start > -1) {
81 start += "[url=".length();
82
83 int end = body.indexOf("]", start);
84
85 if (end > -1) {
86 url = body.substring(start, end);
87 }
88 }
89
90 if (Validator.isNotNull(url)) {
91 long companyId = message.getCompanyId();
92 long userId = message.getUserId();
93 long defaultUserId = UserLocalServiceUtil.getDefaultUserId(
94 companyId);
95
96 if (userId == defaultUserId) {
97 _verifyPost(messageId, url, trackbackURL);
98 }
99 }
100 }
101
102 private static void _verifyPost(
103 long messageId, String url, String trackbackURL) {
104
105 try {
106 String result = HttpUtil.URLtoString(url);
107
108 if (result.contains(trackbackURL)) {
109 return;
110 }
111 }
112 catch (Exception e) {
113 }
114
115 try {
116 MBMessageLocalServiceUtil.deleteDiscussionMessage(
117 messageId);
118 }
119 catch (Exception e) {
120 _log.error(
121 "Error trying to delete trackback message " + messageId, e);
122 }
123 }
124
125 private static Log _log = LogFactory.getLog(TrackbackVerifierUtil.class);
126
127 private static List<Tuple> _trackbacks =
128 Collections.synchronizedList(new ArrayList<Tuple>());
129
130 }