Commit 5c5c3906 authored by Liang Ding's avatar Liang Ding

Fix #12451

parent 33600fb2
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject; import org.b3log.latke.ioc.inject.Inject;
...@@ -28,10 +29,12 @@ import org.b3log.latke.servlet.HTTPRequestContext; ...@@ -28,10 +29,12 @@ import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.TextXMLRenderer;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option;
import org.b3log.solo.processor.renderer.ConsoleRenderer; import org.b3log.solo.processor.renderer.ConsoleRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.ArticleQueryService; import org.b3log.solo.service.ArticleQueryService;
...@@ -42,6 +45,7 @@ import org.jsoup.Jsoup; ...@@ -42,6 +45,7 @@ import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist; import org.jsoup.safety.Whitelist;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -51,7 +55,7 @@ import java.util.Map; ...@@ -51,7 +55,7 @@ import java.util.Map;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a> * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 1.0.1.0, Oct 11, 2017 * @version 1.1.0.0, May 29, 2018
* @since 2.4.0 * @since 2.4.0
*/ */
@RequestProcessor @RequestProcessor
...@@ -92,6 +96,30 @@ public class SearchProcessor { ...@@ -92,6 +96,30 @@ public class SearchProcessor {
@Inject @Inject
private Filler filler; private Filler filler;
/**
* Shows opensearch.xml.
*
* @param context the specified context
*/
@RequestProcessing(value = "/opensearch.xml", method = HTTPRequestMethod.GET)
public void showOpensearchXML(final HTTPRequestContext context) {
final TextXMLRenderer renderer = new TextXMLRenderer();
context.setRenderer(renderer);
try {
final InputStream resourceAsStream = SearchProcessor.class.getResourceAsStream("/opensearch.xml");
String content = IOUtils.toString(resourceAsStream, "UTF-8");
final JSONObject preference = preferenceQueryService.getPreference();
content = StringUtils.replace(content, "${blogTitle}", Jsoup.clean(preference.optString(Option.ID_C_BLOG_TITLE), Whitelist.none()));
content = StringUtils.replace(content, "${blogSubtitle}", Jsoup.clean(preference.optString(Option.ID_C_BLOG_SUBTITLE), Whitelist.none()));
content = StringUtils.replace(content, "${servePath}", Latkes.getServePath());
renderer.setContent(content);
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Shows opensearch.xml failed", e);
}
}
/** /**
* Searches articles. * Searches articles.
* *
......
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
Author: Liyuan Li Author: Liyuan Li
--> -->
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/"> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Solo</ShortName> <ShortName>${blogTitle}</ShortName>
<Description>一款漂亮、简约、稳定、极速的 Java 博客系统</Description> <Description>${blogSubtitle}</Description>
<InputEncoding>UTF-8</InputEncoding> <InputEncoding>UTF-8</InputEncoding>
<Image width="32" height="32" type="image/x-icon">https://static.b3log.org/images/brand/solo-32.png</Image> <Image width="32" height="32" type="image/x-icon">https://static.b3log.org/images/brand/solo-32.png</Image>
<Url type="text/html" method="get" template="http://demo.b3log.org/search?keyword={searchTerms}"></Url> <Url type="text/html" method="get" template="${servePath}/search?keyword={searchTerms}"></Url>
</OpenSearchDescription> </OpenSearchDescription>
\ No newline at end of file
...@@ -32,5 +32,6 @@ ...@@ -32,5 +32,6 @@
<link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" /> <link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" />
<link rel="icon" type="image/png" href="${servePath}/favicon.png" /> <link rel="icon" type="image/png" href="${servePath}/favicon.png" />
<link rel="manifest" href="${servePath}/manifest.json"> <link rel="manifest" href="${servePath}/manifest.json">
<link rel="search" type="application/opensearchdescription+xml" title="${title}" href="/opensearch.xml">
${htmlHead} ${htmlHead}
</#macro> </#macro>
\ No newline at end of file
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
<meta http-equiv="Window-target" content="_top" /> <meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/themes/default/style.css?${staticResourceVersion}" charset="utf-8" /> <link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/themes/default/style.css?${staticResourceVersion}" charset="utf-8" />
<link rel="manifest" href="${servePath}/manifest.json"> <link rel="manifest" href="${servePath}/manifest.json">
<link rel="search" type="application/opensearchdescription+xml" title="${title}" href="/opensearch.xml">
<style type="text/css"> <style type="text/css">
#headerbar, #wptouch-login, #wptouch-search { #headerbar, #wptouch-login, #wptouch-search {
background: #000000 url(/skins/${skinDirName}/themes/core/core-images/head-fade-bk.png); background: #000000 url(/skins/${skinDirName}/themes/core/core-images/head-fade-bk.png);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment