diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogEntryComment.java b/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogEntryComment.java index 06861d5314..727788cd63 100644 --- a/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogEntryComment.java +++ b/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogEntryComment.java @@ -23,6 +23,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.roller.util.UUIDGenerator; +import org.apache.roller.weblogger.util.CommentAuthorUrl; /** @@ -130,6 +131,13 @@ public String getUrl() { public void setUrl(String url) { this.url = url; } + + /** + * URL of the comment writer when it can be safely rendered as a link. + */ + public String getSafeUrl() { + return CommentAuthorUrl.normalize(this.url); + } /** diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapper.java b/app/src/main/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapper.java index 639b31b53b..6f7d630c03 100644 --- a/app/src/main/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapper.java +++ b/app/src/main/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapper.java @@ -93,7 +93,7 @@ public String getEmail() { * Value is always html escaped. */ public String getUrl() { - return StringEscapeUtils.escapeHtml4(this.pojo.getUrl()); + return StringEscapeUtils.escapeHtml4(this.pojo.getSafeUrl()); } @@ -147,7 +147,7 @@ public String getRemoteHost() { /** - * Get the http referrer of the comment poster, used for trackbacks. + * Get the HTTP referrer of the comment poster. * * Value is always html escaped. */ diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java index 693be62ab1..ee12cb7d09 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java @@ -56,7 +56,6 @@ public class WeblogRequestMapper implements RequestMapper { private static final String RSD_SERVLET = "/roller-ui/rendering/rsd"; private static final String COMMENT_SERVLET = "/roller-ui/rendering/comment"; - private static final String TRACKBACK_SERVLET = "/roller-ui/rendering/trackback"; // url patterns that are not allowed to be considered weblog handles @@ -259,45 +258,24 @@ private String calculateForwardUrl(HttpServletRequest request, StringBuilder forwardUrl = new StringBuilder(64); - // POST urls, like comment and trackback servlets + // POST URLs for the comment servlet if("POST".equals(request.getMethod())) { - // posting to permalink, this means comment or trackback - if(context.equals("entry")) { - // trackback requests are required to have an "excerpt" param - if(request.getParameter("excerpt") != null) { + // Comment requests post content to a permalink. + if("entry".equals(context) && request.getParameter("content") != null) { - forwardUrl.append(TRACKBACK_SERVLET); - forwardUrl.append('/'); - forwardUrl.append(handle); - if(locale != null) { - forwardUrl.append('/'); - forwardUrl.append(locale); - } - forwardUrl.append('/'); - forwardUrl.append(context); - if(data != null) { - forwardUrl.append('/'); - forwardUrl.append(data); - } - - // comment requests are required to have a "content" param - } else if(request.getParameter("content") != null) { - - forwardUrl.append(COMMENT_SERVLET); + forwardUrl.append(COMMENT_SERVLET); + forwardUrl.append('/'); + forwardUrl.append(handle); + if(locale != null) { forwardUrl.append('/'); - forwardUrl.append(handle); - if(locale != null) { - forwardUrl.append('/'); - forwardUrl.append(locale); - } + forwardUrl.append(locale); + } + forwardUrl.append('/'); + forwardUrl.append(context); + if(data != null) { forwardUrl.append('/'); - forwardUrl.append(context); - if(data != null) { - forwardUrl.append('/'); - forwardUrl.append(data); - } + forwardUrl.append(data); } - } else { // someone posting data where they aren't supposed to return null; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/ConfigModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/ConfigModel.java index fb86421ee4..3a912075f4 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/ConfigModel.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/ConfigModel.java @@ -101,11 +101,6 @@ public boolean getCommentEmailNotify() { return getBooleanProperty("users.comments.emailnotify"); } - public boolean getTrackbacksEnabled() { - return getBooleanProperty("users.trackbacks.enabled"); - } - - /** Get Roller version string */ public String getRollerVersion() { return WebloggerFactory.getWeblogger().getVersion(); @@ -146,4 +141,3 @@ private boolean getBooleanProperty(String name) { } } - diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java index 7ca561a884..8318c28e34 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java @@ -184,11 +184,6 @@ public String comments(String anchor) { } - public String trackback(String anchor) { - return urlStrategy.getWeblogEntryURL(weblog, locale, anchor, true); - } - - public String date(String dateString) { return urlStrategy.getWeblogCollectionURL(weblog, locale, null, dateString, null, -1, true); } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.java deleted file mode 100644 index d722328dcf..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.ui.rendering.plugins.comments; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.ResourceBundle; - -import org.apache.roller.util.RollerConstants; -import org.apache.roller.weblogger.business.WebloggerFactory; -import org.apache.roller.weblogger.config.WebloggerRuntimeConfig; -import org.apache.roller.weblogger.pojos.WeblogEntryComment; -import org.apache.roller.weblogger.util.LinkbackExtractor; -import org.apache.roller.weblogger.util.RollerMessages; - -/** - * Validates comment if comment's URL links back to the comment's entry, - * intended for use with trackbacks only. - */ -public class TrackbackLinkbackCommentValidator implements CommentValidator { - - private ResourceBundle bundle = ResourceBundle.getBundle("ApplicationResources"); - - @Override - public String getName() { - return bundle.getString("comment.validator.trackbackLinkbackName"); - } - - @Override - public int validate(WeblogEntryComment comment, RollerMessages messages) { - - // linkback validation can be toggled at runtime, so check if it's enabled - // if it's disabled then just return a score of 100 - if(!WebloggerRuntimeConfig.getBooleanProperty("site.trackbackVerification.enabled")) { - return RollerConstants.PERCENT_100; - } - - int ret = 0; - LinkbackExtractor linkback = null; - try { - linkback = new LinkbackExtractor( - comment.getUrl(), - WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogEntryURL( - comment.getWeblogEntry().getWebsite(), - null, - comment.getWeblogEntry().getAnchor(), - true)); - } catch (MalformedURLException ignored1) { - } catch (IOException ignored2) {} - - if (linkback != null && linkback.getExcerpt() != null) { - ret = RollerConstants.PERCENT_100; - } else { - messages.addError("comment.validator.trackbackLinkbackMessage"); - } - return ret; - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java deleted file mode 100644 index 2b43a4e755..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.ui.rendering.servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.sql.Timestamp; -import java.util.Date; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.util.RollerConstants; -import org.apache.roller.weblogger.WebloggerException; -import org.apache.roller.weblogger.config.WebloggerRuntimeConfig; -import org.apache.roller.weblogger.business.WebloggerFactory; -import org.apache.roller.weblogger.business.WeblogEntryManager; -import org.apache.roller.weblogger.pojos.WeblogEntryComment; -import org.apache.roller.weblogger.pojos.WeblogEntryComment.ApprovalStatus; -import org.apache.roller.weblogger.pojos.WeblogEntry; -import org.apache.roller.weblogger.pojos.Weblog; -import org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager; -import org.apache.roller.weblogger.ui.rendering.plugins.comments.TrackbackLinkbackCommentValidator; -import org.apache.roller.weblogger.ui.rendering.util.WeblogTrackbackRequest; -import org.apache.roller.weblogger.util.I18nMessages; -import org.apache.roller.weblogger.util.MailUtil; -import org.apache.roller.weblogger.util.RollerMessages; -import org.apache.roller.weblogger.util.cache.CacheManager; - - -/** - * Roller's Trackback server implementation. POSTing to this Servlet will add a - * Trackback to a Weblog Entry. For more info on Trackback, read the spec: - * MT Trackback. - */ -public class TrackbackServlet extends HttpServlet { - - private static Log logger = LogFactory.getLog(TrackbackServlet.class); - - private CommentValidationManager commentValidationManager = null; - - - @Override - public void init(ServletConfig config) throws ServletException { - commentValidationManager = new CommentValidationManager(); - - // add trackback verification validator just for trackbacks - commentValidationManager.addCommentValidator(new TrackbackLinkbackCommentValidator()); - } - - - /** - * Handle incoming http GET requests. - * - * The TrackbackServlet does not support GET requests, it's a 404. - */ - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - response.sendError(HttpServletResponse.SC_NOT_FOUND); - } - - - /** - * Service incoming POST requests. - * - * Here we handle incoming trackback posts. - */ - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - String error = null; - PrintWriter pw = response.getWriter(); - - Weblog weblog = null; - WeblogEntry entry = null; - - RollerMessages messages = new RollerMessages(); - - WeblogTrackbackRequest trackbackRequest = null; - if (!WebloggerRuntimeConfig.getBooleanProperty("users.trackbacks.enabled")) { - error = "Trackbacks are disabled for this site"; - } else { - - try { - trackbackRequest = new WeblogTrackbackRequest(request); - - if ((trackbackRequest.getTitle() == null) || - "".equals(trackbackRequest.getTitle())) { - trackbackRequest.setTitle(trackbackRequest.getUrl()); - } - - if (trackbackRequest.getExcerpt() == null) { - trackbackRequest.setExcerpt(""); - } else if (trackbackRequest.getExcerpt().length() >= RollerConstants.TEXTWIDTH_255) { - trackbackRequest.setExcerpt(trackbackRequest.getExcerpt().substring(0, - RollerConstants.TEXTWIDTH_255 - 3)+"..."); - } - - // lookup weblog specified by comment request - weblog = WebloggerFactory.getWeblogger().getWeblogManager() - .getWeblogByHandle(trackbackRequest.getWeblogHandle()); - - if (weblog == null) { - throw new WebloggerException("unable to lookup weblog: "+ - trackbackRequest.getWeblogHandle()); - } - - // lookup entry specified by comment request - WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger().getWeblogEntryManager(); - entry = weblogMgr.getWeblogEntryByAnchor(weblog, trackbackRequest.getWeblogAnchor()); - - if (entry == null) { - throw new WebloggerException("unable to lookup entry: "+ - trackbackRequest.getWeblogAnchor()); - } - - } catch (Exception e) { - // some kind of error parsing the request or looking up weblog - logger.debug("error creating trackback request", e); - error = e.getMessage(); - } - } - - if (error != null) { - pw.println(this.getErrorResponse(error)); - return; - } - - try { - // check if trackbacks are allowed for this entry - // this checks site-wide settings, weblog settings, and entry settings - if (entry != null && entry.getCommentsStillAllowed() && entry.isPublished()) { - - // Track trackbacks as comments - WeblogEntryComment comment = new WeblogEntryComment(); - comment.setContent("[Trackback] "+trackbackRequest.getExcerpt()); - comment.setName(trackbackRequest.getBlogName()); - comment.setUrl(trackbackRequest.getUrl()); - comment.setWeblogEntry(entry); - comment.setRemoteHost(request.getRemoteHost()); - comment.setNotify(Boolean.FALSE); - comment.setPostTime(new Timestamp(new Date().getTime())); - - // run new trackback through validators - int validationScore = commentValidationManager.validateComment(comment, messages); - logger.debug("Comment Validation score: " + validationScore); - - if (validationScore == RollerConstants.PERCENT_100 && weblog.getCommentModerationRequired()) { - // Valid comments go into moderation if required - comment.setStatus(ApprovalStatus.PENDING); - } else if (validationScore == RollerConstants.PERCENT_100) { - // else they're approved - comment.setStatus(ApprovalStatus.APPROVED); - } else { - // Invalid comments are marked as spam - comment.setStatus(ApprovalStatus.SPAM); - } - - // save, commit, send response - if (!ApprovalStatus.SPAM.equals(comment.getStatus()) || - !WebloggerRuntimeConfig.getBooleanProperty("trackbacks.ignoreSpam.enabled")) { - - WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager(); - mgr.saveComment(comment); - WebloggerFactory.getWeblogger().flush(); - - // only invalidate the cache if comment isn't moderated - if(!weblog.getCommentModerationRequired()) { - // Clear all caches associated with comment - CacheManager.invalidate(comment); - } - - // Send email notifications - MailUtil.sendEmailNotification(comment, messages, - I18nMessages.getMessages(trackbackRequest.getLocaleInstance()), - validationScore == RollerConstants.PERCENT_100); - - if (ApprovalStatus.PENDING.equals(comment.getStatus())) { - pw.println(this.getSuccessResponse("Trackback submitted to moderator")); - } else { - pw.println(this.getSuccessResponse("Trackback accepted")); - } - } - - } else if (entry!=null) { - error = "Comments and Trackbacks are disabled for the entry specified."; - } else { - error = "Entry not specified."; - } - - } catch (Exception e) { - error = e.getMessage(); - if ( error == null ) { - error = e.getClass().getName(); - } - } - - if(error!= null) { - pw.println(this.getErrorResponse(error)); - } - - } - - - private String getSuccessResponse(String message) { - - StringBuilder output = new StringBuilder(); - - output.append(""); - output.append(""); - output.append("0"); - output.append(""); - output.append(message); - output.append(""); - output.append(""); - - return output.toString(); - } - - - private String getErrorResponse(String message) { - - StringBuilder output = new StringBuilder(); - - output.append(""); - output.append(""); - output.append("1"); - output.append("ERROR: "); - output.append(message); - output.append(""); - output.append(""); - - return output.toString(); - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java deleted file mode 100644 index 11807c6b5f..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.ui.rendering.util; - -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.WebloggerException; -import org.apache.roller.weblogger.business.WebloggerFactory; -import org.apache.roller.weblogger.business.WeblogEntryManager; -import org.apache.roller.weblogger.pojos.WeblogEntry; - - -/** - * Represents a request to post a weblog entry trackback. - */ -public class WeblogTrackbackRequest extends WeblogRequest { - - private static Log log = LogFactory.getLog(WeblogTrackbackRequest.class); - - private static final String TRACKBACK_SERVLET = "/roller-ui/rendering/trackback"; - - // lightweight attributes - private String blogName = null; - private String url = null; - private String excerpt = null; - private String title = null; - private String weblogAnchor = null; - - // heavyweight attributes - private WeblogEntry weblogEntry = null; - - - public WeblogTrackbackRequest() {} - - - public WeblogTrackbackRequest(HttpServletRequest request) - throws InvalidRequestException { - - // let our parent take care of their business first - // parent determines weblog handle and locale if specified - super(request); - - String servlet = request.getServletPath(); - - // we only want the path info left over from after our parents parsing - String pathInfo = this.getPathInfo(); - - // was this request bound for the comment servlet? - if(servlet == null || !TRACKBACK_SERVLET.equals(servlet)) { - throw new InvalidRequestException("not a weblog trackback request, "+ - request.getRequestURL()); - } - - - /* - * parse path info. we expect ... - * - * /entry/ - permalink - */ - if(pathInfo != null && !pathInfo.isBlank()) { - - // we should only ever get 2 path elements - String[] pathElements = pathInfo.split("/"); - if(pathElements.length == 2) { - - String context = pathElements[0]; - if("entry".equals(context)) { - this.weblogAnchor = URLDecoder.decode(pathElements[1], StandardCharsets.UTF_8); - } else { - throw new InvalidRequestException("bad path info, "+ - request.getRequestURL()); - } - - } else { - throw new InvalidRequestException("bad path info, "+ - request.getRequestURL()); - } - - } else { - // bad request - throw new InvalidRequestException("bad path info, "+ - request.getRequestURL()); - } - - - /* - * parse request parameters - * - * the only params we currently care about are: - * blog_name - comment author - * url - comment referring url - * excerpt - comment contents - * title - comment title - */ - if(request.getParameter("blog_name") != null) { - this.blogName = request.getParameter("blog_name"); - } - - if(request.getParameter("url") != null) { - this.url = request.getParameter("url"); - } - - if(request.getParameter("excerpt") != null) { - this.excerpt = request.getParameter("excerpt"); - } - - if(request.getParameter("title") != null) { - this.title = request.getParameter("title"); - } - - // a little bit of validation, trackbacks enforce that all params - // must have a value, so any nulls equals a bad request - if(this.blogName == null || this.url == null || - this.excerpt == null || this.title == null) { - throw new InvalidRequestException("bad request data. did not "+ - "receive values for all trackback params (blog_name, url, excerpt, title)"); - } - - if(log.isDebugEnabled()) { - log.debug("name = "+this.blogName); - log.debug("url = "+this.url); - log.debug("excerpt = "+this.excerpt); - log.debug("title = "+this.title); - log.debug("weblogAnchor = "+this.weblogAnchor); - } - } - - public String getBlogName() { - return blogName; - } - - public void setBlogName(String blogName) { - this.blogName = blogName; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getExcerpt() { - return excerpt; - } - - public void setExcerpt(String excerpt) { - this.excerpt = excerpt; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getWeblogAnchor() { - return weblogAnchor; - } - - public void setWeblogAnchor(String weblogAnchor) { - this.weblogAnchor = weblogAnchor; - } - - public WeblogEntry getWeblogEntry() { - - if(weblogEntry == null && weblogAnchor != null) { - try { - WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager(); - weblogEntry = wmgr.getWeblogEntryByAnchor(getWeblog(), weblogAnchor); - } catch (WebloggerException ex) { - log.error("Error getting weblog entry "+weblogAnchor, ex); - } - } - - return weblogEntry; - } - - public void setWeblogEntry(WeblogEntry weblogEntry) { - this.weblogEntry = weblogEntry; - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/util/BannedwordslistChecker.java b/app/src/main/java/org/apache/roller/weblogger/util/BannedwordslistChecker.java index 46ec921800..cd8e41bfbc 100644 --- a/app/src/main/java/org/apache/roller/weblogger/util/BannedwordslistChecker.java +++ b/app/src/main/java/org/apache/roller/weblogger/util/BannedwordslistChecker.java @@ -27,7 +27,7 @@ import org.apache.roller.weblogger.pojos.Weblog; /** - * Checks comment, trackbacks and referrers for spam. + * Checks comments and referrers for spam. * @author Lance Lavandowska * @author Dave Johnson */ @@ -49,17 +49,6 @@ public static boolean checkComment(WeblogEntryComment comment) { return false; } - /** - * Test trackback comment, applying all bannedwordslists, if configured - * @return True if comment matches bannedwordslist term - */ - public static boolean checkTrackback(WeblogEntryComment comment) { - if (WebloggerConfig.getBooleanProperty("site.bannedwordslist.enable.trackbacks")) { - return testComment(comment); - } - return false; - } - /** * Test referrer URL, applying bannedwordslist and website bannedwordslist only if configured * @return True if comment matches bannedwordslist term @@ -101,4 +90,3 @@ private static boolean testComment(WeblogEntryComment c) { return ret; } } - diff --git a/app/src/main/java/org/apache/roller/weblogger/util/CommentAuthorUrl.java b/app/src/main/java/org/apache/roller/weblogger/util/CommentAuthorUrl.java new file mode 100644 index 0000000000..903b56ffb8 --- /dev/null +++ b/app/src/main/java/org/apache/roller/weblogger/util/CommentAuthorUrl.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.roller.weblogger.util; + +import org.apache.commons.validator.routines.UrlValidator; + +/** + * Normalizes comment author URLs before they are rendered as links. + */ +public final class CommentAuthorUrl { + + private static final UrlValidator VALIDATOR = + new UrlValidator(new String[] {"http", "https"}); + + private CommentAuthorUrl() { + } + + public static String normalize(String value) { + if (value == null || value.isBlank()) { + return null; + } + String normalized = value.trim(); + return VALIDATOR.isValid(normalized) ? normalized : null; + } +} diff --git a/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java b/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java deleted file mode 100644 index d43378e74d..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java +++ /dev/null @@ -1,393 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. The ASF licenses this file to You -* under the Apache License, Version 2.0 (the "License"); you may not -* use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. For additional information regarding -* copyright in this work, please see the NOTICE file in the top level -* directory of this distribution. -*/ -package org.apache.roller.weblogger.util; - -import com.rometools.rome.feed.synd.SyndEntry; -import com.rometools.rome.feed.synd.SyndFeed; -import com.rometools.rome.io.FeedException; -import com.rometools.rome.io.SyndFeedInput; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Arrays; -import java.util.List; - -import javax.swing.text.MutableAttributeSet; -import javax.swing.text.html.HTML; -import javax.swing.text.html.HTMLEditorKit; -import javax.swing.text.html.HTML.Tag; -import javax.swing.text.html.HTMLEditorKit.Parser; -import javax.swing.text.html.HTMLEditorKit.ParserCallback; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - - -/** - * Parses HTML file for referring linkback title and excerpt. - * - * @author David M Johnson - */ -public class LinkbackExtractor -{ - private static Log mLogger = LogFactory.getFactory().getInstance( - LinkbackExtractor.class); - private boolean mFound = false; - private String mTitle = ""; - private String mRssLink = null; - private String mExcerpt = null; - private String mPermalink = null; - private int mStart = 0; - private int mEnd = 0; - private String mRequestURL = null; - private String mRequestURLWWW = null; - private String mRefererURL; - - private static final int MAX_EXCERPT_CHARS = 500; - private static final int DESIRED_TITLE_LENGTH = 50; - - //------------------------------------------------------------------------ - /** - * Extract referring page title, excerpt, and permalink. - * - * @param refererURL - * @param requestURL - */ - public LinkbackExtractor(String refererURL, String requestURL) throws IOException { - try { - extractByParsingHtml(refererURL, requestURL); - if (mRssLink != null) { - extractByParsingRss(mRssLink, requestURL); - } - } catch (Exception e) { - if (mLogger.isDebugEnabled()) { - mLogger.debug("Extracting linkback", e); - } - } - } - - //------------------------------------------------------------------------ - private void extractByParsingHtml(String refererURL, String requestURL) throws IOException { - URL url = new URL(refererURL); - InputStream is = url.openStream(); - - mRefererURL = refererURL; - - if (requestURL.startsWith("http://www.")) { - mRequestURLWWW = requestURL; - mRequestURL = "http://" + mRequestURLWWW.substring(11); - } else { - mRequestURL = requestURL; - mRequestURLWWW = "http://www." + mRequestURL.substring(7); - } - - // Trick gets Swing's HTML parser by making its protected getParser() method public - // Ignore inaccurate Sonar complaint about useless overriding method: - // http://jira.codehaus.org/browse/SONARJAVA-287 - Parser parser = (new HTMLEditorKit() { - @Override - public Parser getParser() { - return super.getParser(); - } - }).getParser(); - - // Read HTML file into string - StringBuilder sb = new StringBuilder(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - try { - String line; - while ((line = br.readLine()) != null) { - sb.append(line); - } - } finally { - br.close(); - } - - // Parse HTML string to find title and start and end position - // of the referring excerpt. - StringReader sr = new StringReader(sb.toString()); - parser.parse(sr, new LinkbackCallback(), true); - - if (mStart != 0 && mEnd != 0 && mEnd > mStart) { - mExcerpt = sb.toString().substring(mStart, mEnd); - mExcerpt = Utilities.removeHTML(mExcerpt); - - if (mExcerpt.length() > MAX_EXCERPT_CHARS) { - mExcerpt = mExcerpt.substring(0, MAX_EXCERPT_CHARS) + "..."; - } - } - - if (mTitle.startsWith(">") && mTitle.length() > 1) { - mTitle = mTitle.substring(1); - } - } - - //------------------------------------------------------------------------ - private void extractByParsingRss(String rssLink, String requestURL) - throws FeedException, IOException { - SyndFeedInput feedInput = new SyndFeedInput(); - SyndFeed feed = feedInput.build( - new InputStreamReader(new URL(rssLink).openStream())); - String feedTitle = feed.getTitle(); - - int count = 0; - - if (mLogger.isDebugEnabled()) { - mLogger.debug("Feed parsed, title: " + feedTitle); - } - - for (Object objItem : feed.getEntries()) { - count++; - SyndEntry item = (SyndEntry) objItem; - if (item.getDescription().getValue().contains(requestURL)) { - mFound = true; - mPermalink = item.getLink(); - if (feedTitle != null && !feedTitle.isBlank()) { - mTitle = feedTitle + ": " + item.getTitle(); - } else { - mTitle = item.getTitle(); - } - mExcerpt = item.getDescription().getValue(); - mExcerpt = Utilities.removeHTML(mExcerpt); - if (mExcerpt.length() > MAX_EXCERPT_CHARS) { - mExcerpt = mExcerpt.substring(0, MAX_EXCERPT_CHARS) + "..."; - } - break; - } - } - - if (mLogger.isDebugEnabled()) { - mLogger.debug("Parsed " + count + " articles, found linkback=" + mFound); - } - } - - //------------------------------------------------------------------------ - /** - * Returns the excerpt. - * - * @return String - */ - public String getExcerpt() { - return mExcerpt; - } - - //------------------------------------------------------------------------ - /** - * Returns the title. - * - * @return String - */ - public String getTitle() { - return mTitle; - } - - //------------------------------------------------------------------------ - /** - * Returns the permalink. - * - * @return String - */ - public String getPermalink() { - return mPermalink; - } - - //------------------------------------------------------------------------ - /** - * Sets the permalink. - * - * @param permalink - * The permalink to set - */ - public void setPermalink(String permalink) - { - mPermalink = permalink; - } - - ///////////////////////////////////////////////////////////////////////// - - /** - * Parser callback that finds title and excerpt. As we walk through the HTML - * tags, we keep track of the most recently encountered divider tag in the - * mStart field. Once we find the referring permalink, we set the mFound - * flag. After that, we look for the next divider tag and save it's position - * in the mEnd field. - */ - private final class LinkbackCallback extends ParserCallback - { - // Dividers - private Tag[] mDivTags = { Tag.TD, Tag.DIV, Tag.SPAN, - Tag.BLOCKQUOTE, Tag.P, Tag.LI, - Tag.BR, Tag.HR, Tag.PRE, Tag.H1, - Tag.H2, Tag.H3, Tag.H4, Tag.H5, - Tag.H6 }; - - private List mList = Arrays.asList(mDivTags); - - private Tag mCurrentTag = null; - - /** - * Look for divider tags and for the permalink. - * - * @param tag - * HTML tag - * @param atts - * Attributes of that tag - * @param pos - * Tag's position in file - */ - @Override - public void handleStartTag(Tag tag, MutableAttributeSet atts, int pos) - { - if (mList.contains(tag) && !mFound) - { - mStart = pos; - } - else if (mList.contains(tag) && mFound && mEnd == 0) - { - mEnd = pos; - } - else if (tag.equals(Tag.A)) - { - String href = (String) atts.getAttribute(HTML.Attribute.HREF); - if (href == null) { - return; - } - int hashPos = href.lastIndexOf('#'); - if (hashPos != -1) - { - href = href.substring(0, hashPos); - } - if (href != null - && (href.equals(mRequestURL) || href - .equals(mRequestURLWWW))) - { - mFound = true; - } - } - mCurrentTag = tag; - } - - /** - * Needed to handle SPAN tag. - */ - @Override - public void handleSimpleTag(Tag tag, MutableAttributeSet atts, int pos) - { - if (mList.contains(tag) && mFound && mEnd == 0) - { - mEnd = pos; - } - else if (tag.equals(Tag.LINK)) - { - // Look out for RSS autodiscovery link - String title = (String) atts.getAttribute(HTML.Attribute.TITLE); - String type = (String) atts.getAttribute(HTML.Attribute.TYPE); - if (title != null && type != null - && type.equals("application/rss+xml") - && title.equals("RSS")) - { - mRssLink = (String) atts.getAttribute(HTML.Attribute.HREF); - - if (mLogger.isDebugEnabled()) - { - mLogger.debug("Found RSS link " + mRssLink); - } - - if (mRssLink.startsWith("/") && mRssLink.length() > 1) - { - try - { - URL url = new URL(mRefererURL); - mRssLink = url.getProtocol() + "://" - + url.getHost() + ":" + url.getPort() - + mRssLink; - } - catch (MalformedURLException e) - { - mRssLink = null; - if (mLogger.isDebugEnabled()) - { - mLogger.debug("Determining RSS URL", e); - } - } - } - else if (!mRssLink.startsWith("http")) - { - int slash = mRefererURL.lastIndexOf('/'); - if (slash != -1) - { - mRssLink = mRefererURL.substring(0, slash) + "/" - + mRssLink; - } - } - if (mLogger.isDebugEnabled()) - { - mLogger.debug("Qualified RSS link is " + mRssLink); - } - } - } - } - - /** - * Stop at the very first divider tag after the permalink. - * - * @param tag - * End tag - * @param pos - * Position in HTML file - */ - @Override - public void handleEndTag(Tag tag, int pos) - { - if (mList.contains(tag) && mFound && mEnd == 0) - { - mEnd = pos; - } - else if (mList.contains(tag) && !mFound) - { - mStart = pos; - } - else - { - mCurrentTag = null; - } - } - - /** - * Get the page title - */ - @Override - public void handleText(char[] data, int pos) - { - if (mCurrentTag != null && mCurrentTag.equals(Tag.TITLE)) - { - String newText = new String(data); - if (mTitle.length() < DESIRED_TITLE_LENGTH) - { - mTitle += newText; - } - } - } - } -} - diff --git a/app/src/main/resources/ApplicationResources.properties b/app/src/main/resources/ApplicationResources.properties index 66072c23f0..61c2302152 100644 --- a/app/src/main/resources/ApplicationResources.properties +++ b/app/src/main/resources/ApplicationResources.properties @@ -225,9 +225,6 @@ comment.validator.excessSizeMessage=Comment has more than {0} characters comment.validator.bannedwordslistName=Banned Words Comment Validator comment.validator.bannedwordslistMessage=Comment contains banned/ignored words -comment.validator.trackbackLinkbackName=Trackback Linkback Comment Validator -comment.validator.trackbackLinkbackMessage=Trackback from site/page that does not link to your weblog entry - comment.validator.akismetName=Akismet Comment Validator comment.validator.akismetMessage=Akismet service (akismet.com) says comment is spam @@ -346,17 +343,13 @@ configForm.pageMaxEntries=Max number of entries to allow per page configForm.newsfeedMaxEntries=Number of entries to provide in feeds configForm.styledFeeds=Display styled feeds for browsers -configForm.commentSettings=Comment and Trackback Settings +configForm.commentSettings=Comment Settings configForm.enableComments=Allow weblog comments? configForm.ignoreSpamComments=Don''t save comments thought to be spam -configForm.enableTrackbacks=Allow weblog trackbacks? -configForm.ignoreSpamTrackbacks=Don''t save trackbacks thought to be spam configForm.commentHtmlAllowed=Allow html in comments? configForm.commentPlugins=Enabled comment formatting plugins configForm.emailComments=Allow email notification of comments? configForm.moderationRequired=Require comment moderation for all weblogs -configForm.enableTrackbackValidation=Enable verification of trackback links? - configForm.fileUploadSettings=File Upload Settings configForm.enableFileUploads=Enable File Uploads? (only enable if you trust all users not to upload malicious content) configForm.allowedExtensions=Allowed Extensions @@ -464,11 +457,6 @@ error.general=ERROR: Unexpected Exception [{0}] has been logged. error.password.mismatch=Wrong username and password combination error.unmatched.openid=Unknown or invalid OpenID URL -error.trackback=Error sending trackback. Possible cause: incorrect \ -trackback URL. {0} -error.trackbackNotAllowed=Error sending trackback. The site administrator \ -does not permit sending tracbacks to the URL you specified. - error.title.403=Access Denied error.text.403=You do not have the privileges necessary to access the requested page. @@ -1592,17 +1580,6 @@ weblogEdit.pinnedToMain.tooltip=Pin blog entry to top of front page weblog \ weblogEdit.searchDescription=Search Description weblogEdit.searchDescription.tooltip=Short description of blog entry that gets \ placed in HTML header (if coded by your blog template) for SEO. -weblogEdit.trackback=Trackback -weblogEdit.sendTrackback=Send Trackback -weblogEdit.trackbackUrl=Trackback URL - -weblogEdit.trackbackSuccess=Trackback succeeded. -weblogEdit.trackbackFailure=Trackback failed, remote server said "{0}" -weblogEdit.trackbackErrorTransport=Trackback failed, could not reach trackback URL. Are you sure you put in the right URL? -weblogEdit.trackbackErrorResponse=Trackback failed, error in sending. Response was {0} - {1} -weblogEdit.trackbackErrorParsing=Trackback failed, URL indicated success but response message was improperly formatted. Response was: {0} -weblogEdit.trackbackError404=Trackback failed, could not reach trackback URL. Are you sure you put in the right URL? - weblogEdit.hasComments=Comments [{1}] weblogEdit.enclosureURL=Enclosure URL @@ -1758,7 +1735,7 @@ websiteSettings.formatting=Formatting websiteSettings.spamPrevention=Spam Prevention websiteSettings.ignoreUrls=List of words and regex expressions listed one per \ -line to be added to the banned words list used to check comments, trackbacks and referrers. +line to be added to the banned words list used to check comments and referrers. websiteSettings.bannedWordsList=Words banned in comments (regex allowed) websiteSettings.acceptedBannedwordslist=Accepted {0} string and {1} regex banned-words list rules websiteSettings.error.processingBannedwordslist=Error processing banned-words list: {0} diff --git a/app/src/main/resources/ApplicationResources_de.properties b/app/src/main/resources/ApplicationResources_de.properties index 360c1e9dda..cd51674d94 100644 --- a/app/src/main/resources/ApplicationResources_de.properties +++ b/app/src/main/resources/ApplicationResources_de.properties @@ -178,8 +178,6 @@ comment.validator.excessLinksMessage=Der Kommentar enth\u00E4lt mehr als {0} Lin comment.validator.excessLinksName=Linkanzahl Kommentarpr\u00FCfung comment.validator.excessSizeMessage=Der Kommentar hat mehr als {0} Zeichen comment.validator.excessSizeName=Gr\u00F6\u00DFen\u00FCberschreitung Kommentarpr\u00FCfung -comment.validator.trackbackLinkbackMessage=Trackback von Webseite, der nicht auf Ihren Weblogeintrag verlinkt -comment.validator.trackbackLinkbackName=Trackback R\u00FCcklink Kommentarpr\u00FCfung commentManagement.bulkDeletePrompt1=Ihre Abfrage lieferte {0} Kommentare, commentManagement.bulkDeletePrompt2=Alle l\u00F6schen? commentManagement.columnApproved=Zugelassen @@ -252,19 +250,15 @@ configForm.allowNewUsers=Erlaube das Anlegen neuer Benutzer? configForm.allowedExtensions=Zul\u00E4ssige Dateierweiterungen configForm.commentHtmlAllowed=HTML in Kommentaren erlauben? configForm.commentPlugins=An-/Abschalten von Plugins zur Kommentarformatierung -configForm.commentSettings=Kommentar und Trackback Einstellungen configForm.editorPages=Bearbeitungsseiten configForm.emailComments=E-Mailbenachrichtung bei Kommentaren? configForm.enableComments=Kommentare in Weblogs erlauben? configForm.enableFileUploads=Datei Uploads erlauben? -configForm.enableTrackbackValidation=\u00DCberpr\u00FCfung von Trackback Links einschalten? -configForm.enableTrackbacks=Weblog Trackbacks erlauben? configForm.fileUploadSettings=Datei Upload Einstellungen configForm.forbiddenExtensions=Verbotene Dateierweiterungen configForm.frontpageWeblogAggregated=Aggregierte systemweite Startseite einschalten configForm.frontpageWeblogHandle=Handle des Weblogs, welches als Startseiten Blog verwendet werden soll configForm.ignoreSpamComments=Als Spam klassifizierte Kommentare nicht speichern -configForm.ignoreSpamTrackbacks=Als Spam klassifizierte Trackbacks nicht speichern configForm.maxDirSize=Maximale Verzeichnisgr\u00F6\u00DFe (MB) configForm.maxFileSize=Maximale Dateigr\u00F6\u00DFe (MB) configForm.moderationRequired=Erzwinge Kommentarmoderation f\u00FCr alle Weblogs @@ -340,8 +334,6 @@ error.text.403=Sie verf\u00FCgen nicht die notwendigen Rechte um auf die angefor error.text.404=Die von Ihnen angeforderte Seite konnte auf diesem Server nicht gefunden werden. error.title.403=Zugriff verweigert error.title.404=Sorry! Wir haben das von Ihnen angeforderte Dokument nicht gefunden -error.trackback=Fehler beim Senden des Trackbacks. M\u00F6gliche Ursache: Die Trackback-URL ist fehlerhaft. {0} -error.trackbackNotAllowed=Fehler beim Abschicken des Trackbacks. Die Systemadministration erlaubt das Senden von Trackbacks an die von Ihnen angegebene URL nicht. #---------------------------------------------------------------- Error messages error.untranslated={0} #---------------------------------------------------------------- Error messages @@ -786,7 +778,6 @@ weblogEdit.rightToLeft=Text von rechts-nach-links lesen weblogEdit.save=Als Entwurf speichern weblogEdit.scheduled=geplant weblogEdit.scheduledEntries=Geplante Eintr\u00E4ge -weblogEdit.sendTrackback=Sende Trackback weblogEdit.status=Status weblogEdit.submitForReview=Zur Durchsicht einreichen weblogEdit.submittedForReview=Eintrag zur Durchsicht eingereicht @@ -798,14 +789,6 @@ weblogEdit.title=Titel weblogEdit.title.editEntry=Eintrag bearbeiten weblogEdit.title.newEntry=Neuer Eintrag # ------------------------------------------------------------- User settings -weblogEdit.trackback=Trackback -weblogEdit.trackbackError404=Trackback fehlgeschlagen, Trackback URL konnte nicht erreicht werden. Sind Sie sicher, dass Sie die richtige URL eingegeben haben? -weblogEdit.trackbackErrorParsing=Trackback fehlgeschlagen, URL ist korrekt, aber die Fehlerantwort war falsch formatiert. Antwort: {0} -weblogEdit.trackbackErrorResponse=Trackback fehlgeschlagen, Fehlerantwort: {0} - {1} -weblogEdit.trackbackErrorTransport=Trackback fehlgeschlagen, Trackback URL konnte nicht erreicht werden. Sind Sie sicher, dass Sie die richtige URL eingegeben haben? -weblogEdit.trackbackFailure=Trackback fehlgeschlagen, Remote-Server meldet "{0}" -weblogEdit.trackbackSuccess=Trackbacks erfolgt -weblogEdit.trackbackUrl=Trackback URL # ------------------------------------------------------------- Weblog edit weblogEdit.unsaved=Nicht gesichert weblogEdit.updateTime=Letzter Update diff --git a/app/src/main/resources/ApplicationResources_es.properties b/app/src/main/resources/ApplicationResources_es.properties index b8dcbb0b36..9f7facb6e7 100644 --- a/app/src/main/resources/ApplicationResources_es.properties +++ b/app/src/main/resources/ApplicationResources_es.properties @@ -138,10 +138,7 @@ configForm.allowNewUsers=\u00BFPermitir nuevos usuarios? configForm.registrationUrl=URL de registro externo configForm.editorPages=P\u00E1ginas de editor configForm.emailComments=\u00BFNotificaci\u00F3n de comentarios por correo electr\u00F3nico? -configForm.commentSettings=Configuraci\u00F3n de comentarios y referencias configForm.enableComments=\u00BFPermitir comentarios de weblog? -configForm.enableTrackbacks=\u00BFPermitir referencias de weblog? -configForm.enableTrackbackValidation=\u00BFHabilitar verificaci\u00F3n de los enlaces de referencias? configForm.newsfeedMaxEntries=N\u00FAmero m\u00E1ximo de entradas configForm.fileUploadSettings=Configuraci\u00F3n de subida de ficheros configForm.enableFileUploads=\u00BFPermitir subir ficheros? @@ -187,8 +184,6 @@ error.upload.filemax=Fichero mayor que el m\u00E1ximo permitido\: {0} MB error.upload.forbiddenFile=Puede cargar s\u00F3lo ficheros acabados en {0} error.general=ERROR\: Excepci\u00F3n inesperada [{0}] ha sido registrada. error.password.mismatch=Nombre de usuario o contrase\u00F1a incorrectos -error.trackback=Error al enviar referencia. Posible causa\: URL de referencia incorrecta. {0} -error.trackbackNotAllowed=Error al enviar referencia. El administrador del sitio ha deshabilitado el env\u00EDo de referencias a la URL especificada. error.title.403=Acceso denegado (404) error.text.403=No tiene los privilegios necesarios para acceder a la p\u00E1gina solicitada error.title.404=\!Lo sentimos\! No se ha podido encontrar su documento (404) @@ -485,9 +480,6 @@ weblogEdit.pluginsToApply=Plugins que aplicar weblogEdit.miscSettings=Ajustes de configuraci\u00F3n miscel\u00E1neos weblogEdit.rightToLeft=El texto se lee de derecha a izquierda weblogEdit.pinnedToMain=Poner en principal -weblogEdit.trackback=Referencia -weblogEdit.sendTrackback=Enviar referencia -weblogEdit.trackbackUrl=URL de la referencia weblogEdit.hasComments=Comentarios [{0}] weblogEdit.mediaCastFailedFetchingInfo=No se puede contactar con el servidor MediaCast. Compruebe el nombre del host en la URL. weblogEdit.mediaCastUrlMalformed=La URL de MediaCast no estaba bien formada. diff --git a/app/src/main/resources/ApplicationResources_fr.properties b/app/src/main/resources/ApplicationResources_fr.properties index 124fd323d7..9804c6ee48 100644 --- a/app/src/main/resources/ApplicationResources_fr.properties +++ b/app/src/main/resources/ApplicationResources_fr.properties @@ -156,8 +156,6 @@ comment.validator.bannedwordslistName=Validation de la liste noire comment.validator.bannedwordslistMessage=Ce commentaire contient certains mots figurant sur la liste noire. #FIXME -comment.validator.trackbackLinkbackName=Trackback Linkback Comment Validator -comment.validator.trackbackLinkbackMessage=Trackback from site/page that does not link to your weblog entry comment.validator.akismetName=Validation de commentaires Akismet comment.validator.akismetMessage=Le service Akismet (akismet.com) indique que ce commentaire est un spam @@ -268,15 +266,11 @@ configForm.pageMaxEntries=Nombre maximum d'entrées par page configForm.newsfeedMaxEntries=Nombre d'entrées dans les fils d'information configForm.styledFeeds=Afficher les fils d'information stylisés pour les navigateurs -configForm.commentSettings=Paramètres de commentaires et trackbacks configForm.enableComments=Autoriser les commentaires sur ce blog configForm.ignoreSpamComments=Ne pas enregistrer les commentaires considérés comme spam -configForm.enableTrackbacks=Autoriser les trackbacks ? -configForm.ignoreSpamTrackbacks=Ne pas enregistrer les trackbacks considérés comme spam #FIXME configForm.emailComments=Envoyer une notification de commentaire par courriel configForm.moderationRequired=Modération de commentaires requise pour tous les blogs -configForm.enableTrackbackValidation=Activer la vérification des trackback #FIXME configForm.fileUploadSettings=Paramètres de transfert de fichiers @@ -358,11 +352,6 @@ error.general=ERREUR : une erreur inattendue [{0}] est survenue. error.password.mismatch=Votre nom d'utilisateur ou votre mot de passe est incorrect. -error.trackback=Une erreur est survenue durant l'envoi du trackback, probablement due à \ -une adresse URL incorrecte. {0} -#FIXME -error.trackbackNotAllowed=Une erreur est survenue durant l'envoi du trackback. \ -L'administrateur de ce site a interdit l'envoi de trackbacks à l'adresse URL que vous avez spécifiée. errorPage.title=Erreur inattendue errorPage.message=Une erreur inattendue est survenue durant l'execution de Roller. Celle ci a été enregistrée \ @@ -971,9 +960,6 @@ weblogEdit.miscSettings=Paramètres avancés weblogEdit.rightToLeft=Lecture de droite à gauche weblogEdit.pinnedToMain=Collé à la page principale -weblogEdit.trackback=Trackback -weblogEdit.sendTrackback=Envoyer un trackback -weblogEdit.trackbackUrl=URL du trackback weblogEdit.hasComments=Commentaires [{0}] #FIXME ALLL THOSE DOWNTHERE - WHAT IS ENCLOSURE @@ -1116,7 +1102,7 @@ websiteSettings.formatting=Formatage websiteSettings.spamPrevention=Prevention de spam websiteSettings.ignoreUrls=Liste de mots ou expressions régulières à ajouter \ -à la liste noire utilisée pour vérifier les commentaires, trackbacks et réferrants. \ +à la liste noire utilisée pour vérifier les commentaires et réferrants. \ Veuillez ajouter une seule expression ou mot par ligne. websiteSettings.acceptedBannedwordslist={0} mots ou phrases et {1} expression(s) régulière(s) ajouté(s) à la liste noire. diff --git a/app/src/main/resources/ApplicationResources_ja.properties b/app/src/main/resources/ApplicationResources_ja.properties index 8802be030d..0808e96582 100644 --- a/app/src/main/resources/ApplicationResources_ja.properties +++ b/app/src/main/resources/ApplicationResources_ja.properties @@ -210,10 +210,7 @@ configForm.registrationUrl=\u5916\u90E8\u5411\u3051\u767B\u9332URL configForm.editorPages=\u30A8\u30C7\u30A3\u30BF\u30DA\u30FC\u30B8\u6307\u5B9A configForm.emailComments=\u65B0\u3057\u3044\u30B3\u30E1\u30F3\u30C8\u306E\u30E1\u30FC\u30EB\u901A\u77E5\u3092\u8A31\u53EF -configForm.commentSettings=\u30B3\u30E1\u30F3\u30C8\u3068\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u8A2D\u5B9A configForm.enableComments=\u30B3\u30E1\u30F3\u30C8\u3092\u8A31\u53EF -configForm.enableTrackbacks=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u3092\u8A31\u53EF -configForm.enableTrackbackValidation=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u30FB\u30EA\u30F3\u30AF\u306E\u691C\u8A3C\u3092\u884C\u3046 configForm.moderationRequired=\u3059\u3079\u3066\u306E\u30D6\u30ED\u30B0\u3067\u30B3\u30E1\u30F3\u30C8\u3092\u627F\u8A8D\u5236\u306B\u3059\u308B configForm.newsfeedMaxEntries=\u30D5\u30A3\u30FC\u30C9\u306B\u542B\u3081\u308B\u30A8\u30F3\u30C8\u30EA\u6570 @@ -291,9 +288,6 @@ error.upload.forbiddenFile=\u5F62\u5F0F{0}\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u error.general=\u4E0D\u660E\u306A\u4F8B\u5916[{0}]\u304C\u8A18\u9332\u3055\u308C\u307E\u3057\u305F error.password.mismatch=\u30E6\u30FC\u30B6\u540D\u304B\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u8AA4\u3063\u3066\u3044\u307E\u3059 -error.trackback=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306E\u9001\u4FE1\u30A8\u30E9\u30FC: \u8003\u3048\u3089\u308C\u308B\u539F\u56E0: \u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AFURL\u306B\u8AA4\u308A\u304C\u3042\u308A\u307E\u3059 {0} -error.trackbackNotAllowed=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306E\u9001\u4FE1\u30A8\u30E9\u30FC\uFF1A \ -\u30B5\u30A4\u30C8\u30AA\u30FC\u30CA\u30FC\u306F\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u9001\u4FE1\u3092\u8A31\u53EF\u3057\u3066\u3044\u307E\u305B\u3093 error.title.403=\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F error.text.403=\u3042\u306A\u305F\u306B\u306F\u3053\u306E\u30DA\u30FC\u30B8\u3078\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u305F\u3081\u306E\u6A29\u9650\u304C\u4E0E\u3048\u3089\u308C\u3066\u3044\u307E\u305B\u3093 @@ -728,9 +722,6 @@ weblogEdit.miscSettings=\u8A73\u7D30\u8A2D\u5B9A weblogEdit.rightToLeft=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u65B9\u5411\u3092\u53F3\u304B\u3089\u5DE6\u3068\u3059\u308B weblogEdit.pinnedToMain=\u30E1\u30A4\u30F3\u30DA\u30FC\u30B8\u3078\u56FA\u5B9A\u3059\u308B -weblogEdit.trackback=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF -weblogEdit.sendTrackback=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u3092\u9001\u4FE1\u3059\u308B -weblogEdit.trackbackUrl=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AFURL # -------------------------------------------------------- Weblog entries Pager @@ -955,7 +946,6 @@ WeblogConfig.error.descriptionSize=\u8A73\u7D30\u306F255\u6587\u5B57\u4EE5\u5185 Category.error.descriptionSize=\u8A73\u7D30\u306F255\u6587\u5B57\u4EE5\u5185\u3067\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093 tabbedmenu.design=\u30C7\u30B6\u30A4\u30F3 configForm.ignoreSpamComments=\u30B9\u30D1\u30E0\u3068\u601D\u308F\u308C\u308B\u30B3\u30E1\u30F3\u30C8\u306F\u4FDD\u5B58\u3057\u306A\u3044 -configForm.ignoreSpamTrackbacks=\u30B9\u30D1\u30E0\u3068\u601D\u308F\u308C\u308B\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306F\u4FDD\u5B58\u3057\u306A\u3044 pageForm.subtitle=\u30D6\u30ED\u30B0{1}\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8{0}\u3092\u7DE8\u96C6 stylesheetEdit.subtitle=\u30AB\u30B9\u30BF\u30E0\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u7DE8\u96C6 CreateWeblog.error.emailAddressSize=\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F255\u6587\u5B57\u4EE5\u5185\u3067\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093 @@ -1035,8 +1025,6 @@ categoryForm.error.duplicateName=\u30AB\u30C6\u30B4\u30EA\u540D\u300C{0}\u300D\u Category.error.imageBad=\u6307\u5B9A\u3055\u308C\u305F\u753B\u50CF\u306EURL\u306F\u7121\u52B9\u306A\u30A2\u30C9\u30EC\u30B9\u3067\u3059 comment.validator.excessLinksName=\u30B3\u30E1\u30F3\u30C8\u306E\u30EA\u30F3\u30AF\u6570\u30D0\u30EA\u30C7\u30FC\u30BF comment.validator.excessSizeName=\u30B3\u30E1\u30F3\u30C8\u306E\u9577\u3055\u30D0\u30EA\u30C7\u30FC\u30BF -comment.validator.trackbackLinkbackName=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u30FB\u30EA\u30F3\u30AF\u30D0\u30C3\u30AF\u30B3\u30E1\u30F3\u30C8\u30D0\u30EA\u30C7\u30FC\u30BF -comment.validator.trackbackLinkbackMessage=\u30D6\u30ED\u30B0\u30A8\u30F3\u30C8\u30EA\u3078\u30EA\u30F3\u30AF\u3055\u308C\u3066\u3044\u306A\u3044\u30B5\u30A4\u30C8\u306A\u3044\u3057\u30DA\u30FC\u30B8\u304B\u3089\u306E\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF commentManagement.bulkDeletePrompt1=\u30AF\u30A8\u30EA\u306B\u8A72\u5F53\u3059\u308B{0}\u306E\u30B3\u30E1\u30F3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002 commentManagement.readmore=\u3059\u3079\u3066\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u898B\u308B commentServlet.commentAccepted=\u30B3\u30E1\u30F3\u30C8\u304C\u66F8\u304D\u8FBC\u307E\u308C\u307E\u3057\u305F\u3002 @@ -1138,12 +1126,10 @@ themeEditor.setCustomTheme.success=\u5171\u6709\u30C6\u30FC\u30DE {0} \u304C\u30 planetGroups.column.subscriptions=\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3 mediaFileImageChooser.subtitle=\u753B\u50CF\u306E\u9078\u629E mediaFileView.filesOfSize=\u30B5\u30A4\u30BA\u304C {0} {1} {2} \u306E\u30D5\u30A1\u30A4\u30EB -weblogEdit.trackbackErrorResponse=\u9001\u4FE1\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u305F\u305F\u3081\u3001\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30EC\u30B9\u30DD\u30F3\u30B9\u306F\u3001\u3053\u306E\u3088\u3046\u306A\u5185\u5BB9\u3067\u3057\u305F {0} - {1} mediaFile.delete.error=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB {0} \u3092\u524A\u9664\u3059\u308B\u969B\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 statCount.weblogEntryCommentCountType=\u30A8\u30F3\u30C8\u30EA\u30FC\u306E\u30B3\u30E1\u30F3\u30C8\u6570 configForm.allowAnalyticsCodeOverride=\u500B\u3005\u306E\u30D6\u30ED\u30B0\u3067\u306E\u4E0A\u66F8\u304D\u3092\u8A31\u53EF\u3057\u307E\u3059\u304B? yourWebsites.theme=\u30C6\u30FC\u30DE -weblogEdit.trackbackErrorTransport=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AFURL\u306B\u5230\u9054\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002URL\u306F\u6B63\u3057\u3044\u3067\u3059\u304B? configForm.defaultAnalyticsTrackingCode=\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u30FB\u30B3\u30FC\u30C9 mediaFileView.sortBy=\u3053\u306E\u5C5E\u6027\u3067\u30BD\u30FC\u30C8\: MediaFile.error.nameNull=\u540D\u524D\u306F\u5FC5\u9808\u9805\u76EE\u3067\u3059 @@ -1203,7 +1189,6 @@ generic.changes.saved=\u5909\u66F4\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u30 error.commentPostFailedEmailAddress=\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304C\u4E0D\u6B63\u3067\u3059\u3002 ConfigForm.title=Planet \u30BF\u30A4\u30C8\u30EB\t mediaFileView.viewFolder=\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u8868\u793A\: -weblogEdit.trackbackFailure=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30EA\u30E2\u30FC\u30C8\u30FB\u30B5\u30FC\u30D0\u306F\u3001\u3053\u306E\u3088\u3046\u306B\u8FD4\u7B54\u3057\u307E\u3057\u305F "{0}" mediaFile.move.confirm=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u79FB\u52D5\u3057\u3066\u3088\u308D\u3057\u3044\u3067\u3059\u304B? pingTarget.updated=Ping\u30BF\u30FC\u30B2\u30C3\u30C8 "{0}" \u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F generic.name=\u540D\u524D @@ -1289,7 +1274,6 @@ pageRemoves.subtitle=\u30DA\u30FC\u30B8\u524A\u9664\u306E\u78BA\u8A8D userAdmin.userSaved=\u30E6\u30FC\u30B6\u60C5\u5831\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F mediaFileEdit.subtitle=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB {0} \u306E\u7DE8\u96C6 mediaFileView.le=<\= -weblogEdit.trackbackError404=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AFURL\u306B\u5230\u9054\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002URL\u306F\u6B63\u3057\u3044\u3067\u3059\u304B? macro.weblog.url=URL\: weblogEdit.enclosureURL.tooltip=\u3053\u306E\u30D6\u30ED\u30B0\u30FB\u30A8\u30F3\u30C8\u30EA\u30FC\u306ERSS\u3068Atom\u30D5\u30A3\u30FC\u30C9\u306B\u57CB\u3081\u8FBC\u307E\u308C\u308B\u3001Podcast\u307E\u305F\u306F\u4ED6\u306E\u30DE\u30EB\u30C1\u30E1\u30C7\u30A3\u30A2URL mediaFile.includeInGallery.error=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB {0} \u3092\u30AE\u30E3\u30E9\u30EA\u30FC\u306B\u8FFD\u52A0\u3059\u308B\u969B\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 @@ -1315,7 +1299,6 @@ maintenance.prompt.reset=\u30D6\u30ED\u30B0\u306E\u30A2\u30AF\u30BB\u30B9\u30AB\ userRegister.tip.openid.hybrid=\u30E6\u30FC\u30B6\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u4F7F\u3063\u3066\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u304B\u3001OpenID\u3092\u4F7F\u3063\u3066\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u304B\u3001\u9078\u629E\u3067\u304D\u307E\u3059\u3002\u5F8C\u8005\u3092\u9078\u629E\u3059\u308B\u5834\u5408\u306F\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u6B04\u3092\u7A7A\u767D\u306E\u307E\u307E\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 mediaFileSidebar.actions=\u30A2\u30AF\u30B7\u30E7\u30F3 bookmarksForm.deleteFolder=\u30D5\u30A9\u30EB\u30C0\u306E\u524A\u9664 -weblogEdit.trackbackErrorParsing=URL\u306F\u6B63\u5E38\u3067\u3059\u304C\u3001\u30EC\u30B9\u30DD\u30F3\u30B9\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u4E0D\u6B63\u306A\u5F62\u5F0F\u3067\u3042\u3063\u305F\u305F\u3081\u3001\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30EC\u30B9\u30DD\u30F3\u30B9\u306F\u3001\u3053\u306E\u3088\u3046\u306A\u5185\u5BB9\u3067\u3057\u305F\: {0} installer.databaseUpgradeNeededExplanation=Roller\u306F\u30BF\u30A4\u30D7 [{0}] \u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3078\u306E\u63A5\u7D9A\u306B\u6210\u529F\u3057\u3001\u30C6\u30FC\u30D6\u30EB\u3092\u767A\u898B\u3057\u307E\u3057\u305F\u304C\u3001\u30C6\u30FC\u30D6\u30EB\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059\u3002 mediaFileView.noFiles=\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u306F\u7A7A\u3067\u3059\u3002 mediaFileAdd.pageTip=\u3053\u306E\u30DA\u30FC\u30B8\u3067\u306F\u3001\u6700\u59275\u3064\u307E\u3067\u306E\u65B0\u3057\u3044\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u307E\u3059\u3002\u4EE5\u4E0B\u306E\u30D5\u30A9\u30FC\u30E0\u306B\u5165\u529B\u3055\u308C\u305F\u5185\u5BB9\u306F\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u308B\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002 @@ -1339,7 +1322,6 @@ commonPingTargets.error.disabling=Ping\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u7121 stylesheetEdit.revert=\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u5FA9\u5143 weblogEdit.submitForReview=\u30EC\u30D3\u30E5\u30FC\u4F9D\u983C\u3092\u9001\u4FE1 mediaFileView.filesOfType=\u30BF\u30A4\u30D7\u304C {0} \u306E\u30D5\u30A1\u30A4\u30EB -weblogEdit.trackbackSuccess=\u30C8\u30E9\u30C3\u30AF\u30D0\u30C3\u30AF\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002 categoriesForm.imageUrl=\u753B\u50CF\u306EURL userAdmin.tip.openIdUrl=Open ID\u8B58\u5225\u5B50(URL\u5F62\u5F0F)\u3002 macro.weblog.searchalert=\u691C\u7D22\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 diff --git a/app/src/main/resources/ApplicationResources_ko.properties b/app/src/main/resources/ApplicationResources_ko.properties index 0de377cae7..baa3249e99 100644 --- a/app/src/main/resources/ApplicationResources_ko.properties +++ b/app/src/main/resources/ApplicationResources_ko.properties @@ -171,8 +171,6 @@ comment.validator.excessSizeName=\uc758\uacac \uc720\ud6a8\uc131 \uac80\uc0ac: \ comment.validator.excessSizeMessage=\uc758\uacac\uc774 {0}\uac1c \uc774\uc0c1\uc758 \uae00\uc790\ub97c \ud3ec\ud568\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. comment.validator.bannedwordslistName=\uc758\uacac \uc720\ud6a8\uc131 \uac80\uc0ac: \ube14\ub799\ub9ac\uc2a4\ud2b8 comment.validator.bannedwordslistMessage=\uc758\uacac\uc774 \ube14\ub799\ub9ac\uc2a4\ud2b8\uc5d0 \ud3ec\ud568\ub41c \ub2e8\uc5b4\ub4e4\uc744 \ud3ec\ud568\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. -comment.validator.trackbackLinkbackName=\uc758\uacac \uc720\ud6a8\uc131 \uac80\uc0ac: \ud2b8\ub799\ubc31 \ub9c1\ud06c\ubc31 -comment.validator.trackbackLinkbackMessage=\uadc0\ud558\uc758 \uc6f9\ub85c\uadf8 \uae30\uc0ac\uc5d0 \uc5f0\uacb0\ub418\uc9c0 \uc54a\ub294 \uc0ac\uc774\ud2b8\ub098 \ud398\uc774\uc9c0\ub85c\ubd80\ud130\uc758 \ud2b8\ub799\ubc31\uc785\ub2c8\ub2e4. comment.validator.akismetName=\uc758\uacac\uc720\ud6a8\uc131 \uac80\uc0ac: Akismet \uc11c\ube44\uc2a4 comment.validator.akismetMessage=Akismet \uc11c\ube44\uc2a4(akismet.com)\uc5d0\uc11c\ub294 \uc774 \uc758\uacac\uc744 \uc2a4\ud338\uc73c\ub85c \uc5ec\uae30\uace0 \uc788\uc2b5\ub2c8\ub2e4. @@ -279,16 +277,12 @@ configForm.pageMaxEntries=\ud398\uc774\uc9c0 \ub2f9 \ud5c8\uc6a9\ub418\ub294 \uc configForm.newsfeedMaxEntries=\ub274\uc2a4 \ud53c\ub4dc\ub4e4\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 \uc6f9\ub85c\uadf8 \uae30\uc0ac\uc758 \uac1c\uc218 configForm.styledFeeds=\ube0c\ub77c\uc6b0\uc800\ub4e4\uc744 \uc704\ud574 \uc2a4\ud0c0\uc77c\ud654\ub41c \ub274\uc2a4 \ud53c\ub4dc\ub4e4\uc758 \ud45c\uc2dc -configForm.commentSettings=\uc758\uacac\uacfc \ud2b8\ub799\ubc31 \ud658\uacbd \uc124\uc815 \uc815\ubcf4 configForm.enableComments=\uc6f9\ub85c\uadf8 \uc758\uacac\ub4e4\uc744 \ud5c8\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? configForm.ignoreSpamComments=\uc2a4\ud338\uc73c\ub85c \uc5ec\uaca8\uc9c0\ub294 \uc758\uacac \uc800\uc7a5 \uc548\ud568. -configForm.enableTrackbacks=\uc6f9\ub85c\uadf8 \ud2b8\ub799\ubc31\ub4e4\uc744 \ud5c8\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? -configForm.ignoreSpamTrackbacks=\uc2a4\ud338\uc73c\ub85c \uc5ec\uaca8\uc9c0\ub294 \ud2b8\ub799\ubc31 \uc800\uc7a5 \uc548\ud568. configForm.commentHtmlAllowed=\uc758\uacac\uc5d0 HTML \ud0dc\uadf8\ub97c \ud5c8\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? configForm.commentPlugins=\uc758\uacac \ud3ec\ub9f7 \uc801\uc6a9 \ud50c\ub7ec\uadf8\uc778 \ud65c\uc131\ud654/\ube44\ud65c\uc131\ud654 configForm.emailComments=\uc758\uacac\ub4e4\uc5d0 \ub300\ud574 \uc804\uc790\uc6b0\ud3b8 \ud1b5\uc9c0\ub97c \uc0ac\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? configForm.moderationRequired=\ubaa8\ub4e0 \uc6f9\ub85c\uadf8\ub4e4\uc758 \uc758\uacac \uc870\uc815\uc744 \ud544\uc218\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? -configForm.enableTrackbackValidation=\ud2b8\ub799\ubc31 \ub9c1\ud06c\ub4e4\uc758 \uac80\uc99d\uc744 \ud65c\uc131\ud654\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? configForm.fileUploadSettings=\ud30c\uc77c \uc5c5\ub85c\ub4dc \ud658\uacbd \uc124\uc815 \uc815\ubcf4 configForm.enableFileUploads=\ud30c\uc77c \uc5c5\ub85c\ub4dc\ub97c \ud65c\uc131\ud654\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? @@ -380,9 +374,6 @@ error.upload.forbiddenFile=\ud5c8\uc6a9\ub41c \ud655\uc7a5\uc790\uc640 \ud5c8\uc error.general=\uc624\ub958: \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958 [{0}]\uc774(\uac00) \ub85c\uadf8\uc5d0 \uae30\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. error.password.mismatch=\uc0ac\uc6a9\uc790\uba85\uacfc \ube44\ubc00\ubc88\ud638 \uc870\ud569 \uc624\ub958 -error.trackback=\ud2b8\ub799\ubc31 \uc804\uc1a1 \uc624\ub958. \uc608\uc0c1 \uc6d0\uc778: \ubd80\uc815\ud655\ud55c \ud2b8\ub799\ubc31 URL. {0} -error.trackbackNotAllowed=\ud2b8\ub799\ubc31 \uc804\uc1a1 \uc624\ub958. \uc0ac\uc774\ud2b8 \uad00\ub9ac\uc790\uac00 \uadc0\ud558\uac00 \uc124\uc815\ud55c URL\ub85c\uc758 \ -\ud2b8\ub799\ubc31 \uc804\uc1a1\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. errorPage.title=\uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958 errorPage.message=\uc2dc\uc2a4\ud15c\uc774 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\ub97c \ubc1c\uacac\ud558\uc5ec \ub85c\uadf8\uc5d0 \uae30\ub85d\ud558\uc600\uc2b5\ub2c8\ub2e4. @@ -1082,16 +1073,7 @@ weblogEdit.miscSettings=\uace0\uae09 \ud658\uacbd \uc124\uc815 \uc815\ubcf4 weblogEdit.rightToLeft=\ud14d\uc2a4\ud2b8\ub294 \uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c weblogEdit.pinnedToMain=\uba54\uc778\uc73c\ub85c \uace0\uc815 -weblogEdit.trackback=\ud2b8\ub799\ubc31 -weblogEdit.sendTrackback=\ud2b8\ub799\ubc31 \uc804\uc1a1 -weblogEdit.trackbackUrl=\ud2b8\ub799\ubc31 URL -weblogEdit.trackbackSuccess=\ud2b8\ub799\ubc31\uc774 \uc131\uacf5\ud588\uc2b5\ub2c8\ub2e4. -weblogEdit.trackbackFailure=\ud2b8\ub799\ubc31\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \uc6d0\uaca9 \uc11c\ubc84\uc758 \uc751\ub2f5: "{0}" -weblogEdit.trackbackErrorTransport=\ud2b8\ub799\ubc31\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ud2b8\ub799\ubc31 URL\uc5d0 \uc811\uadfc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc124\uc815\ud55c URL\uc744 \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc2ed\uc2dc\uc624. -weblogEdit.trackbackErrorResponse=\ud2b8\ub799\ubc31 \uc804\uc1a1 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uc751\ub2f5\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4: {0} - {1} -weblogEdit.trackbackErrorParsing=\ud2b8\ub799\ubc31\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. URL\uc5d0 \uc811\uadfc\ud558\uc600\uc73c\ub098, \uc751\ub2f5 \uba54\uc2dc\uc9c0\uac00 \uc801\uc808\ud55c \ud3ec\ub9f7\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc751\ub2f5\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4: {0} -weblogEdit.trackbackError404=\ud2b8\ub799\ubc31\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ud2b8\ub799\ubc31 URL\uc5d0 \uc811\uadfc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc124\uc815\ud55c URL\uc744 \ub2e4\uc2dc \ud655\uc778\ud574 \uc8fc\uc2ed\uc2dc\uc624. weblogEdit.hasComments=\uc758\uacac, [{1}] @@ -1335,4 +1317,4 @@ user.account.activation.mail.content=\ welcome.user.account.activated=\uadc0\ud558\uc758 \uc0ac\uc6a9\uc790 \uacc4\uc815\uc774 \ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4. welcome.user.account.not.activated=\uc2dc\uc2a4\ud15c\uc5d0 \ub85c\uadf8\uc778\ud558\uc2dc\ub824\uba74, \ \uc804\uc790\uc6b0\ud3b8\uc744 \ud1b5\ud574 \uadc0\ud558\uc5d0\uac8c \uc804\uc1a1\ub41c \ub9c1\ud06c\ub97c \ud074\ub9ad\ud568\uc73c\ub85c\uc368, \ -\uadc0\ud558\uc758 \uc0ac\uc6a9\uc790 \uacc4\uc815\uc744 \ud65c\uc131\ud654\uc2dc\ucf1c\uc57c \ud569\ub2c8\ub2e4. \ No newline at end of file +\uadc0\ud558\uc758 \uc0ac\uc6a9\uc790 \uacc4\uc815\uc744 \ud65c\uc131\ud654\uc2dc\ucf1c\uc57c \ud569\ub2c8\ub2e4. diff --git a/app/src/main/resources/ApplicationResources_ru.properties b/app/src/main/resources/ApplicationResources_ru.properties index ce5c69559c..96909a3fc5 100644 --- a/app/src/main/resources/ApplicationResources_ru.properties +++ b/app/src/main/resources/ApplicationResources_ru.properties @@ -159,9 +159,7 @@ configForm.registrationUrl=\u0410\u0434\u0440\u0435\u0441 \u0432\u043D\u0435\u04 configForm.editorPages=\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 configForm.emailComments=\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u044F\u0442\u044C \u043F\u043E Email \u043E \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u044F\u0445? -configForm.commentSettings=\u041D\u0430\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 Trackback configForm.enableComments=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438? -configForm.enableTrackbacks=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C trackbacks? configForm.fileUploadSettings=\u041D\u0430\u0441\u0440\u043E\u0439\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 configForm.enableFileUploads=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0443? @@ -236,10 +234,6 @@ error.upload.forbiddenFile=\u041C\u043E\u0436\u043D\u043E \u0437\u0430\u0433\u04 error.general=\u041E\u0448\u0438\u0431\u043A\u0430: \u0417\u0430\u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 [{0}] error.password.mismatch=\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F \u0438\u043C\u0435\u043D\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0438 \u043F\u0430\u0440\u043E\u043B\u044F -error.trackback=\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 trackback. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u0430\u044F \u043F\u0440\u0438\u0447\u0438\u043D\u0430:\u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0430\u044F \ -trackback URL. {0} -error.trackbackNotAllowed=\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 trackback.\u0410\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440 \u0441\u0430\u0439\u0442\u0430 \ \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C -tracbacks \u043F\u043E URL, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u043C\u0443 \u0412\u0430\u043C\u0438. error.title.403=\u0414\u043E\u0441\u0442\u0443\u043F \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D (403) error.text.403=\u0423 \u0432\u0430\u0441 \u043D\u0435\u0442 \u043F\u0440\u0430\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u044D\u0442\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 \ \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u043E\u0439 \u0412\u0430\u043C\u0438 @@ -705,12 +699,6 @@ weblogEdit.miscSettings = \u0420\u0430\u0437\u043D\u044B\u0435 \u043D\u0430\u044 weblogEdit.rightToLeft = \u0422\u0435\u043A\u0441\u0442 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u0441\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E weblogEdit.pinnedToMain = \u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u044F\u0435\u0442\u0441\u044F \u043A \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u043C\u0443 -weblogEdit.trackback = Trackback -weblogEdit.trackbacks = Trackbacks -weblogEdit.sendTrackback = \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C Trackback -weblogEdit.trackbackUrl = Trackback URL -weblogEdit.trackbackResults = Trackback \u043E\u0442\u0432\u0435\u0442\u0430 (\u043A\u043E\u0434 \u043E\u0448\u0438\u0431\u043A\u0438 0, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \ -\u0423\u0441\u043F\u0435\u0445): < br / > < br / > {0} weblogEdit.comment=\u041A\u043E\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 diff --git a/app/src/main/resources/ApplicationResources_zh_CN.properties b/app/src/main/resources/ApplicationResources_zh_CN.properties index 93ac844968..a5fa212005 100644 --- a/app/src/main/resources/ApplicationResources_zh_CN.properties +++ b/app/src/main/resources/ApplicationResources_zh_CN.properties @@ -224,8 +224,6 @@ comment.validator.excessSizeMessage=\u8BC4\u8BBA\u5185\u5BB9\u8D85\u8FC7 {0} \u4 comment.validator.bannedwordslistName=\u7981\u7528\u8BCD\u8BC4\u8BBA\u68C0\u67E5\u5668 comment.validator.bannedwordslistMessage=\u8BC4\u8BBA\u4E2D\u5305\u542B\u7981\u7528/\u5FFD\u7565\u7684\u8BCD\u6C47 -comment.validator.trackbackLinkbackName=\u8BC4\u8BBA\u5F15\u7528\u68C0\u67E5 -comment.validator.trackbackLinkbackMessage=\u5F15\u7528\u672A\u94FE\u63A5\u5230\u672C\u535A\u5BA2\u7684\u7F51\u9875 comment.validator.akismetName=\u8BC4\u8BBA\u8FC7\u6EE4\u9650\u5236 comment.validator.akismetMessage=\u8BC4\u8BBA\u5185\u5BB9\u88AB\u8FC7\u6EE4\u670D\u52A1\u65B9(akismet.com)\u8BA4\u5B9A\u4E3A\u5783\u573E\u4FE1\u606F @@ -345,16 +343,12 @@ configForm.pageMaxEntries=\u6BCF\u9875\u663E\u793A\u7684\u6587\u7AE0\u6570\u91CF configForm.newsfeedMaxEntries=\u65B0\u95FB\u6E90\u63D0\u4F9B\u7684\u6587\u7AE0\u6570\u91CF\u4E0A\u9650 configForm.styledFeeds=\u5728\u6D4F\u89C8\u5668\u4E2D\u663E\u793A\u5E26\u6837\u5F0F\u7684\u65B0\u95FB\u6E90 -configForm.commentSettings=\u8BC4\u8BBA\u548C\u5F15\u7528\u8BBE\u7F6E configForm.enableComments=\u5141\u8BB8\u6587\u7AE0\u8BC4\u8BBA\uFF1F configForm.ignoreSpamComments=\u4E0D\u4FDD\u5B58\u5783\u573E\u8BC4\u8BBA -configForm.enableTrackbacks=\u5141\u8BB8\u535A\u5BA2\u5F15\u7528\uFF1F -configForm.ignoreSpamTrackbacks=\u4E0D\u4FDD\u5B58\u5783\u573E\u5F15\u7528 configForm.commentHtmlAllowed=\u5141\u8BB8\u8BC4\u8BBA\u4E2D\u4F7F\u7528HTML\uFF1F configForm.commentPlugins=\u542F\u7528/\u7981\u7528\u8BC4\u8BBA\u683C\u5F0F\u5316\u63D2\u4EF6 configForm.emailComments=\u5C06\u8BC4\u8BBA\u53D1\u9001\u7535\u5B50\u90AE\u4EF6\u901A\u77E5\uFF1F configForm.moderationRequired=\u6240\u6709\u535A\u5BA2\u9700\u8981\u7BA1\u7406\u8BC4\u8BBA -configForm.enableTrackbackValidation=\u542F\u7528\u5F15\u7528\u94FE\u63A5\u6838\u67E5\uFF1F configForm.fileUploadSettings=\u6587\u4EF6\u4E0A\u4F20\u8BBE\u7F6E configForm.enableFileUploads=\u542F\u7528\u6587\u4EF6\u4E0A\u4F20\uFF1F @@ -461,9 +455,6 @@ error.general=\u5DF2\u8BB0\u5165\u9519\u8BEF\u65E5\u5FD7: [{0}] error.password.mismatch=\u7528\u6237\u540D\u6216\u5BC6\u7801\u51FA\u9519 error.unmatched.openid=OpenID\u7684URL\u672A\u77E5\u6216\u65E0\u6548 -error.trackback=\u53D1\u9001\u5F15\u7528\u65F6\u51FA\u9519\u3002\u53EF\u80FD\u539F\u56E0\uFF1A\u5F15\u7528URL\u65E0\u6548\u3002 {0} - -error.trackbackNotAllowed=\u53D1\u9001\u5F15\u7528\u65F6\u51FA\u9519\u3002\u7AD9\u70B9\u7BA1\u7406\u5458\u4E0D\u5141\u8BB8\u5411\u6307\u5B9A\u7684URL\u53D1\u9001\u5F15\u7528\u3002 error.title.403=\u62D2\u7EDD\u8BBF\u95EE @@ -1589,16 +1580,7 @@ weblogEdit.pinnedToMain.tooltip=\u5C06\u535A\u5BA2\u6587\u7AE0\u5728\u4E3B\u9875 weblogEdit.searchDescription=\u641C\u7D22\u63CF\u8FF0 weblogEdit.searchDescription.tooltip=\u7528\u4E8E SEO \u7684\u653E\u7F6E\u4E8E HTML \u6807\u5934\u4E2D\u7684\u535A\u5BA2\u6587\u7AE0\u7684\u7B80\u77ED\u63CF\u8FF0\uFF08\u5982\u679C\u6709\u5728\u535A\u5BA2\u6A21\u677F\u4EE3\u7801\u4E2D\u8BBE\u7F6E\uFF09\u3002 -weblogEdit.trackback=\u5F15\u7528 -weblogEdit.sendTrackback=\u53D1\u9001\u5F15\u7528 -weblogEdit.trackbackUrl=\u5F15\u7528URL -weblogEdit.trackbackSuccess=\u5F15\u7528\u6210\u529F\u3002 -weblogEdit.trackbackFailure=\u5F15\u7528\u5931\u8D25\uFF0C\u56DE\u5E94\u6D88\u606F "{0}" -weblogEdit.trackbackErrorTransport=\u5F15\u7528\u5931\u8D25\uFF0C\u65E0\u6CD5\u6253\u5F00\u5F15\u7528URL\uFF0C\u5730\u5740\u662F\u5426\u6B63\u786E\uFF1F -weblogEdit.trackbackErrorResponse=\u5F15\u7528\u5931\u8D25\uFF0C\u56DE\u5E94\u6D88\u606F {0} - {1} -weblogEdit.trackbackErrorParsing=\u5F15\u7528\u5931\u8D25\uFF0C\u76EE\u6807\u8FD4\u56DE\u7684\u4FE1\u606F\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8FD4\u56DE\u4FE1\u606F: {0} -weblogEdit.trackbackError404=\u5F15\u7528\u5931\u8D25\uFF0C\u65E0\u6CD5\u6253\u5F00\u5F15\u7528URL\uFF0C\u5730\u5740\u662F\u5426\u6B63\u786E\uFF1F weblogEdit.hasComments=\u8BC4\u8BBA [{1}] @@ -1877,5 +1859,3 @@ error.activate.user.invalidActivationCode=\u6FC0\u6D3B\u7801\u65E0\u6548\u3002\u user.account.activation.mail.subject=Roller\uFF1A\u4F60\u7684\u8D26\u53F7\u6FC0\u6D3B\u7801 user.account.activation.mail.content=

\u8981\u6FC0\u6D3B\u4F60\u7684Roller\u8D26\u6237[{1}]\uFF0C\u8BF7\u70B9\u51FB\u4EE5\u4E0B\u94FE\u63A5\uFF1A

{2}

- - diff --git a/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties b/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties index 8fba942175..8a1dc9b726 100644 --- a/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties +++ b/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties @@ -152,7 +152,7 @@ search.enabled=true search.index.comments=true #---------------------------------- -# comments and trackbacks +# comments # comment throttling comment.throttle.enabled=false @@ -192,9 +192,6 @@ org.apache.roller.weblogger.business.plugins.comment.HTMLSubsetPlugin # enables site full bannedwordslist check on comment posts (default: true) site.bannedwordslist.enable.comments=true -# enables site full bannedwordslist check at time of trackback post (default: true) -site.bannedwordslist.enable.trackbacks=true - # enables partial bannedwordslist check (not including bannedwordslist.txt) for each incoming referrer site.bannedwordslist.enable.referrers=false @@ -388,7 +385,7 @@ salt.ignored.urls=mediaFileAdd!save.rol,mediaFileEdit!save.rol,bookmarksImport!s #--------------------------------------------------------------------- # LDAP authentication properties -- valid only if LDAP authentication # authentication.method via authentication.method setting. -# See also comments and trackbacks section above for addition LDAP +# See also the comments section above for additional LDAP # config options. # Set these properties for a custom LDAP schema (optional) diff --git a/app/src/main/resources/org/apache/roller/weblogger/config/runtimeConfigDefs.xml b/app/src/main/resources/org/apache/roller/weblogger/config/runtimeConfigDefs.xml index 0071170338..12091fe1c5 100644 --- a/app/src/main/resources/org/apache/roller/weblogger/config/runtimeConfigDefs.xml +++ b/app/src/main/resources/org/apache/roller/weblogger/config/runtimeConfigDefs.xml @@ -151,7 +151,7 @@ - + @@ -162,14 +162,6 @@ boolean false - - boolean - true - - - boolean - true - boolean false @@ -187,11 +179,6 @@ boolean false - - boolean - false - - diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/Comments.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/Comments.jsp index f13a8d59e6..fef263699e 100644 --- a/app/src/main/webapp/WEB-INF/jsps/editor/Comments.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/editor/Comments.jsp @@ -273,12 +273,12 @@ - +
 :  - + + value="#comment.safeUrl"/>
diff --git a/app/src/main/webapp/WEB-INF/velocity/weblog.vm b/app/src/main/webapp/WEB-INF/velocity/weblog.vm index 212f376562..2a4aad32ef 100644 --- a/app/src/main/webapp/WEB-INF/velocity/weblog.vm +++ b/app/src/main/webapp/WEB-INF/velocity/weblog.vm @@ -22,7 +22,6 @@ These are the documented macros in order defined in this file: #includeTemplate($weblog $pageName) #showAutodiscoveryLinks($weblog) - #showTrackbackAutodiscovery($entry) #showMetaDescription() #showAnalyticsTrackingCode($weblog) @@ -114,30 +113,6 @@ Show RSS, Atom and RSD auto-discovery links as HTML link elements. #end -#** - * Display a trackback auto-discovery RDF comment for a WeblogEntry, but only - * if trackbacks are enabled and comments are allowed for the entry. - **# -#macro( showTrackbackAutodiscovery $entry ) -#if($config.trackbacksEnabled && $model.weblog.allowComments && $entry.commentsStillAllowed) - -#end -#end - #** Adds a meta description tag, suitable for use in HTML header sections. This tag is frequently used by search engines to provide a short description for links returned. The description value will set to the @@ -1042,4 +1017,3 @@ Include Javascript code needed for expanding folder macros (undocumented). - diff --git a/app/src/main/webapp/WEB-INF/web.xml b/app/src/main/webapp/WEB-INF/web.xml index 0418832da1..9117f74bf5 100644 --- a/app/src/main/webapp/WEB-INF/web.xml +++ b/app/src/main/webapp/WEB-INF/web.xml @@ -95,12 +95,11 @@ FORWARD - IPBanFilter /roller-ui/rendering/comment/* - /roller-ui/rendering/trackback/* FORWARD @@ -229,12 +228,6 @@ 7 - - TrackbackServlet - org.apache.roller.weblogger.ui.rendering.servlets.TrackbackServlet - 7 - - RSDServlet org.apache.roller.weblogger.ui.rendering.servlets.RSDServlet @@ -368,11 +361,6 @@ /roller-ui/rendering/comment/* - - TrackbackServlet - /roller-ui/rendering/trackback/* - - RSDServlet /roller-ui/rendering/rsd/* diff --git a/app/src/main/webapp/robots.txt b/app/src/main/webapp/robots.txt index 1d9bb7ccc0..b442054874 100644 --- a/app/src/main/webapp/robots.txt +++ b/app/src/main/webapp/robots.txt @@ -4,6 +4,5 @@ Disallow: /roller- Disallow: /theme Disallow: /language Disallow: /resources -Disallow: /trackback Disallow: /comment -Disallow: /main.do \ No newline at end of file +Disallow: /main.do diff --git a/app/src/main/webapp/themes/base.css b/app/src/main/webapp/themes/base.css index 9be0d2c0fb..ce424ec29d 100644 --- a/app/src/main/webapp/themes/base.css +++ b/app/src/main/webapp/themes/base.css @@ -212,11 +212,6 @@ div#searchAgain { border: 1px solid #999; font-size: 1em; } -div.trackbackUrl { - background: transparent; - margin: 0px 10px 10px 10px; - text-align: left; -} #nextEntry { text-align: right; } diff --git a/app/src/main/webapp/themes/basic/_day.vm b/app/src/main/webapp/themes/basic/_day.vm index 8d3a75612d..a798ccdbd0 100644 --- a/app/src/main/webapp/themes/basic/_day.vm +++ b/app/src/main/webapp/themes/basic/_day.vm @@ -30,7 +30,6 @@ $text.get("macro.weblog.comments") [$commentCount] #end

- #showTrackbackAutodiscovery($entry) #end diff --git a/app/src/main/webapp/themes/basicmobile/_day.vm b/app/src/main/webapp/themes/basicmobile/_day.vm index 8d3a75612d..a798ccdbd0 100644 --- a/app/src/main/webapp/themes/basicmobile/_day.vm +++ b/app/src/main/webapp/themes/basicmobile/_day.vm @@ -30,7 +30,6 @@ $text.get("macro.weblog.comments") [$commentCount] #end

- #showTrackbackAutodiscovery($entry) #end diff --git a/app/src/test/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapperTest.java b/app/src/test/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapperTest.java new file mode 100644 index 0000000000..cb40b389d9 --- /dev/null +++ b/app/src/test/java/org/apache/roller/weblogger/pojos/wrapper/WeblogEntryCommentWrapperTest.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.roller.weblogger.pojos.wrapper; + +import org.apache.roller.weblogger.pojos.WeblogEntryComment; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class WeblogEntryCommentWrapperTest { + + @Test + void exposesEscapedHttpAndHttpsAuthorUrls() { + WeblogEntryComment comment = new WeblogEntryComment(); + comment.setUrl(" https://example.org/profile?a=1&b=2 "); + + WeblogEntryCommentWrapper wrapper = WeblogEntryCommentWrapper.wrap(comment, null); + + assertEquals("https://example.org/profile?a=1&b=2", wrapper.getUrl()); + assertEquals("https://example.org/profile?a=1&b=2", comment.getSafeUrl()); + } + + @Test + void omitsUnsupportedOrMalformedAuthorUrls() { + WeblogEntryComment comment = new WeblogEntryComment(); + WeblogEntryCommentWrapper wrapper = WeblogEntryCommentWrapper.wrap(comment, null); + + comment.setUrl("javascript:alert(1)"); + assertNull(wrapper.getUrl()); + assertNull(comment.getSafeUrl()); + + comment.setUrl("//example.org/profile"); + assertNull(wrapper.getUrl()); + + comment.setUrl("not a url"); + assertNull(wrapper.getUrl()); + + comment.setUrl(" "); + assertNull(wrapper.getUrl()); + } +} diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/IncomingTrackbackRemovalTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/IncomingTrackbackRemovalTest.java new file mode 100644 index 0000000000..d7f85d47a8 --- /dev/null +++ b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/IncomingTrackbackRemovalTest.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.roller.weblogger.ui.rendering; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import org.apache.roller.weblogger.ui.rendering.model.ConfigModel; +import org.apache.roller.weblogger.ui.rendering.model.URLModel; +import org.apache.roller.weblogger.util.BannedwordslistChecker; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class IncomingTrackbackRemovalTest { + + @Test + void incomingTrackbackClassesAndHelpersAreRemoved() { + assertThrows(ClassNotFoundException.class, () -> Class.forName( + "org.apache.roller.weblogger.ui.rendering.servlets.TrackbackServlet")); + assertThrows(ClassNotFoundException.class, () -> Class.forName( + "org.apache.roller.weblogger.ui.rendering.util.WeblogTrackbackRequest")); + assertThrows(ClassNotFoundException.class, () -> Class.forName( + "org.apache.roller.weblogger.ui.rendering.plugins.comments.TrackbackLinkbackCommentValidator")); + assertThrows(NoSuchMethodException.class, + () -> URLModel.class.getMethod("trackback", String.class)); + assertThrows(NoSuchMethodException.class, + () -> ConfigModel.class.getMethod("getTrackbacksEnabled")); + assertThrows(NoSuchMethodException.class, + () -> BannedwordslistChecker.class.getMethod( + "checkTrackback", + org.apache.roller.weblogger.pojos.WeblogEntryComment.class)); + } + + @Test + void deploymentAndRuntimeConfigurationDoNotExposeTrackbacks() throws Exception { + assertFileDoesNotContain("src/main/webapp/WEB-INF/web.xml", "trackback"); + assertResourceDoesNotContain( + "org/apache/roller/weblogger/config/runtimeConfigDefs.xml", "trackback"); + assertFileDoesNotContain( + "src/main/webapp/WEB-INF/velocity/weblog.vm", "trackback"); + } + + private void assertFileDoesNotContain(String path, String value) throws Exception { + String content = Files.readString(Path.of(path), StandardCharsets.UTF_8); + assertFalse(content.toLowerCase().contains(value), path); + } + + private void assertResourceDoesNotContain(String path, String value) throws Exception { + try (InputStream input = getClass().getClassLoader().getResourceAsStream(path)) { + assertNotNull(input, path); + String content = new String(input.readAllBytes(), StandardCharsets.UTF_8); + assertFalse(content.toLowerCase().contains(value), path); + } + } +} diff --git a/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java b/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java deleted file mode 100644 index 8153864b74..0000000000 --- a/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.util; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Test linkback extractor. - */ -public class LinkbackExtractorTest { - - public void testLinkbackExtractor() throws Exception { - String[][] testrefs = new String[][] - { - // Second URL contains a link to the first - { - "http://cassandra.apache.org/", - "https://rollerweblogger.org/roller/entry/composite_keys_in_cassandra" - }, - { - "http://roller.apache.org/downloads/downloads.html", - "https://rollerweblogger.org/project/date/20140627" - } - }; - - LinkbackExtractor le = new LinkbackExtractor(testrefs[0][0],testrefs[0][1]); - assertEquals("Apache Cassandra", le.getTitle()); - - le = new LinkbackExtractor(testrefs[1][0],testrefs[1][1]); - assertEquals("Apache Roller", le.getTitle()); - - // todo: le.getPermalink() and le.getExcerpt() working - } - - -}