1
22
23 package com.liferay.portlet.blogs.util;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.util.HttpUtil;
28 import com.liferay.portal.kernel.util.Tuple;
29 import com.liferay.portal.kernel.util.Validator;
30 import com.liferay.portal.service.UserLocalServiceUtil;
31 import com.liferay.portal.util.Portal;
32 import com.liferay.portlet.blogs.model.BlogsEntry;
33 import com.liferay.portlet.messageboards.model.MBMessage;
34 import com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil;
35
36 import java.util.ArrayList;
37 import java.util.Collections;
38 import java.util.List;
39
40
45 public class TrackbackVerifierUtil {
46
47 public static void addNewPost(
48 long messageId, String url, String entryUrl) {
49
50 _trackbacks.add(new Tuple(messageId, url, entryUrl));
51 }
52
53 public static void verifyNewPosts() {
54 Tuple tuple = null;
55
56 while (!_trackbacks.isEmpty()) {
57 synchronized (_trackbacks) {
58 tuple = _trackbacks.remove(0);
59 }
60
61 long messageId = (Long)tuple.getObject(0);
62 String url = (String)tuple.getObject(1);
63 String entryUrl = (String)tuple.getObject(2);
64
65 _verifyPost(messageId, url, entryUrl);
66 }
67 }
68
69 public static void verifyPost(BlogsEntry entry, MBMessage message)
70 throws Exception {
71
72 long messageId = message.getMessageId();
73 String entryURL =
74 Portal.FRIENDLY_URL_SEPARATOR + "blogs/" + 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, entryURL);
98 }
99 }
100 }
101
102 private static void _verifyPost(
103 long messageId, String url, String entryURL) {
104
105 try {
106 String result = HttpUtil.URLtoString(url);
107
108 if (result.contains(entryURL)) {
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 =
126 LogFactoryUtil.getLog(TrackbackVerifierUtil.class);
127
128 private static List<Tuple> _trackbacks =
129 Collections.synchronizedList(new ArrayList<Tuple>());
130
131 }