Commit 55a963db authored by Liang Ding's avatar Liang Ding

🎨 #12932

parent b1e6ba0d
...@@ -15,4 +15,4 @@ RUN apk add --no-cache ca-certificates tzdata ...@@ -15,4 +15,4 @@ RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai
EXPOSE 8080 EXPOSE 8080
ENTRYPOINT [ "java", "-cp", "WEB-INF/lib/*:WEB-INF/classes", "org.b3log.solo.Starter" ] ENTRYPOINT [ "java", "-cp", "WEB-INF/lib/*:WEB-INF/classes", "org.b3log.solo.Server" ]
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Description: Solo POM. Description: Solo POM.
Version: 3.18.3.74, Oct 23, 2019 Version: 3.18.3.75, Nov 3, 2019
Author: <a href="http://88250.b3log.org">Liang Ding</a> Author: <a href="http://88250.b3log.org">Liang Ding</a>
Author: <a href="http://www.annpeter.cn">Ann Peter</a> Author: <a href="http://www.annpeter.cn">Ann Peter</a>
Author: <a href="http://vanessa.b3log.org">Vanessa</a> Author: <a href="http://vanessa.b3log.org">Vanessa</a>
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.b3log</groupId> <groupId>org.b3log</groupId>
<artifactId>solo</artifactId> <artifactId>solo</artifactId>
<packaging>war</packaging> <packaging>jar</packaging>
<name>Solo</name> <name>Solo</name>
<version>3.6.6</version> <version>3.6.6</version>
<description> <description>
...@@ -73,12 +73,11 @@ ...@@ -73,12 +73,11 @@
</scm> </scm>
<properties> <properties>
<org.b3log.latke.version>2.5.8</org.b3log.latke.version> <org.b3log.latke.version>2.5.9-SNAPSHOT</org.b3log.latke.version>
<slf4j.version>1.7.28</slf4j.version> <slf4j.version>1.7.28</slf4j.version>
<jsoup.version>1.12.1</jsoup.version> <jsoup.version>1.12.1</jsoup.version>
<flexmark.version>0.50.40</flexmark.version> <flexmark.version>0.50.40</flexmark.version>
<jetty.version>9.4.12.v20180830</jetty.version>
<commons-cli.version>1.3.1</commons-cli.version> <commons-cli.version>1.3.1</commons-cli.version>
<commons-codec.version>1.10</commons-codec.version> <commons-codec.version>1.10</commons-codec.version>
<emoji-java.version>5.1.0</emoji-java.version> <emoji-java.version>5.1.0</emoji-java.version>
...@@ -86,7 +85,6 @@ ...@@ -86,7 +85,6 @@
<owasp.version>1.2.2</owasp.version> <owasp.version>1.2.2</owasp.version>
<snakeyaml.version>1.18</snakeyaml.version> <snakeyaml.version>1.18</snakeyaml.version>
<user-agent-utils.version>1.21</user-agent-utils.version> <user-agent-utils.version>1.21</user-agent-utils.version>
<servlet.version>3.1.0</servlet.version>
<license-maven-plugin.version>3.0</license-maven-plugin.version> <license-maven-plugin.version>3.0</license-maven-plugin.version>
<maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version> <maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
...@@ -108,12 +106,6 @@ ...@@ -108,12 +106,6 @@
<version>${org.b3log.latke.version}</version> <version>${org.b3log.latke.version}</version>
</dependency> </dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
...@@ -189,12 +181,6 @@ ...@@ -189,12 +181,6 @@
<version>${commons-cli.version}</version> <version>${commons-cli.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.jodd</groupId> <groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId> <artifactId>jodd-http</artifactId>
...@@ -340,22 +326,6 @@ ...@@ -340,22 +326,6 @@
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<httpConnector>
<port>8080</port>
</httpConnector>
<stopKey>stop</stopKey>
<stopPort>4501</stopPort>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
......
...@@ -17,57 +17,44 @@ ...@@ -17,57 +17,44 @@
*/ */
package org.b3log.solo; package org.b3log.solo;
import eu.bitwalker.useragentutils.BrowserType; import org.apache.commons.cli.*;
import eu.bitwalker.useragentutils.UserAgent;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.http.BaseServer;
import org.b3log.latke.http.Dispatcher;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.plugin.PluginManager; import org.b3log.latke.plugin.PluginManager;
import org.b3log.latke.plugin.ViewLoadEventHandler; import org.b3log.latke.plugin.ViewLoadEventHandler;
import org.b3log.latke.repository.Transaction; import org.b3log.latke.repository.Transaction;
import org.b3log.latke.servlet.AbstractServletListener;
import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Stopwatchs; import org.b3log.latke.util.Stopwatchs;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.event.B3ArticleSender; import org.b3log.solo.event.B3ArticleSender;
import org.b3log.solo.event.B3ArticleUpdater; import org.b3log.solo.event.B3ArticleUpdater;
import org.b3log.solo.event.B3CommentSender; import org.b3log.solo.event.B3CommentSender;
import org.b3log.solo.event.PluginRefresher; import org.b3log.solo.event.PluginRefresher;
import org.b3log.solo.model.Option; import org.b3log.solo.processor.*;
import org.b3log.solo.processor.InitCheckHandler;
import org.b3log.solo.processor.PermalinkHandler;
import org.b3log.solo.processor.console.*; import org.b3log.solo.processor.console.*;
import org.b3log.solo.repository.OptionRepository; import org.b3log.solo.repository.OptionRepository;
import org.b3log.solo.service.*; import org.b3log.solo.service.*;
import org.b3log.solo.util.Markdowns; import org.b3log.solo.util.Markdowns;
import org.b3log.solo.util.Skins;
import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletRequestEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionEvent;
/** /**
* Solo Servlet listener. * Server.
* *
* @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">Vanessa</a> * @version 2.0.0.0, Nov 3, 2019
* @version 1.11.0.25, Oct 23, 2019 * @since 1.2.0
* @since 0.3.1
*/ */
public final class SoloServletListener extends AbstractServletListener { public final class Server extends BaseServer {
/** /**
* Logger. * Logger.
*/ */
private static final Logger LOGGER = Logger.getLogger(SoloServletListener.class); private static final Logger LOGGER = Logger.getLogger(Server.class);
/** /**
* Solo version. * Solo version.
...@@ -75,30 +62,143 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -75,30 +62,143 @@ public final class SoloServletListener extends AbstractServletListener {
public static final String VERSION = "3.6.6"; public static final String VERSION = "3.6.6";
/** /**
* Bean manager. * Main.
*
* @param args the specified arguments
*/ */
private BeanManager beanManager; public static void main(final String[] args) {
final Logger logger = Logger.getLogger(Server.class);
final Options options = new Options();
final Option listenPortOpt = Option.builder("lp").longOpt("listen_port").argName("LISTEN_PORT").
hasArg().desc("listen port, default is 8080").build();
options.addOption(listenPortOpt);
final Option serverSchemeOpt = Option.builder("ss").longOpt("server_scheme").argName("SERVER_SCHEME").
hasArg().desc("browser visit protocol, default is http").build();
options.addOption(serverSchemeOpt);
final Option serverHostOpt = Option.builder("sh").longOpt("server_host").argName("SERVER_HOST").
hasArg().desc("browser visit domain name, default is localhost").build();
options.addOption(serverHostOpt);
final Option serverPortOpt = Option.builder("sp").longOpt("server_port").argName("SERVER_PORT").
hasArg().desc("browser visit port, default is 8080").build();
options.addOption(serverPortOpt);
final Option staticServerSchemeOpt = Option.builder("sss").longOpt("static_server_scheme").argName("STATIC_SERVER_SCHEME").
hasArg().desc("browser visit static resource protocol, default is http").build();
options.addOption(staticServerSchemeOpt);
final Option staticServerHostOpt = Option.builder("ssh").longOpt("static_server_host").argName("STATIC_SERVER_HOST").
hasArg().desc("browser visit static resource domain name, default is localhost").build();
options.addOption(staticServerHostOpt);
final Option staticServerPortOpt = Option.builder("ssp").longOpt("static_server_port").argName("STATIC_SERVER_PORT").
hasArg().desc("browser visit static resource port, default is 8080").build();
options.addOption(staticServerPortOpt);
final Option runtimeModeOpt = Option.builder("rm").longOpt("runtime_mode").argName("RUNTIME_MODE").
hasArg().desc("runtime mode (DEVELOPMENT/PRODUCTION), default is DEVELOPMENT").build();
options.addOption(runtimeModeOpt);
final Option luteHttpOpt = Option.builder("lute").longOpt("lute_http").argName("LUTE_HTTP").
hasArg().desc("lute http URL, default is http://localhost:8249, see https://github.com/b3log/lute-http for more details").build();
options.addOption(luteHttpOpt);
options.addOption("h", "help", false, "print help for the command");
final HelpFormatter helpFormatter = new HelpFormatter();
helpFormatter.setWidth(120);
final CommandLineParser commandLineParser = new DefaultParser();
CommandLine commandLine;
final boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows");
final String cmdSyntax = isWindows ? "java -cp \"WEB-INF/lib/*;WEB-INF/classes\" org.b3log.solo.Starter"
: "java -cp \"WEB-INF/lib/*:WEB-INF/classes\" org.b3log.solo.Starter";
final String header = "\nSolo 是一款小而美的博客系统,专为程序员设计。\n\n";
final String footer = "\n提需求或报告缺陷请到项目网站: https://github.com/b3log/solo\n\n";
try {
commandLine = commandLineParser.parse(options, args);
} catch (final ParseException e) {
helpFormatter.printHelp(cmdSyntax, header, options, footer, true);
@Override return;
public void contextInitialized(final ServletContextEvent servletContextEvent) { }
if (commandLine.hasOption("h")) {
helpFormatter.printHelp(cmdSyntax, header, options, footer, true);
return;
}
String portArg = commandLine.getOptionValue("listen_port");
if (!Strings.isNumeric(portArg)) {
portArg = "8080";
}
try {
Latkes.setScanPath("org.b3log.solo"); Latkes.setScanPath("org.b3log.solo");
super.contextInitialized(servletContextEvent); Latkes.init();
DispatcherServlet.HANDLERS.add(0, new InitCheckHandler()); } catch (final Exception e) {
DispatcherServlet.HANDLERS.add(1, new PermalinkHandler()); logger.log(Level.ERROR, "Latke init failed, please configure latke.props or run with args, visit https://hacpai.com/article/1492881378588 for more details");
System.exit(-1);
}
beanManager = BeanManager.getInstance(); String serverScheme = commandLine.getOptionValue("server_scheme");
if (null != serverScheme) {
Latkes.setLatkeProperty("serverScheme", serverScheme);
}
String serverHost = commandLine.getOptionValue("server_host");
if (null != serverHost) {
Latkes.setLatkeProperty("serverHost", serverHost);
}
String serverPort = commandLine.getOptionValue("server_port");
if (null != serverPort) {
Latkes.setLatkeProperty("serverPort", serverPort);
}
String staticServerScheme = commandLine.getOptionValue("static_server_scheme");
if (null != staticServerScheme) {
Latkes.setLatkeProperty("staticServerScheme", staticServerScheme);
}
String staticServerHost = commandLine.getOptionValue("static_server_host");
if (null != staticServerHost) {
Latkes.setLatkeProperty("staticServerHost", staticServerHost);
}
String staticServerPort = commandLine.getOptionValue("static_server_port");
if (null != staticServerPort) {
Latkes.setLatkeProperty("staticServerPort", staticServerPort);
}
String runtimeMode = commandLine.getOptionValue("runtime_mode");
if (null != runtimeMode) {
Latkes.setRuntimeMode(Latkes.RuntimeMode.valueOf(runtimeMode));
}
String luteHttp = commandLine.getOptionValue("lute");
if (null != luteHttp) {
Markdowns.LUTE_ENGINE_URL = luteHttp;
Markdowns.LUTE_AVAILABLE = true;
}
Dispatcher.HANDLERS.add(0, new StopwatchStartHandler());
Dispatcher.HANDLERS.add(1, new InitCheckHandler());
Dispatcher.HANDLERS.add(2, new SkinHandler());
Dispatcher.HANDLERS.add(3, new PermalinkHandler());
Dispatcher.HANDLERS.add(4, new StopwatchEndHandler());
final BeanManager beanManager = BeanManager.getInstance();
routeConsoleProcessors(); routeConsoleProcessors();
Stopwatchs.start("Context Initialized"); Stopwatchs.start("Context Initialized");
final Latkes.RuntimeDatabase runtimeDatabase = Latkes.getRuntimeDatabase(); final Latkes.RuntimeDatabase runtimeDatabase = Latkes.getRuntimeDatabase();
final Latkes.RuntimeMode runtimeMode = Latkes.getRuntimeMode();
final String jdbcUsername = Latkes.getLocalProperty("jdbc.username"); final String jdbcUsername = Latkes.getLocalProperty("jdbc.username");
final String jdbcURL = Latkes.getLocalProperty("jdbc.URL"); final String jdbcURL = Latkes.getLocalProperty("jdbc.URL");
final boolean luteAvailable = Markdowns.LUTE_AVAILABLE; final boolean luteAvailable = Markdowns.LUTE_AVAILABLE;
LOGGER.log(Level.INFO, "Solo is booting [ver=" + VERSION + ", servletContainer=" + Latkes.getServletInfo(servletContextEvent.getServletContext()) LOGGER.log(Level.INFO, "Solo is booting [ver=" + VERSION + ", os=" + Latkes.getOperatingSystemName() +
+ ", os=" + Latkes.getOperatingSystemName() + ", isDocker=" + Latkes.isDocker() + ", luteAvailable=" + luteAvailable + ", pid=" + Latkes.currentPID() ", isDocker=" + Latkes.isDocker() + ", luteAvailable=" + luteAvailable + ", pid=" + Latkes.currentPID() +
+ ", runtimeDatabase=" + runtimeDatabase + ", runtimeMode=" + runtimeMode + ", jdbc.username=" + jdbcUsername + ", jdbc.URL=" + jdbcURL + "]"); ", runtimeDatabase=" + runtimeDatabase + ", runtimeMode=" + Latkes.getRuntimeMode() + ", jdbc.username=" +
jdbcUsername + ", jdbc.URL=" + jdbcURL + "]");
validateSkin(); validateSkin();
...@@ -143,51 +243,14 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -143,51 +243,14 @@ public final class SoloServletListener extends AbstractServletListener {
final CronMgmtService cronMgmtService = beanManager.getReference(CronMgmtService.class); final CronMgmtService cronMgmtService = beanManager.getReference(CronMgmtService.class);
cronMgmtService.start(); cronMgmtService.start();
}
@Override
public void contextDestroyed(final ServletContextEvent servletContextEvent) {
super.contextDestroyed(servletContextEvent);
final CronMgmtService cronMgmtService = beanManager.getReference(CronMgmtService.class); final Server server = new Server();
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
cronMgmtService.stop(); cronMgmtService.stop();
server.shutdown();
LOGGER.info("Destroyed the context"); Latkes.shutdown();
} }));
server.start(Integer.valueOf(portArg));
@Override
public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
}
@Override
public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
super.sessionDestroyed(httpSessionEvent);
}
@Override
public void requestInitialized(final ServletRequestEvent servletRequestEvent) {
final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequestEvent.getServletRequest();
Requests.log(httpServletRequest, Level.DEBUG, LOGGER);
final String requestURI = httpServletRequest.getRequestURI();
Stopwatchs.start("Request Initialized [requestURI=" + requestURI + "]");
fillBotAttrs(httpServletRequest);
if (!Solos.isBot(httpServletRequest)) {
final StatisticMgmtService statisticMgmtService = beanManager.getReference(StatisticMgmtService.class);
statisticMgmtService.onlineVisitorCount(httpServletRequest);
}
resolveSkinDir(httpServletRequest);
}
@Override
public void requestDestroyed(final ServletRequestEvent servletRequestEvent) {
Stopwatchs.end();
LOGGER.log(Level.DEBUG, "Stopwatch: {0}{1}", Strings.LINE_SEPARATOR, Stopwatchs.getTimingStat());
Stopwatchs.release();
super.requestDestroyed(servletRequestEvent);
} }
/** /**
...@@ -196,11 +259,12 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -196,11 +259,12 @@ public final class SoloServletListener extends AbstractServletListener {
* Loads skin from repository, loads skins from skin directory then sets it into preference if the skins changed. * Loads skin from repository, loads skins from skin directory then sets it into preference if the skins changed.
* </p> * </p>
*/ */
private void loadPreference() { private static void loadPreference() {
Stopwatchs.start("Load Preference"); Stopwatchs.start("Load Preference");
LOGGER.debug("Loading preference...."); LOGGER.debug("Loading preference....");
final BeanManager beanManager = BeanManager.getInstance();
final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class); final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class);
JSONObject skin; JSONObject skin;
try { try {
...@@ -223,11 +287,12 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -223,11 +287,12 @@ public final class SoloServletListener extends AbstractServletListener {
/** /**
* Register event handlers. * Register event handlers.
*/ */
private void registerEventHandlers() { private static void registerEventHandlers() {
Stopwatchs.start("Register Event Handlers"); Stopwatchs.start("Register Event Handlers");
LOGGER.debug("Registering event handlers...."); LOGGER.debug("Registering event handlers....");
try { try {
final BeanManager beanManager = BeanManager.getInstance();
final EventManager eventManager = beanManager.getReference(EventManager.class); final EventManager eventManager = beanManager.getReference(EventManager.class);
final PluginRefresher pluginRefresher = beanManager.getReference(PluginRefresher.class); final PluginRefresher pluginRefresher = beanManager.getReference(PluginRefresher.class);
eventManager.registerListener(pluginRefresher); eventManager.registerListener(pluginRefresher);
...@@ -248,59 +313,6 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -248,59 +313,6 @@ public final class SoloServletListener extends AbstractServletListener {
Stopwatchs.end(); Stopwatchs.end();
} }
/**
* Resolve skin (template) for the specified HTTP servlet request.
* 前台皮肤切换 https://github.com/b3log/solo/issues/12060
*
* @param httpServletRequest the specified HTTP servlet request
*/
private void resolveSkinDir(final HttpServletRequest httpServletRequest) {
String skin = Skins.getSkinDirNameFromCookie(httpServletRequest);
if (StringUtils.isBlank(skin)) {
final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class);
final JSONObject skinOpt = optionQueryService.getSkin();
if (Solos.isMobile(httpServletRequest)) {
if (null != skinOpt) {
skin = skinOpt.optString(Option.ID_C_MOBILE_SKIN_DIR_NAME);
} else {
skin = Option.DefaultPreference.DEFAULT_MOBILE_SKIN_DIR_NAME;
}
} else {
if (null != skinOpt) {
skin = skinOpt.optString(Option.ID_C_SKIN_DIR_NAME);
} else {
skin = Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
}
}
}
httpServletRequest.setAttribute(Keys.TEMAPLTE_DIR_NAME, skin);
}
private static void fillBotAttrs(final HttpServletRequest request) {
final String userAgentStr = request.getHeader("User-Agent");
final UserAgent userAgent = UserAgent.parseUserAgentString(userAgentStr);
BrowserType browserType = userAgent.getBrowser().getBrowserType();
if (StringUtils.containsIgnoreCase(userAgentStr, "mobile")
|| StringUtils.containsIgnoreCase(userAgentStr, "MQQBrowser")
|| StringUtils.containsIgnoreCase(userAgentStr, "iphone")
|| StringUtils.containsIgnoreCase(userAgentStr, "MicroMessenger")
|| StringUtils.containsIgnoreCase(userAgentStr, "CFNetwork")
|| StringUtils.containsIgnoreCase(userAgentStr, "Android")) {
browserType = BrowserType.MOBILE_BROWSER;
} else if (StringUtils.containsIgnoreCase(userAgentStr, "Iframely")
|| StringUtils.containsIgnoreCase(userAgentStr, "Google")
|| StringUtils.containsIgnoreCase(userAgentStr, "BUbiNG")
|| StringUtils.containsIgnoreCase(userAgentStr, "ltx71")
|| StringUtils.containsIgnoreCase(userAgentStr, "py")) {
browserType = BrowserType.ROBOT;
}
request.setAttribute(Keys.HttpRequest.IS_SEARCH_ENGINE_BOT, BrowserType.ROBOT == browserType);
request.setAttribute(Keys.HttpRequest.IS_MOBILE_BOT, BrowserType.MOBILE_BROWSER == browserType);
}
/** /**
* Validates the default skin. * Validates the default skin.
* *
...@@ -309,7 +321,7 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -309,7 +321,7 @@ public final class SoloServletListener extends AbstractServletListener {
* </p> * </p>
*/ */
private static void validateSkin() { private static void validateSkin() {
final String skinDirName = Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME; final String skinDirName = org.b3log.solo.model.Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
final String skinName = Latkes.getSkinName(skinDirName); final String skinName = Latkes.getSkinName(skinDirName);
if (StringUtils.isBlank(skinName)) { if (StringUtils.isBlank(skinName)) {
LOGGER.log(Level.ERROR, "Can't load the default skins, please make sure skin [" + skinDirName + "] is under skins directory and structure correctly"); LOGGER.log(Level.ERROR, "Can't load the default skins, please make sure skin [" + skinDirName + "] is under skins directory and structure correctly");
...@@ -324,9 +336,9 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -324,9 +336,9 @@ public final class SoloServletListener extends AbstractServletListener {
public static void routeConsoleProcessors() { public static void routeConsoleProcessors() {
final BeanManager beanManager = BeanManager.getInstance(); final BeanManager beanManager = BeanManager.getInstance();
final AdminConsole adminConsole = beanManager.getReference(AdminConsole.class); final AdminConsole adminConsole = beanManager.getReference(AdminConsole.class);
DispatcherServlet.get("/admin-index.do", adminConsole::showAdminIndex); Dispatcher.get("/admin-index.do", adminConsole::showAdminIndex);
DispatcherServlet.get("/admin-preference.do", adminConsole::showAdminPreferenceFunction); Dispatcher.get("/admin-preference.do", adminConsole::showAdminPreferenceFunction);
DispatcherServlet.route().get(new String[]{"/admin-article.do", Dispatcher.route().get(new String[]{"/admin-article.do",
"/admin-article-list.do", "/admin-article-list.do",
"/admin-comment-list.do", "/admin-comment-list.do",
"/admin-link-list.do", "/admin-link-list.do",
...@@ -339,84 +351,90 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -339,84 +351,90 @@ public final class SoloServletListener extends AbstractServletListener {
"/admin-plugin-list.do", "/admin-plugin-list.do",
"/admin-main.do", "/admin-main.do",
"/admin-about.do"}, adminConsole::showAdminFunctions); "/admin-about.do"}, adminConsole::showAdminFunctions);
DispatcherServlet.get("/console/export/sql", adminConsole::exportSQL); Dispatcher.get("/console/export/sql", adminConsole::exportSQL);
DispatcherServlet.get("/console/export/json", adminConsole::exportJSON); Dispatcher.get("/console/export/json", adminConsole::exportJSON);
DispatcherServlet.get("/console/export/hexo", adminConsole::exportHexo); Dispatcher.get("/console/export/hexo", adminConsole::exportHexo);
final ArticleConsole articleConsole = beanManager.getReference(ArticleConsole.class); final ArticleConsole articleConsole = beanManager.getReference(ArticleConsole.class);
DispatcherServlet.get("/console/article/push2rhy", articleConsole::pushArticleToCommunity); Dispatcher.get("/console/article/push2rhy", articleConsole::pushArticleToCommunity);
DispatcherServlet.get("/console/thumbs", articleConsole::getArticleThumbs); Dispatcher.get("/console/thumbs", articleConsole::getArticleThumbs);
DispatcherServlet.get("/console/article/{id}", articleConsole::getArticle); Dispatcher.get("/console/article/{id}", articleConsole::getArticle);
DispatcherServlet.get("/console/articles/status/{status}/{page}/{pageSize}/{windowSize}", articleConsole::getArticles); Dispatcher.get("/console/articles/status/{status}/{page}/{pageSize}/{windowSize}", articleConsole::getArticles);
DispatcherServlet.delete("/console/article/{id}", articleConsole::removeArticle); Dispatcher.delete("/console/article/{id}", articleConsole::removeArticle);
DispatcherServlet.put("/console/article/unpublish/{id}", articleConsole::cancelPublishArticle); Dispatcher.put("/console/article/unpublish/{id}", articleConsole::cancelPublishArticle);
DispatcherServlet.put("/console/article/canceltop/{id}", articleConsole::cancelTopArticle); Dispatcher.put("/console/article/canceltop/{id}", articleConsole::cancelTopArticle);
DispatcherServlet.put("/console/article/puttop/{id}", articleConsole::putTopArticle); Dispatcher.put("/console/article/puttop/{id}", articleConsole::putTopArticle);
DispatcherServlet.put("/console/article/", articleConsole::updateArticle); Dispatcher.put("/console/article/", articleConsole::updateArticle);
DispatcherServlet.post("/console/article/", articleConsole::addArticle); Dispatcher.post("/console/article/", articleConsole::addArticle);
final CategoryConsole categoryConsole = beanManager.getReference(CategoryConsole.class); final CategoryConsole categoryConsole = beanManager.getReference(CategoryConsole.class);
DispatcherServlet.put("/console/category/order/", categoryConsole::changeOrder); Dispatcher.put("/console/category/order/", categoryConsole::changeOrder);
DispatcherServlet.get("/console/category/{id}", categoryConsole::getCategory); Dispatcher.get("/console/category/{id}", categoryConsole::getCategory);
DispatcherServlet.delete("/console/category/{id}", categoryConsole::removeCategory); Dispatcher.delete("/console/category/{id}", categoryConsole::removeCategory);
DispatcherServlet.put("/console/category/", categoryConsole::updateCategory); Dispatcher.put("/console/category/", categoryConsole::updateCategory);
DispatcherServlet.post("/console/category/", categoryConsole::addCategory); Dispatcher.post("/console/category/", categoryConsole::addCategory);
DispatcherServlet.get("/console/categories/{page}/{pageSize}/{windowSize}", categoryConsole::getCategories); Dispatcher.get("/console/categories/{page}/{pageSize}/{windowSize}", categoryConsole::getCategories);
final CommentConsole commentConsole = beanManager.getReference(CommentConsole.class); final CommentConsole commentConsole = beanManager.getReference(CommentConsole.class);
DispatcherServlet.delete("/console/article/comment/{id}", commentConsole::removeArticleComment); Dispatcher.delete("/console/article/comment/{id}", commentConsole::removeArticleComment);
DispatcherServlet.get("/console/comments/{page}/{pageSize}/{windowSize}", commentConsole::getComments); Dispatcher.get("/console/comments/{page}/{pageSize}/{windowSize}", commentConsole::getComments);
DispatcherServlet.get("/console/comments/article/{id}", commentConsole::getArticleComments); Dispatcher.get("/console/comments/article/{id}", commentConsole::getArticleComments);
final LinkConsole linkConsole = beanManager.getReference(LinkConsole.class); final LinkConsole linkConsole = beanManager.getReference(LinkConsole.class);
DispatcherServlet.delete("/console/link/{id}", linkConsole::removeLink); Dispatcher.delete("/console/link/{id}", linkConsole::removeLink);
DispatcherServlet.put("/console/link/", linkConsole::updateLink); Dispatcher.put("/console/link/", linkConsole::updateLink);
DispatcherServlet.put("/console/link/order/", linkConsole::changeOrder); Dispatcher.put("/console/link/order/", linkConsole::changeOrder);
DispatcherServlet.post("/console/link/", linkConsole::addLink); Dispatcher.post("/console/link/", linkConsole::addLink);
DispatcherServlet.get("/console/links/{page}/{pageSize}/{windowSize}", linkConsole::getLinks); Dispatcher.get("/console/links/{page}/{pageSize}/{windowSize}", linkConsole::getLinks);
DispatcherServlet.get("/console/link/{id}", linkConsole::getLink); Dispatcher.get("/console/link/{id}", linkConsole::getLink);
final PageConsole pageConsole = beanManager.getReference(PageConsole.class); final PageConsole pageConsole = beanManager.getReference(PageConsole.class);
DispatcherServlet.put("/console/page/", pageConsole::updatePage); Dispatcher.put("/console/page/", pageConsole::updatePage);
DispatcherServlet.delete("/console/page/{id}", pageConsole::removePage); Dispatcher.delete("/console/page/{id}", pageConsole::removePage);
DispatcherServlet.post("/console/page/", pageConsole::addPage); Dispatcher.post("/console/page/", pageConsole::addPage);
DispatcherServlet.put("/console/page/order/", pageConsole::changeOrder); Dispatcher.put("/console/page/order/", pageConsole::changeOrder);
DispatcherServlet.get("/console/page/{id}", pageConsole::getPage); Dispatcher.get("/console/page/{id}", pageConsole::getPage);
DispatcherServlet.get("/console/pages/{page}/{pageSize}/{windowSize}", pageConsole::getPages); Dispatcher.get("/console/pages/{page}/{pageSize}/{windowSize}", pageConsole::getPages);
final PluginConsole pluginConsole = beanManager.getReference(PluginConsole.class); final PluginConsole pluginConsole = beanManager.getReference(PluginConsole.class);
DispatcherServlet.put("/console/plugin/status/", pluginConsole::setPluginStatus); Dispatcher.put("/console/plugin/status/", pluginConsole::setPluginStatus);
DispatcherServlet.get("/console/plugins/{page}/{pageSize}/{windowSize}", pluginConsole::getPlugins); Dispatcher.get("/console/plugins/{page}/{pageSize}/{windowSize}", pluginConsole::getPlugins);
DispatcherServlet.post("/console/plugin/toSetting", pluginConsole::toSetting); Dispatcher.post("/console/plugin/toSetting", pluginConsole::toSetting);
DispatcherServlet.post("/console/plugin/updateSetting", pluginConsole::updateSetting); Dispatcher.post("/console/plugin/updateSetting", pluginConsole::updateSetting);
final PreferenceConsole preferenceConsole = beanManager.getReference(PreferenceConsole.class); final PreferenceConsole preferenceConsole = beanManager.getReference(PreferenceConsole.class);
DispatcherServlet.get("/console/signs/", preferenceConsole::getSigns); Dispatcher.get("/console/signs/", preferenceConsole::getSigns);
DispatcherServlet.get("/console/preference/", preferenceConsole::getPreference); Dispatcher.get("/console/preference/", preferenceConsole::getPreference);
DispatcherServlet.put("/console/preference/", preferenceConsole::updatePreference); Dispatcher.put("/console/preference/", preferenceConsole::updatePreference);
final SkinConsole skinConsole = beanManager.getReference(SkinConsole.class); final SkinConsole skinConsole = beanManager.getReference(SkinConsole.class);
DispatcherServlet.get("/console/skin", skinConsole::getSkin); Dispatcher.get("/console/skin", skinConsole::getSkin);
DispatcherServlet.put("/console/skin", skinConsole::updateSkin); Dispatcher.put("/console/skin", skinConsole::updateSkin);
final RepairConsole repairConsole = beanManager.getReference(RepairConsole.class); final RepairConsole repairConsole = beanManager.getReference(RepairConsole.class);
DispatcherServlet.get("/fix/restore-signs", repairConsole::restoreSigns); Dispatcher.get("/fix/restore-signs", repairConsole::restoreSigns);
final TagConsole tagConsole = beanManager.getReference(TagConsole.class); final TagConsole tagConsole = beanManager.getReference(TagConsole.class);
DispatcherServlet.get("/console/tags", tagConsole::getTags); Dispatcher.get("/console/tags", tagConsole::getTags);
DispatcherServlet.get("/console/tag/unused", tagConsole::getUnusedTags); Dispatcher.get("/console/tag/unused", tagConsole::getUnusedTags);
final OtherConsole otherConsole = beanManager.getReference(OtherConsole.class); final OtherConsole otherConsole = beanManager.getReference(OtherConsole.class);
DispatcherServlet.delete("/console/archive/unused", otherConsole::removeUnusedArchives); Dispatcher.delete("/console/archive/unused", otherConsole::removeUnusedArchives);
DispatcherServlet.delete("/console/tag/unused", otherConsole::removeUnusedTags); Dispatcher.delete("/console/tag/unused", otherConsole::removeUnusedTags);
final UserConsole userConsole = beanManager.getReference(UserConsole.class); final UserConsole userConsole = beanManager.getReference(UserConsole.class);
DispatcherServlet.put("/console/user/", userConsole::updateUser); Dispatcher.put("/console/user/", userConsole::updateUser);
DispatcherServlet.delete("/console/user/{id}", userConsole::removeUser); Dispatcher.delete("/console/user/{id}", userConsole::removeUser);
DispatcherServlet.get("/console/users/{page}/{pageSize}/{windowSize}", userConsole::getUsers); Dispatcher.get("/console/users/{page}/{pageSize}/{windowSize}", userConsole::getUsers);
DispatcherServlet.get("/console/user/{id}", userConsole::getUser); Dispatcher.get("/console/user/{id}", userConsole::getUser);
DispatcherServlet.get("/console/changeRole/{id}", userConsole::changeUserRole); Dispatcher.get("/console/changeRole/{id}", userConsole::changeUserRole);
DispatcherServlet.mapping(); Dispatcher.mapping();
}
/**
* Private constructor.
*/
private Server() {
} }
} }
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo;
import org.apache.commons.cli.*;
import org.b3log.latke.Latkes;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.util.Strings;
import org.b3log.solo.util.Markdowns;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Slf4jLog;
import org.eclipse.jetty.webapp.WebAppContext;
import java.io.File;
/**
* Solo with embedded Jetty, <a href="https://github.com/b3log/solo/issues/12037">standalone mode</a>.
* <ul>
* <li>Windows: java -cp "WEB-INF/lib/*;WEB-INF/classes" org.b3log.solo.Starter</li>
* <li>Unix-like: java -cp "WEB-INF/lib/*:WEB-INF/classes" org.b3log.solo.Starter</li>
* </ul>
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.1.2, Sep 23, 2019
* @since 1.2.0
*/
public final class Starter {
static {
try {
Log.setLog(new Slf4jLog());
} catch (final Exception e) {
e.printStackTrace();
}
}
/**
* Main.
*
* @param args the specified arguments
* @throws java.lang.Exception if start failed
*/
public static void main(final String[] args) throws Exception {
final Logger logger = Logger.getLogger(Starter.class);
final Options options = new Options();
final Option listenPortOpt = Option.builder("lp").longOpt("listen_port").argName("LISTEN_PORT").
hasArg().desc("listen port, default is 8080").build();
options.addOption(listenPortOpt);
final Option serverSchemeOpt = Option.builder("ss").longOpt("server_scheme").argName("SERVER_SCHEME").
hasArg().desc("browser visit protocol, default is http").build();
options.addOption(serverSchemeOpt);
final Option serverHostOpt = Option.builder("sh").longOpt("server_host").argName("SERVER_HOST").
hasArg().desc("browser visit domain name, default is localhost").build();
options.addOption(serverHostOpt);
final Option serverPortOpt = Option.builder("sp").longOpt("server_port").argName("SERVER_PORT").
hasArg().desc("browser visit port, default is 8080").build();
options.addOption(serverPortOpt);
final Option staticServerSchemeOpt = Option.builder("sss").longOpt("static_server_scheme").argName("STATIC_SERVER_SCHEME").
hasArg().desc("browser visit static resource protocol, default is http").build();
options.addOption(staticServerSchemeOpt);
final Option staticServerHostOpt = Option.builder("ssh").longOpt("static_server_host").argName("STATIC_SERVER_HOST").
hasArg().desc("browser visit static resource domain name, default is localhost").build();
options.addOption(staticServerHostOpt);
final Option staticServerPortOpt = Option.builder("ssp").longOpt("static_server_port").argName("STATIC_SERVER_PORT").
hasArg().desc("browser visit static resource port, default is 8080").build();
options.addOption(staticServerPortOpt);
final Option runtimeModeOpt = Option.builder("rm").longOpt("runtime_mode").argName("RUNTIME_MODE").
hasArg().desc("runtime mode (DEVELOPMENT/PRODUCTION), default is DEVELOPMENT").build();
options.addOption(runtimeModeOpt);
final Option luteHttpOpt = Option.builder("lute").longOpt("lute_http").argName("LUTE_HTTP").
hasArg().desc("lute http URL, default is http://localhost:8249, see https://github.com/b3log/lute-http for more details").build();
options.addOption(luteHttpOpt);
options.addOption("h", "help", false, "print help for the command");
final HelpFormatter helpFormatter = new HelpFormatter();
helpFormatter.setWidth(120);
final CommandLineParser commandLineParser = new DefaultParser();
CommandLine commandLine;
final boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows");
final String cmdSyntax = isWindows ? "java -cp \"WEB-INF/lib/*;WEB-INF/classes\" org.b3log.solo.Starter"
: "java -cp \"WEB-INF/lib/*:WEB-INF/classes\" org.b3log.solo.Starter";
final String header = "\nSolo 是一款小而美的博客系统,专为程序员设计。\n\n";
final String footer = "\n提需求或报告缺陷请到项目网站: https://github.com/b3log/solo\n\n";
try {
commandLine = commandLineParser.parse(options, args);
} catch (final ParseException e) {
helpFormatter.printHelp(cmdSyntax, header, options, footer, true);
return;
}
if (commandLine.hasOption("h")) {
helpFormatter.printHelp(cmdSyntax, header, options, footer, true);
return;
}
String portArg = commandLine.getOptionValue("listen_port");
if (!Strings.isNumeric(portArg)) {
portArg = "8080";
}
try {
Latkes.init();
} catch (final Exception e) {
logger.log(Level.ERROR, "Latke init failed, please configure latke.props or run with args, visit https://hacpai.com/article/1492881378588 for more details");
System.exit(-1);
}
String serverScheme = commandLine.getOptionValue("server_scheme");
if (null != serverScheme) {
Latkes.setLatkeProperty("serverScheme", serverScheme);
}
String serverHost = commandLine.getOptionValue("server_host");
if (null != serverHost) {
Latkes.setLatkeProperty("serverHost", serverHost);
}
String serverPort = commandLine.getOptionValue("server_port");
if (null != serverPort) {
Latkes.setLatkeProperty("serverPort", serverPort);
}
String staticServerScheme = commandLine.getOptionValue("static_server_scheme");
if (null != staticServerScheme) {
Latkes.setLatkeProperty("staticServerScheme", staticServerScheme);
}
String staticServerHost = commandLine.getOptionValue("static_server_host");
if (null != staticServerHost) {
Latkes.setLatkeProperty("staticServerHost", staticServerHost);
}
String staticServerPort = commandLine.getOptionValue("static_server_port");
if (null != staticServerPort) {
Latkes.setLatkeProperty("staticServerPort", staticServerPort);
}
String runtimeMode = commandLine.getOptionValue("runtime_mode");
if (null != runtimeMode) {
Latkes.setRuntimeMode(Latkes.RuntimeMode.valueOf(runtimeMode));
}
String luteHttp = commandLine.getOptionValue("lute");
if (null != luteHttp) {
Markdowns.LUTE_ENGINE_URL = luteHttp;
Markdowns.LUTE_AVAILABLE = true;
}
String webappDirLocation = "src/main/webapp/"; // POM structure in dev env
final File file = new File(webappDirLocation);
if (!file.exists()) {
webappDirLocation = "."; // production environment
}
final int port = Integer.valueOf(portArg);
final Server server = new Server(port);
final WebAppContext root = new WebAppContext();
root.setParentLoaderPriority(true); // Use parent class loader
root.setContextPath("/");
root.setDescriptor(webappDirLocation + "/WEB-INF/web.xml");
root.setResourceBase(webappDirLocation);
server.setHandler(root);
try {
server.start();
} catch (final Exception e) {
logger.log(Level.ERROR, "Server start failed", e);
System.exit(-1);
}
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
server.stop();
} catch (final Exception e) {
logger.log(Level.ERROR, "Server stop failed", e);
System.exit(-1);
}
}));
server.join();
}
/**
* Private constructor.
*/
private Starter() {
}
}
...@@ -30,7 +30,7 @@ import org.b3log.latke.logging.Level; ...@@ -30,7 +30,7 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.Server;
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.model.Option;
...@@ -117,7 +117,7 @@ public class B3ArticleSender extends AbstractEventListener<JSONObject> { ...@@ -117,7 +117,7 @@ public class B3ArticleSender extends AbstractEventListener<JSONObject> {
put("title", preference.getString(Option.ID_C_BLOG_TITLE)). put("title", preference.getString(Option.ID_C_BLOG_TITLE)).
put("host", Latkes.getServePath()). put("host", Latkes.getServePath()).
put("name", "Solo"). put("name", "Solo").
put("ver", SoloServletListener.VERSION). put("ver", Server.VERSION).
put("userName", author.optString(User.USER_NAME)). put("userName", author.optString(User.USER_NAME)).
put("userB3Key", author.optString(UserExt.USER_B3_KEY)); put("userB3Key", author.optString(UserExt.USER_B3_KEY));
final JSONObject requestJSONObject = new JSONObject(). final JSONObject requestJSONObject = new JSONObject().
......
...@@ -28,7 +28,7 @@ import org.b3log.latke.logging.Level; ...@@ -28,7 +28,7 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.Server;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Comment; import org.b3log.solo.model.Comment;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
...@@ -108,7 +108,7 @@ public class B3CommentSender extends AbstractEventListener<JSONObject> { ...@@ -108,7 +108,7 @@ public class B3CommentSender extends AbstractEventListener<JSONObject> {
put("title", preference.getString(Option.ID_C_BLOG_TITLE)). put("title", preference.getString(Option.ID_C_BLOG_TITLE)).
put("host", Latkes.getServePath()). put("host", Latkes.getServePath()).
put("name", "Solo"). put("name", "Solo").
put("ver", SoloServletListener.VERSION). put("ver", Server.VERSION).
put("userName", articleAuthor.optString(User.USER_NAME)). put("userName", articleAuthor.optString(User.USER_NAME)).
put("userB3Key", articleAuthor.optString(UserExt.USER_B3_KEY)); put("userB3Key", articleAuthor.optString(UserExt.USER_B3_KEY));
final JSONObject requestJSONObject = new JSONObject(). final JSONObject requestJSONObject = new JSONObject().
......
...@@ -21,7 +21,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -21,7 +21,7 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.plugin.NotInteractivePlugin; import org.b3log.latke.plugin.NotInteractivePlugin;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.json.JSONObject; import org.json.JSONObject;
......
...@@ -23,6 +23,7 @@ import org.b3log.latke.Keys; ...@@ -23,6 +23,7 @@ import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.http.Request;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
...@@ -30,15 +31,14 @@ import org.b3log.latke.model.Pagination; ...@@ -30,15 +31,14 @@ import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.servlet.renderer.TextHtmlRenderer; import org.b3log.latke.http.renderer.TextHtmlRenderer;
import org.b3log.latke.util.*; import org.b3log.latke.util.*;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.processor.console.ConsoleRenderer; import org.b3log.solo.processor.console.ConsoleRenderer;
...@@ -187,14 +187,14 @@ public class ArticleProcessor { ...@@ -187,14 +187,14 @@ public class ArticleProcessor {
public void showArticlePwdForm(final RequestContext context) { public void showArticlePwdForm(final RequestContext context) {
final String articleId = context.param("articleId"); final String articleId = context.param("articleId");
if (StringUtils.isBlank(articleId)) { if (StringUtils.isBlank(articleId)) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
final JSONObject article = articleQueryService.getArticleById(articleId); final JSONObject article = articleQueryService.getArticleById(articleId);
if (null == article) { if (null == article) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -216,7 +216,7 @@ public class ArticleProcessor { ...@@ -216,7 +216,7 @@ public class ArticleProcessor {
final JSONObject preference = optionQueryService.getPreference(); final JSONObject preference = optionQueryService.getPreference();
dataModel.put(Option.ID_C_BLOG_TITLE, preference.getString(Option.ID_C_BLOG_TITLE)); dataModel.put(Option.ID_C_BLOG_TITLE, preference.getString(Option.ID_C_BLOG_TITLE));
dataModel.put(Common.VERSION, SoloServletListener.VERSION); dataModel.put(Common.VERSION, Server.VERSION);
dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion()); dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion());
dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
...@@ -234,7 +234,7 @@ public class ArticleProcessor { ...@@ -234,7 +234,7 @@ public class ArticleProcessor {
@RequestProcessing(value = "/console/article-pwd", method = HttpMethod.POST) @RequestProcessing(value = "/console/article-pwd", method = HttpMethod.POST)
public void onArticlePwdForm(final RequestContext context) { public void onArticlePwdForm(final RequestContext context) {
try { try {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String articleId = context.param("articleId"); final String articleId = context.param("articleId");
final String pwdTyped = context.param("pwdTyped"); final String pwdTyped = context.param("pwdTyped");
...@@ -261,7 +261,7 @@ public class ArticleProcessor { ...@@ -261,7 +261,7 @@ public class ArticleProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Processes article view password form submits failed", e); LOGGER.log(Level.ERROR, "Processes article view password form submits failed", e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
...@@ -320,18 +320,18 @@ public class ArticleProcessor { ...@@ -320,18 +320,18 @@ public class ArticleProcessor {
return; return;
} }
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
Stopwatchs.start("Get Relevant Articles"); Stopwatchs.start("Get Relevant Articles");
final String articleId = context.pathVar("id"); final String articleId = context.pathVar("id");
if (StringUtils.isBlank(articleId)) { if (StringUtils.isBlank(articleId)) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
final JSONObject article = articleQueryService.getArticleById(articleId); final JSONObject article = articleQueryService.getArticleById(articleId);
if (null == article) { if (null == article) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -353,7 +353,7 @@ public class ArticleProcessor { ...@@ -353,7 +353,7 @@ public class ArticleProcessor {
*/ */
@RequestProcessing(value = "/get-article-content", method = HttpMethod.GET) @RequestProcessing(value = "/get-article-content", method = HttpMethod.GET)
public void getArticleContent(final RequestContext context) { public void getArticleContent(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String articleId = context.param("id"); final String articleId = context.param("id");
if (StringUtils.isBlank(articleId)) { if (StringUtils.isBlank(articleId)) {
return; return;
...@@ -385,7 +385,7 @@ public class ArticleProcessor { ...@@ -385,7 +385,7 @@ public class ArticleProcessor {
@RequestProcessing(value = "/articles", method = HttpMethod.GET) @RequestProcessing(value = "/articles", method = HttpMethod.GET)
public void getArticlesByPage(final RequestContext context) { public void getArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(request);
Stopwatchs.start("Get Articles Paged [pageNum=" + currentPageNum + ']'); Stopwatchs.start("Get Articles Paged [pageNum=" + currentPageNum + ']');
...@@ -428,7 +428,7 @@ public class ArticleProcessor { ...@@ -428,7 +428,7 @@ public class ArticleProcessor {
public void getTagArticlesByPage(final RequestContext context) { public void getTagArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String tagTitle = context.pathVar("tagTitle"); final String tagTitle = context.pathVar("tagTitle");
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(request);
Stopwatchs.start("Get Tag-Articles Paged [tagTitle=" + tagTitle + ", pageNum=" + currentPageNum + ']'); Stopwatchs.start("Get Tag-Articles Paged [tagTitle=" + tagTitle + ", pageNum=" + currentPageNum + ']');
...@@ -481,7 +481,7 @@ public class ArticleProcessor { ...@@ -481,7 +481,7 @@ public class ArticleProcessor {
public void getArchivesArticlesByPage(final RequestContext context) { public void getArchivesArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String archiveDateString = context.pathVar("yyyy") + "/" + context.pathVar("MM"); final String archiveDateString = context.pathVar("yyyy") + "/" + context.pathVar("MM");
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(request);
...@@ -533,7 +533,7 @@ public class ArticleProcessor { ...@@ -533,7 +533,7 @@ public class ArticleProcessor {
public void getAuthorsArticlesByPage(final RequestContext context) { public void getAuthorsArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String authorId = context.pathVar("author"); final String authorId = context.pathVar("author");
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(request);
...@@ -546,7 +546,7 @@ public class ArticleProcessor { ...@@ -546,7 +546,7 @@ public class ArticleProcessor {
final JSONObject authorRet = userQueryService.getUser(authorId); final JSONObject authorRet = userQueryService.getUser(authorId);
if (null == authorRet) { if (null == authorRet) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -581,7 +581,7 @@ public class ArticleProcessor { ...@@ -581,7 +581,7 @@ public class ArticleProcessor {
*/ */
@RequestProcessing(value = "/authors/{author}", method = HttpMethod.GET) @RequestProcessing(value = "/authors/{author}", method = HttpMethod.GET)
public void showAuthorArticles(final RequestContext context) { public void showAuthorArticles(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "author-articles.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "author-articles.ftl");
try { try {
...@@ -591,7 +591,7 @@ public class ArticleProcessor { ...@@ -591,7 +591,7 @@ public class ArticleProcessor {
final JSONObject preference = optionQueryService.getPreference(); final JSONObject preference = optionQueryService.getPreference();
if (null == preference) { if (null == preference) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -601,14 +601,14 @@ public class ArticleProcessor { ...@@ -601,14 +601,14 @@ public class ArticleProcessor {
final JSONObject result = userQueryService.getUser(authorId); final JSONObject result = userQueryService.getUser(authorId);
if (null == result) { if (null == result) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
final JSONObject articlesResult = articleQueryService.getArticlesByAuthorId(authorId, currentPageNum, pageSize); final JSONObject articlesResult = articleQueryService.getArticlesByAuthorId(authorId, currentPageNum, pageSize);
if (null == articlesResult) { if (null == articlesResult) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -621,7 +621,7 @@ public class ArticleProcessor { ...@@ -621,7 +621,7 @@ public class ArticleProcessor {
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
final JSONObject author = result.getJSONObject(User.USER); final JSONObject author = result.getJSONObject(User.USER);
prepareShowAuthorArticles(pageNums, dataModel, pageCount, currentPageNum, articles, author); prepareShowAuthorArticles(pageNums, dataModel, pageCount, currentPageNum, articles, author);
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
dataModelService.fillCommon(context, dataModel, preference); dataModelService.fillCommon(context, dataModel, preference);
dataModelService.fillFaviconURL(dataModel, preference); dataModelService.fillFaviconURL(dataModel, preference);
dataModelService.fillUsite(dataModel); dataModelService.fillUsite(dataModel);
...@@ -631,7 +631,7 @@ public class ArticleProcessor { ...@@ -631,7 +631,7 @@ public class ArticleProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
...@@ -642,7 +642,7 @@ public class ArticleProcessor { ...@@ -642,7 +642,7 @@ public class ArticleProcessor {
*/ */
@RequestProcessing(value = "/archives/{yyyy}/{MM}", method = HttpMethod.GET) @RequestProcessing(value = "/archives/{yyyy}/{MM}", method = HttpMethod.GET)
public void showArchiveArticles(final RequestContext context) { public void showArchiveArticles(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "archive-articles.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "archive-articles.ftl");
try { try {
...@@ -652,7 +652,7 @@ public class ArticleProcessor { ...@@ -652,7 +652,7 @@ public class ArticleProcessor {
final JSONObject result = archiveDateQueryService.getByArchiveDateString(archiveDateString); final JSONObject result = archiveDateQueryService.getByArchiveDateString(archiveDateString);
if (null == result) { if (null == result) {
LOGGER.log(Level.DEBUG, "Can not find articles for the specified archive date[string={0}]", archiveDateString); LOGGER.log(Level.DEBUG, "Can not find articles for the specified archive date[string={0}]", archiveDateString);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -668,7 +668,7 @@ public class ArticleProcessor { ...@@ -668,7 +668,7 @@ public class ArticleProcessor {
final List<JSONObject> articles = articleQueryService.getArticlesByArchiveDate(archiveDateId, currentPageNum, pageSize); final List<JSONObject> articles = articleQueryService.getArticlesByArchiveDate(archiveDateId, currentPageNum, pageSize);
if (articles.isEmpty()) { if (articles.isEmpty()) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -678,7 +678,7 @@ public class ArticleProcessor { ...@@ -678,7 +678,7 @@ public class ArticleProcessor {
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), (String) context.attr(Keys.TEMAPLTE_DIR_NAME), dataModel); Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), (String) context.attr(Keys.TEMAPLTE_DIR_NAME), dataModel);
prepareShowArchiveArticles(preference, dataModel, articles, currentPageNum, pageCount, archiveDateString, archiveDate); prepareShowArchiveArticles(preference, dataModel, articles, currentPageNum, pageCount, archiveDateString, archiveDate);
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
dataModelService.fillCommon(context, dataModel, preference); dataModelService.fillCommon(context, dataModel, preference);
dataModelService.fillFaviconURL(dataModel, preference); dataModelService.fillFaviconURL(dataModel, preference);
dataModelService.fillUsite(dataModel); dataModelService.fillUsite(dataModel);
...@@ -686,7 +686,7 @@ public class ArticleProcessor { ...@@ -686,7 +686,7 @@ public class ArticleProcessor {
statisticMgmtService.incBlogViewCount(context, response); statisticMgmtService.incBlogViewCount(context, response);
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
...@@ -700,7 +700,7 @@ public class ArticleProcessor { ...@@ -700,7 +700,7 @@ public class ArticleProcessor {
// See PermalinkHandler#dispatchToArticleProcessor() // See PermalinkHandler#dispatchToArticleProcessor()
final JSONObject article = (JSONObject) context.attr(Article.ARTICLE); final JSONObject article = (JSONObject) context.attr(Article.ARTICLE);
if (null == article) { if (null == article) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -739,7 +739,7 @@ public class ArticleProcessor { ...@@ -739,7 +739,7 @@ public class ArticleProcessor {
prepareShowArticle(preference, dataModel, article); prepareShowArticle(preference, dataModel, article);
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
dataModelService.fillCommon(context, dataModel, preference); dataModelService.fillCommon(context, dataModel, preference);
dataModelService.fillFaviconURL(dataModel, preference); dataModelService.fillFaviconURL(dataModel, preference);
dataModelService.fillUsite(dataModel); dataModelService.fillUsite(dataModel);
...@@ -758,7 +758,7 @@ public class ArticleProcessor { ...@@ -758,7 +758,7 @@ public class ArticleProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
......
...@@ -25,10 +25,10 @@ import org.b3log.latke.logging.Logger; ...@@ -25,10 +25,10 @@ import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.repository.Transaction; import org.b3log.latke.repository.Transaction;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.util.Ids; import org.b3log.latke.util.Ids;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
......
...@@ -26,12 +26,11 @@ import org.b3log.latke.logging.Level; ...@@ -26,12 +26,11 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.service.*; import org.b3log.solo.service.*;
...@@ -153,7 +152,7 @@ public class BlogProcessor { ...@@ -153,7 +152,7 @@ public class BlogProcessor {
jsonObject.put("tagCount", tagQueryService.getTagCount()); jsonObject.put("tagCount", tagQueryService.getTagCount());
jsonObject.put("servePath", Latkes.getServePath()); jsonObject.put("servePath", Latkes.getServePath());
jsonObject.put("staticServePath", Latkes.getStaticServePath()); jsonObject.put("staticServePath", Latkes.getStaticServePath());
jsonObject.put("version", SoloServletListener.VERSION); jsonObject.put("version", Server.VERSION);
jsonObject.put("runtimeMode", Latkes.getRuntimeMode()); jsonObject.put("runtimeMode", Latkes.getRuntimeMode());
jsonObject.put("runtimeDatabase", Latkes.getRuntimeDatabase()); jsonObject.put("runtimeDatabase", Latkes.getRuntimeDatabase());
jsonObject.put("locale", Latkes.getLocale()); jsonObject.put("locale", Latkes.getLocale());
......
...@@ -18,18 +18,19 @@ ...@@ -18,18 +18,19 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.JsonRenderer;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.Stopwatchs; import org.b3log.latke.util.Stopwatchs;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
...@@ -42,8 +43,6 @@ import org.b3log.solo.util.Skins; ...@@ -42,8 +43,6 @@ import org.b3log.solo.util.Skins;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -113,15 +112,14 @@ public class CategoryProcessor { ...@@ -113,15 +112,14 @@ public class CategoryProcessor {
public void getCategoryArticlesByPage(final RequestContext context) { public void getCategoryArticlesByPage(final RequestContext context) {
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
final HttpServletRequest request = context.getRequest();
final String categoryURI = context.pathVar("categoryURI"); final String categoryURI = context.pathVar("categoryURI");
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(context);
Stopwatchs.start("Get Category-Articles Paged [categoryURI=" + categoryURI + ", pageNum=" + currentPageNum + ']'); Stopwatchs.start("Get Category-Articles Paged [categoryURI=" + categoryURI + ", pageNum=" + currentPageNum + ']');
try { try {
final JSONObject category = categoryQueryService.getByURI(categoryURI); final JSONObject category = categoryQueryService.getByURI(categoryURI);
if (null == category) { if (null == category) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -163,17 +161,16 @@ public class CategoryProcessor { ...@@ -163,17 +161,16 @@ public class CategoryProcessor {
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "category-articles.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "category-articles.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
final HttpServletRequest request = context.getRequest(); final Response response = context.getResponse();
final HttpServletResponse response = context.getResponse();
try { try {
String categoryURI = context.pathVar("categoryURI"); String categoryURI = context.pathVar("categoryURI");
categoryURI = URLs.encode(categoryURI); categoryURI = URLs.encode(categoryURI);
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(context);
LOGGER.log(Level.DEBUG, "Category [URI={0}, currentPageNum={1}]", categoryURI, currentPageNum); LOGGER.log(Level.DEBUG, "Category [URI={0}, currentPageNum={1}]", categoryURI, currentPageNum);
final JSONObject category = categoryQueryService.getByURI(categoryURI); final JSONObject category = categoryQueryService.getByURI(categoryURI);
if (null == category) { if (null == category) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -189,7 +186,7 @@ public class CategoryProcessor { ...@@ -189,7 +186,7 @@ public class CategoryProcessor {
final int pageCount = result.optJSONObject(Pagination.PAGINATION).optInt(Pagination.PAGINATION_PAGE_COUNT); final int pageCount = result.optJSONObject(Pagination.PAGINATION).optInt(Pagination.PAGINATION_PAGE_COUNT);
if (0 == pageCount) { if (0 == pageCount) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -209,7 +206,7 @@ public class CategoryProcessor { ...@@ -209,7 +206,7 @@ public class CategoryProcessor {
} catch (final ServiceException | JSONException e) { } catch (final ServiceException | JSONException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
......
...@@ -24,11 +24,11 @@ import org.b3log.latke.logging.Level; ...@@ -24,11 +24,11 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Comment; import org.b3log.solo.model.Comment;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
...@@ -190,7 +190,7 @@ public class CommentProcessor { ...@@ -190,7 +190,7 @@ public class CommentProcessor {
* Fills commenter info if logged in. * Fills commenter info if logged in.
* *
* @param requestJSONObject the specified request json object * @param requestJSONObject the specified request json object
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
*/ */
private void fillCommenter(final JSONObject requestJSONObject, final RequestContext context) { private void fillCommenter(final JSONObject requestJSONObject, final RequestContext context) {
final JSONObject currentUser = Solos.getCurrentUser(context.getRequest(), context.getResponse()); final JSONObject currentUser = Solos.getCurrentUser(context.getRequest(), context.getResponse());
......
...@@ -23,11 +23,11 @@ import org.b3log.latke.ioc.Inject; ...@@ -23,11 +23,11 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.service.DataModelService; import org.b3log.solo.service.DataModelService;
...@@ -87,7 +87,7 @@ public class ErrorProcessor { ...@@ -87,7 +87,7 @@ public class ErrorProcessor {
*/ */
@RequestProcessing(value = "/error/{statusCode}", method = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE}) @RequestProcessing(value = "/error/{statusCode}", method = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE})
public void showErrorPage(final RequestContext context) { public void showErrorPage(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String statusCode = context.pathVar("statusCode"); final String statusCode = context.pathVar("statusCode");
if (StringUtils.equals("GET", context.method())) { if (StringUtils.equals("GET", context.method())) {
final String requestURI = context.requestURI(); final String requestURI = context.requestURI();
...@@ -109,7 +109,7 @@ public class ErrorProcessor { ...@@ -109,7 +109,7 @@ public class ErrorProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Shows error page failed", e); LOGGER.log(Level.ERROR, "Shows error page failed", e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
Solos.addGoogleNoIndex(context); Solos.addGoogleNoIndex(context);
......
...@@ -20,20 +20,20 @@ package org.b3log.solo.processor; ...@@ -20,20 +20,20 @@ package org.b3log.solo.processor;
import com.vdurmont.emoji.EmojiParser; import com.vdurmont.emoji.EmojiParser;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.AtomRenderer;
import org.b3log.latke.http.renderer.RssRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.repository.*; import org.b3log.latke.repository.*;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AtomRenderer;
import org.b3log.latke.servlet.renderer.RssRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.Server;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.atom.Category; import org.b3log.solo.model.atom.Category;
...@@ -49,7 +49,6 @@ import org.json.JSONArray; ...@@ -49,7 +49,6 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -130,7 +129,7 @@ public class FeedProcessor { ...@@ -130,7 +129,7 @@ public class FeedProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Get blog article feed error", e); LOGGER.log(Level.ERROR, "Get blog article feed error", e);
context.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); context.sendError(500);
} }
} }
...@@ -177,7 +176,7 @@ public class FeedProcessor { ...@@ -177,7 +176,7 @@ public class FeedProcessor {
try { try {
final JSONObject preference = optionQueryService.getPreference(); final JSONObject preference = optionQueryService.getPreference();
if (null == preference) { if (null == preference) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -190,7 +189,7 @@ public class FeedProcessor { ...@@ -190,7 +189,7 @@ public class FeedProcessor {
channel.setLastBuildDate(new Date()); channel.setLastBuildDate(new Date());
channel.setLink(Latkes.getServePath()); channel.setLink(Latkes.getServePath());
channel.setAtomLink(Latkes.getServePath() + "/rss.xml"); channel.setAtomLink(Latkes.getServePath() + "/rss.xml");
channel.setGenerator("Solo, v" + SoloServletListener.VERSION + ", https://solo.b3log.org"); channel.setGenerator("Solo, v" + Server.VERSION + ", https://solo.b3log.org");
final String localeString = preference.getString(Option.ID_C_LOCALE_STRING); final String localeString = preference.getString(Option.ID_C_LOCALE_STRING);
final String country = Locales.getCountry(localeString).toLowerCase(); final String country = Locales.getCountry(localeString).toLowerCase();
final String language = Locales.getLanguage(localeString).toLowerCase(); final String language = Locales.getLanguage(localeString).toLowerCase();
...@@ -215,7 +214,7 @@ public class FeedProcessor { ...@@ -215,7 +214,7 @@ public class FeedProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Get blog article rss error", e); LOGGER.log(Level.ERROR, "Get blog article rss error", e);
context.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); context.sendError(500);
} }
} }
......
...@@ -20,21 +20,19 @@ package org.b3log.solo.processor; ...@@ -20,21 +20,19 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.*;
import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.service.DataModelService; import org.b3log.solo.service.DataModelService;
...@@ -45,9 +43,6 @@ import org.b3log.solo.util.Skins; ...@@ -45,9 +43,6 @@ import org.b3log.solo.util.Skins;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar; import java.util.Calendar;
import java.util.Map; import java.util.Map;
...@@ -106,8 +101,8 @@ public class IndexProcessor { ...@@ -106,8 +101,8 @@ public class IndexProcessor {
*/ */
@RequestProcessing(value = {"", "/"}, method = HttpMethod.GET) @RequestProcessing(value = {"", "/"}, method = HttpMethod.GET)
public void showIndex(final RequestContext context) { public void showIndex(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "index.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "index.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
try { try {
...@@ -154,7 +149,7 @@ public class IndexProcessor { ...@@ -154,7 +149,7 @@ public class IndexProcessor {
} catch (final ServiceException e) { } catch (final ServiceException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
...@@ -178,10 +173,10 @@ public class IndexProcessor { ...@@ -178,10 +173,10 @@ public class IndexProcessor {
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/start.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/start.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final Map<String, String> langs = langPropsService.getAll(Locales.getLocale(request)); final Map<String, String> langs = langPropsService.getAll(Locales.getLocale(request));
dataModel.putAll(langs); dataModel.putAll(langs);
dataModel.put(Common.VERSION, SoloServletListener.VERSION); dataModel.put(Common.VERSION, Server.VERSION);
dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion()); dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion());
dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
dataModel.put(Common.REFERER, URLs.encode(referer)); dataModel.put(Common.REFERER, URLs.encode(referer));
...@@ -199,7 +194,7 @@ public class IndexProcessor { ...@@ -199,7 +194,7 @@ public class IndexProcessor {
*/ */
@RequestProcessing(value = "/logout", method = HttpMethod.GET) @RequestProcessing(value = "/logout", method = HttpMethod.GET)
public void logout(final RequestContext context) { public void logout(final RequestContext context) {
final HttpServletRequest httpServletRequest = context.getRequest(); final Request httpServletRequest = context.getRequest();
Solos.logout(httpServletRequest, context.getResponse()); Solos.logout(httpServletRequest, context.getResponse());
...@@ -214,7 +209,7 @@ public class IndexProcessor { ...@@ -214,7 +209,7 @@ public class IndexProcessor {
*/ */
@RequestProcessing(value = "/kill-browser", method = HttpMethod.GET) @RequestProcessing(value = "/kill-browser", method = HttpMethod.GET)
public void showKillBrowser(final RequestContext context) { public void showKillBrowser(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/kill-browser.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/kill-browser.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
try { try {
...@@ -230,7 +225,7 @@ public class IndexProcessor { ...@@ -230,7 +225,7 @@ public class IndexProcessor {
} catch (final ServiceException e) { } catch (final ServiceException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
......
...@@ -20,20 +20,18 @@ package org.b3log.solo.processor; ...@@ -20,20 +20,18 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.handler.Handler;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.handler.Handler;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import javax.servlet.http.HttpServletResponse;
/** /**
* Checks initialization handler. * Checks initialization handler.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Mar 1, 2019 * @version 1.0.0.1, Nov 3, 2019
* @since 3.2.0 * @since 3.2.0
*/ */
public class InitCheckHandler implements Handler { public class InitCheckHandler implements Handler {
...@@ -56,7 +54,7 @@ public class InitCheckHandler implements Handler { ...@@ -56,7 +54,7 @@ public class InitCheckHandler implements Handler {
// 禁止直接获取 robots.txt https://github.com/b3log/solo/issues/12543 // 禁止直接获取 robots.txt https://github.com/b3log/solo/issues/12543
if (requestURI.startsWith("/robots.txt") && !isSpiderBot) { if (requestURI.startsWith("/robots.txt") && !isSpiderBot) {
context.sendError(HttpServletResponse.SC_FORBIDDEN); context.sendError(403);
return; return;
} }
......
...@@ -19,18 +19,16 @@ package org.b3log.solo.processor; ...@@ -19,18 +19,16 @@ package org.b3log.solo.processor;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.math.RandomUtils; import org.apache.commons.lang.math.RandomUtils;
import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer;
import org.b3log.solo.SoloServletListener;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletContext;
import java.io.InputStream; import java.io.InputStream;
/** /**
...@@ -60,18 +58,17 @@ public class KanBanNiangProcessor { ...@@ -60,18 +58,17 @@ public class KanBanNiangProcessor {
try { try {
final String assets = "/plugins/kanbanniang/assets"; final String assets = "/plugins/kanbanniang/assets";
String model; String model;
final ServletContext servletContext = SoloServletListener.getServletContext(); try (final InputStream inputStream = KanBanNiangProcessor.class.getResourceAsStream(assets + "/model-list.json")) {
try (final InputStream inputStream = servletContext.getResourceAsStream(assets + "/model-list.json")) {
final JSONArray models = new JSONArray(IOUtils.toString(inputStream, "UTF-8")); final JSONArray models = new JSONArray(IOUtils.toString(inputStream, "UTF-8"));
final int i = RandomUtils.nextInt(models.length()); final int i = RandomUtils.nextInt(models.length());
model = models.getString(i); model = models.getString(i);
} }
try (final InputStream modelResource = servletContext.getResourceAsStream(assets + "/model/" + model + "/index.json")) { try (final InputStream modelResource = KanBanNiangProcessor.class.getResourceAsStream(assets + "/model/" + model + "/index.json")) {
final JSONObject index = new JSONObject(IOUtils.toString(modelResource, "UTF-8")); final JSONObject index = new JSONObject(IOUtils.toString(modelResource, "UTF-8"));
final JSONArray textures = index.optJSONArray("textures"); final JSONArray textures = index.optJSONArray("textures");
if (textures.isEmpty()) { if (textures.isEmpty()) {
try (final InputStream texturesRes = servletContext.getResourceAsStream(assets + "/model/" + model + "/textures.json")) { try (final InputStream texturesRes = KanBanNiangProcessor.class.getResourceAsStream(assets + "/model/" + model + "/textures.json")) {
final JSONArray texturesArray = new JSONArray(IOUtils.toString(texturesRes, "UTF-8")); final JSONArray texturesArray = new JSONArray(IOUtils.toString(texturesRes, "UTF-8"));
final Object element = texturesArray.opt(RandomUtils.nextInt(texturesArray.length())); final Object element = texturesArray.opt(RandomUtils.nextInt(texturesArray.length()));
if (element instanceof JSONArray) { if (element instanceof JSONArray) {
......
...@@ -29,10 +29,10 @@ import org.b3log.latke.logging.Logger; ...@@ -29,10 +29,10 @@ import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.solo.model.UserExt; import org.b3log.solo.model.UserExt;
...@@ -118,7 +118,7 @@ public class OAuthProcessor { ...@@ -118,7 +118,7 @@ public class OAuthProcessor {
if (HttpServletResponse.SC_OK != res.statusCode()) { if (HttpServletResponse.SC_OK != res.statusCode()) {
LOGGER.log(Level.ERROR, "Gets oauth client id failed: " + res.toString()); LOGGER.log(Level.ERROR, "Gets oauth client id failed: " + res.toString());
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -170,8 +170,8 @@ public class OAuthProcessor { ...@@ -170,8 +170,8 @@ public class OAuthProcessor {
return; return;
} }
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final String openId = userInfo.optString("openId"); final String openId = userInfo.optString("openId");
final String userName = userInfo.optString(User.USER_NAME); final String userName = userInfo.optString(User.USER_NAME);
final String userAvatar = userInfo.optString(UserExt.USER_AVATAR); final String userAvatar = userInfo.optString(UserExt.USER_AVATAR);
...@@ -231,7 +231,7 @@ public class OAuthProcessor { ...@@ -231,7 +231,7 @@ public class OAuthProcessor {
user = userQueryService.getUserByName(userName); user = userQueryService.getUserByName(userName);
if (null == user) { if (null == user) {
LOGGER.log(Level.WARN, "Can't get user by name [" + userName + "]"); LOGGER.log(Level.WARN, "Can't get user by name [" + userName + "]");
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
......
...@@ -20,14 +20,13 @@ package org.b3log.solo.processor; ...@@ -20,14 +20,13 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.handler.Handler;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.servlet.DispatcherServlet;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.handler.Handler;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
...@@ -37,13 +36,11 @@ import org.b3log.solo.service.PermalinkQueryService; ...@@ -37,13 +36,11 @@ import org.b3log.solo.service.PermalinkQueryService;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
/** /**
* Article permalink handler. * Article permalink handler.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.2, May 18, 2019 * @version 1.0.0.3, Nov 3, 2019
* @since 3.2.0 * @since 3.2.0
*/ */
public class PermalinkHandler implements Handler { public class PermalinkHandler implements Handler {
...@@ -91,7 +88,7 @@ public class PermalinkHandler implements Handler { ...@@ -91,7 +88,7 @@ public class PermalinkHandler implements Handler {
} }
} catch (final RepositoryException e) { } catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Processes article permalink handler failed", e); LOGGER.log(Level.ERROR, "Processes article permalink handler failed", e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -103,7 +100,7 @@ public class PermalinkHandler implements Handler { ...@@ -103,7 +100,7 @@ public class PermalinkHandler implements Handler {
return; return;
} catch (final Exception e) { } catch (final Exception e) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -113,7 +110,7 @@ public class PermalinkHandler implements Handler { ...@@ -113,7 +110,7 @@ public class PermalinkHandler implements Handler {
final JSONObject preference = optionQueryService.getPreference(); final JSONObject preference = optionQueryService.getPreference();
final boolean allowVisitDraftViaPermalink = preference.getBoolean(Option.ID_C_ALLOW_VISIT_DRAFT_VIA_PERMALINK); final boolean allowVisitDraftViaPermalink = preference.getBoolean(Option.ID_C_ALLOW_VISIT_DRAFT_VIA_PERMALINK);
if (Article.ARTICLE_STATUS_C_PUBLISHED != article.optInt(Article.ARTICLE_STATUS) && !allowVisitDraftViaPermalink) { if (Article.ARTICLE_STATUS_C_PUBLISHED != article.optInt(Article.ARTICLE_STATUS) && !allowVisitDraftViaPermalink) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -127,7 +124,7 @@ public class PermalinkHandler implements Handler { ...@@ -127,7 +124,7 @@ public class PermalinkHandler implements Handler {
* *
* @param context the specified request context * @param context the specified request context
* @param article the specified article * @param article the specified article
* @see DispatcherServlet#result(RequestContext) * @see Dispatcher#rendTODO(RequestContext)
*/ */
private void dispatchToArticleProcessor(final RequestContext context, final JSONObject article) { private void dispatchToArticleProcessor(final RequestContext context, final JSONObject article) {
context.attr(Article.ARTICLE, article); context.attr(Article.ARTICLE, article);
......
...@@ -25,12 +25,12 @@ import org.b3log.latke.logging.Level; ...@@ -25,12 +25,12 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.TextXmlRenderer; import org.b3log.latke.http.renderer.TextXmlRenderer;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
...@@ -127,7 +127,7 @@ public class SearchProcessor { ...@@ -127,7 +127,7 @@ public class SearchProcessor {
*/ */
@RequestProcessing(value = "/search", method = HttpMethod.GET) @RequestProcessing(value = "/search", method = HttpMethod.GET)
public void search(final RequestContext context) { public void search(final RequestContext context) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/search.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "common-template/search.ftl");
final Map<String, String> langs = langPropsService.getAll(Latkes.getLocale()); final Map<String, String> langs = langPropsService.getAll(Latkes.getLocale());
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
......
...@@ -28,11 +28,11 @@ import org.b3log.latke.repository.FilterOperator; ...@@ -28,11 +28,11 @@ import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter; import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.SortDirection; import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.TextXmlRenderer; import org.b3log.latke.http.renderer.TextXmlRenderer;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.latke.util.XMLs; import org.b3log.latke.util.XMLs;
import org.b3log.solo.model.ArchiveDate; import org.b3log.solo.model.ArchiveDate;
......
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo.processor;
import eu.bitwalker.useragentutils.BrowserType;
import eu.bitwalker.useragentutils.UserAgent;
import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.handler.Handler;
import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Stopwatchs;
import org.b3log.solo.service.OptionQueryService;
import org.b3log.solo.service.StatisticMgmtService;
import org.b3log.solo.util.Skins;
import org.b3log.solo.util.Solos;
import org.json.JSONObject;
/**
* Skin handler.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 3, 2019
* @since 3.6.7
*/
public class SkinHandler implements Handler {
/**
* Logger.
*/
private static final Logger LOGGER = Logger.getLogger(SkinHandler.class);
@Override
public void handle(final RequestContext context) {
final Request request = context.getRequest();
Requests.log(request, Level.DEBUG, LOGGER);
fillBotAttrs(request);
if (!Solos.isBot(request)) {
final StatisticMgmtService statisticMgmtService = BeanManager.getInstance().getReference(StatisticMgmtService.class);
statisticMgmtService.onlineVisitorCount(request);
}
resolveSkinDir(request);
context.handle();
}
/**
* Resolve skin (template) for the specified HTTP servlet request.
* 前台皮肤切换 https://github.com/b3log/solo/issues/12060
*
* @param request the specified HTTP request
*/
private void resolveSkinDir(final Request request) {
String skin = Skins.getSkinDirNameFromCookie(request);
if (StringUtils.isBlank(skin)) {
final BeanManager beanManager = BeanManager.getInstance();
final OptionQueryService optionQueryService = beanManager.getReference(OptionQueryService.class);
final JSONObject skinOpt = optionQueryService.getSkin();
if (Solos.isMobile(request)) {
if (null != skinOpt) {
skin = skinOpt.optString(org.b3log.solo.model.Option.ID_C_MOBILE_SKIN_DIR_NAME);
} else {
skin = org.b3log.solo.model.Option.DefaultPreference.DEFAULT_MOBILE_SKIN_DIR_NAME;
}
} else {
if (null != skinOpt) {
skin = skinOpt.optString(org.b3log.solo.model.Option.ID_C_SKIN_DIR_NAME);
} else {
skin = org.b3log.solo.model.Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME;
}
}
}
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, skin);
}
private static void fillBotAttrs(final Request request) {
final String userAgentStr = request.getHeader("User-Agent");
final UserAgent userAgent = UserAgent.parseUserAgentString(userAgentStr);
BrowserType browserType = userAgent.getBrowser().getBrowserType();
if (StringUtils.containsIgnoreCase(userAgentStr, "mobile")
|| StringUtils.containsIgnoreCase(userAgentStr, "MQQBrowser")
|| StringUtils.containsIgnoreCase(userAgentStr, "iphone")
|| StringUtils.containsIgnoreCase(userAgentStr, "MicroMessenger")
|| StringUtils.containsIgnoreCase(userAgentStr, "CFNetwork")
|| StringUtils.containsIgnoreCase(userAgentStr, "Android")) {
browserType = BrowserType.MOBILE_BROWSER;
} else if (StringUtils.containsIgnoreCase(userAgentStr, "Iframely")
|| StringUtils.containsIgnoreCase(userAgentStr, "Google")
|| StringUtils.containsIgnoreCase(userAgentStr, "BUbiNG")
|| StringUtils.containsIgnoreCase(userAgentStr, "ltx71")
|| StringUtils.containsIgnoreCase(userAgentStr, "py")) {
browserType = BrowserType.ROBOT;
}
request.setAttribute(Keys.HttpRequest.IS_SEARCH_ENGINE_BOT, BrowserType.ROBOT == browserType);
request.setAttribute(Keys.HttpRequest.IS_MOBILE_BOT, BrowserType.MOBILE_BROWSER == browserType);
}
}
...@@ -21,11 +21,11 @@ import freemarker.template.Template; ...@@ -21,11 +21,11 @@ import freemarker.template.Template;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.Request;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import javax.servlet.http.HttpServletRequest;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.Map; import java.util.Map;
...@@ -77,7 +77,7 @@ public final class SkinRenderer extends AbstractFreeMarkerRenderer { ...@@ -77,7 +77,7 @@ public final class SkinRenderer extends AbstractFreeMarkerRenderer {
* @throws Exception exception * @throws Exception exception
*/ */
@Override @Override
protected String genHTML(final HttpServletRequest request, final Map<String, Object> dataModel, final Template template) protected String genHTML(final Request request, final Map<String, Object> dataModel, final Template template)
throws Exception { throws Exception {
final boolean isPJAX = isPJAX(context); final boolean isPJAX = isPJAX(context);
dataModel.put("pjax", isPJAX); dataModel.put("pjax", isPJAX);
......
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo.processor;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.handler.Handler;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.util.Stopwatchs;
import org.b3log.latke.util.Strings;
/**
* Stopwatch end handler.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 3, 2019
* @since 3.6.7
*/
public class StopwatchEndHandler implements Handler {
/**
* Logger.
*/
private static final Logger LOGGER = Logger.getLogger(StopwatchEndHandler.class);
@Override
public void handle(final RequestContext context) {
Stopwatchs.end();
LOGGER.log(Level.DEBUG, "Stopwatch: {0}{1}", Strings.LINE_SEPARATOR, Stopwatchs.getTimingStat());
Stopwatchs.release();
context.handle();
}
}
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo.processor;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.handler.Handler;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.util.Stopwatchs;
/**
* Stopwatch start handler.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 3, 2019
* @since 3.6.7
*/
public class StopwatchStartHandler implements Handler {
@Override
public void handle(final RequestContext context) {
Stopwatchs.start("Request Initialized [requestURI=" + context.requestURI() + "]");
context.handle();
}
}
...@@ -18,16 +18,17 @@ ...@@ -18,16 +18,17 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
...@@ -38,8 +39,6 @@ import org.b3log.solo.service.*; ...@@ -38,8 +39,6 @@ import org.b3log.solo.service.*;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -109,16 +108,14 @@ public class TagProcessor { ...@@ -109,16 +108,14 @@ public class TagProcessor {
public void showTagArticles(final RequestContext context) { public void showTagArticles(final RequestContext context) {
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "tag-articles.ftl"); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, "tag-articles.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
final HttpServletRequest request = context.getRequest();
final HttpServletResponse response = context.getResponse();
try { try {
String tagTitle = context.pathVar("tagTitle"); String tagTitle = context.pathVar("tagTitle");
final int currentPageNum = Paginator.getPage(request); final int currentPageNum = Paginator.getPage(context);
LOGGER.log(Level.DEBUG, "Tag [title={0}, currentPageNum={1}]", tagTitle, currentPageNum); LOGGER.log(Level.DEBUG, "Tag [title={0}, currentPageNum={1}]", tagTitle, currentPageNum);
final JSONObject result = tagQueryService.getTagByTitle(tagTitle); final JSONObject result = tagQueryService.getTagByTitle(tagTitle);
if (null == result) { if (null == result) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -133,7 +130,7 @@ public class TagProcessor { ...@@ -133,7 +130,7 @@ public class TagProcessor {
final int windowSize = preference.getInt(Option.ID_C_ARTICLE_LIST_PAGINATION_WINDOW_SIZE); final int windowSize = preference.getInt(Option.ID_C_ARTICLE_LIST_PAGINATION_WINDOW_SIZE);
final JSONObject tagArticleResult = articleQueryService.getArticlesByTag(tagId, currentPageNum, pageSize); final JSONObject tagArticleResult = articleQueryService.getArticlesByTag(tagId, currentPageNum, pageSize);
if (null == tagArticleResult) { if (null == tagArticleResult) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -150,11 +147,11 @@ public class TagProcessor { ...@@ -150,11 +147,11 @@ public class TagProcessor {
dataModelService.fillCommon(context, dataModel, preference); dataModelService.fillCommon(context, dataModel, preference);
dataModelService.fillFaviconURL(dataModel, preference); dataModelService.fillFaviconURL(dataModel, preference);
dataModelService.fillUsite(dataModel); dataModelService.fillUsite(dataModel);
statisticMgmtService.incBlogViewCount(context, response); statisticMgmtService.incBlogViewCount(context, context.getResponse());
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
......
...@@ -23,11 +23,11 @@ import org.b3log.latke.ioc.Inject; ...@@ -23,11 +23,11 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.HttpMethod; import org.b3log.latke.http.HttpMethod;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.http.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.service.DataModelService; import org.b3log.solo.service.DataModelService;
...@@ -94,14 +94,14 @@ public class UserTemplateProcessor { ...@@ -94,14 +94,14 @@ public class UserTemplateProcessor {
final String templateName = context.pathVar("name") + ".ftl"; final String templateName = context.pathVar("name") + ".ftl";
LOGGER.log(Level.DEBUG, "Shows page [requestURI={0}, templateName={1}]", requestURI, templateName); LOGGER.log(Level.DEBUG, "Shows page [requestURI={0}, templateName={1}]", requestURI, templateName);
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, templateName); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context, templateName);
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
final Template template = Skins.getSkinTemplate(context, templateName); final Template template = Skins.getSkinTemplate(context, templateName);
if (null == template) { if (null == template) {
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
return; return;
} }
...@@ -119,7 +119,7 @@ public class UserTemplateProcessor { ...@@ -119,7 +119,7 @@ public class UserTemplateProcessor {
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
context.sendError(HttpServletResponse.SC_NOT_FOUND); context.sendError(404);
} }
} }
} }
...@@ -25,6 +25,10 @@ import org.b3log.latke.Keys; ...@@ -25,6 +25,10 @@ import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.ioc.Singleton; import org.b3log.latke.ioc.Singleton;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
...@@ -34,12 +38,9 @@ import org.b3log.latke.model.User; ...@@ -34,12 +38,9 @@ import org.b3log.latke.model.User;
import org.b3log.latke.plugin.ViewLoadEventData; import org.b3log.latke.plugin.ViewLoadEventData;
import org.b3log.latke.repository.jdbc.util.Connections; import org.b3log.latke.repository.jdbc.util.Connections;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.Before;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer;
import org.b3log.latke.util.Execs; import org.b3log.latke.util.Execs;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.Server;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.UserExt; import org.b3log.solo.model.UserExt;
...@@ -51,8 +52,6 @@ import org.b3log.solo.util.Markdowns; ...@@ -51,8 +52,6 @@ import org.b3log.solo.util.Markdowns;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
...@@ -138,7 +137,7 @@ public class AdminConsole { ...@@ -138,7 +137,7 @@ public class AdminConsole {
dataModel.put(Option.ID_C_LOCALE_STRING, preference.getString(Option.ID_C_LOCALE_STRING)); dataModel.put(Option.ID_C_LOCALE_STRING, preference.getString(Option.ID_C_LOCALE_STRING));
dataModel.put(Option.ID_C_BLOG_TITLE, preference.getString(Option.ID_C_BLOG_TITLE)); dataModel.put(Option.ID_C_BLOG_TITLE, preference.getString(Option.ID_C_BLOG_TITLE));
dataModel.put(Option.ID_C_BLOG_SUBTITLE, preference.getString(Option.ID_C_BLOG_SUBTITLE)); dataModel.put(Option.ID_C_BLOG_SUBTITLE, preference.getString(Option.ID_C_BLOG_SUBTITLE));
dataModel.put(Common.VERSION, SoloServletListener.VERSION); dataModel.put(Common.VERSION, Server.VERSION);
dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion()); dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion());
dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
dataModel.put(Option.ID_C_ARTICLE_LIST_DISPLAY_COUNT, preference.getInt(Option.ID_C_ARTICLE_LIST_DISPLAY_COUNT)); dataModel.put(Option.ID_C_ARTICLE_LIST_DISPLAY_COUNT, preference.getInt(Option.ID_C_ARTICLE_LIST_DISPLAY_COUNT));
...@@ -232,10 +231,10 @@ public class AdminConsole { ...@@ -232,10 +231,10 @@ public class AdminConsole {
* @param context the specified request context * @param context the specified request context
*/ */
public void exportSQL(final RequestContext context) { public void exportSQL(final RequestContext context) {
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
if (!Solos.isAdminLoggedIn(context)) { if (!Solos.isAdminLoggedIn(context)) {
context.sendError(HttpServletResponse.SC_UNAUTHORIZED); context.sendError(401);
return; return;
} }
...@@ -326,11 +325,7 @@ public class AdminConsole { ...@@ -326,11 +325,7 @@ public class AdminConsole {
response.setContentType("application/zip"); response.setContentType("application/zip");
final String fileName = "solo-sql-" + date + ".zip"; final String fileName = "solo-sql-" + date + ".zip";
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.sendContent(zipData);
final ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(zipData);
outputStream.flush();
outputStream.close();
// 导出 SQL 包后清理临时文件 https://github.com/b3log/solo/issues/12770 // 导出 SQL 包后清理临时文件 https://github.com/b3log/solo/issues/12770
localFile.delete(); localFile.delete();
...@@ -349,9 +344,9 @@ public class AdminConsole { ...@@ -349,9 +344,9 @@ public class AdminConsole {
* @param context the specified request context * @param context the specified request context
*/ */
public void exportJSON(final RequestContext context) { public void exportJSON(final RequestContext context) {
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
if (!Solos.isAdminLoggedIn(context)) { if (!Solos.isAdminLoggedIn(context)) {
context.sendError(HttpServletResponse.SC_UNAUTHORIZED); context.sendError(401);
return; return;
} }
...@@ -376,14 +371,12 @@ public class AdminConsole { ...@@ -376,14 +371,12 @@ public class AdminConsole {
IOUtils.write(data, output); IOUtils.write(data, output);
} }
try (final FileInputStream inputStream = new FileInputStream(ZipUtil.zip(localFile)); try (final FileInputStream inputStream = new FileInputStream(ZipUtil.zip(localFile))) {
final ServletOutputStream outputStream = response.getOutputStream()) {
final byte[] zipData = IOUtils.toByteArray(inputStream); final byte[] zipData = IOUtils.toByteArray(inputStream);
response.setContentType("application/zip"); response.setContentType("application/zip");
final String fileName = "solo-json-" + date + ".zip"; final String fileName = "solo-json-" + date + ".zip";
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
outputStream.write(zipData); response.sendContent(zipData);
outputStream.flush();
} }
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Export failed", e); LOGGER.log(Level.ERROR, "Export failed", e);
...@@ -399,9 +392,9 @@ public class AdminConsole { ...@@ -399,9 +392,9 @@ public class AdminConsole {
* @param context the specified request context * @param context the specified request context
*/ */
public void exportHexo(final RequestContext context) { public void exportHexo(final RequestContext context) {
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
if (!Solos.isAdminLoggedIn(context)) { if (!Solos.isAdminLoggedIn(context)) {
context.sendError(HttpServletResponse.SC_UNAUTHORIZED); context.sendError(401);
return; return;
} }
...@@ -450,10 +443,7 @@ public class AdminConsole { ...@@ -450,10 +443,7 @@ public class AdminConsole {
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
} }
try (final ServletOutputStream outputStream = response.getOutputStream()) { response.sendContent(zipData);
outputStream.write(zipData);
outputStream.flush();
}
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Export failed", e); LOGGER.log(Level.ERROR, "Export failed", e);
context.renderJSON().renderMsg("Export failed, please check log"); context.renderJSON().renderMsg("Export failed, please check log");
......
...@@ -21,15 +21,16 @@ import org.apache.commons.lang.StringEscapeUtils; ...@@ -21,15 +21,16 @@ import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.ioc.Singleton; import org.b3log.latke.ioc.Singleton;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.Before;
import org.b3log.latke.servlet.renderer.JsonRenderer;
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;
...@@ -41,7 +42,6 @@ import org.b3log.solo.util.Solos; ...@@ -41,7 +42,6 @@ import org.b3log.solo.util.Solos;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -122,7 +122,7 @@ public class ArticleConsole { ...@@ -122,7 +122,7 @@ public class ArticleConsole {
final JSONObject result = new JSONObject(); final JSONObject result = new JSONObject();
renderer.setJSONObject(result); renderer.setJSONObject(result);
result.put(Keys.STATUS_CODE, true); result.put(Keys.STATUS_CODE, true);
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
String strN = context.param("n"); String strN = context.param("n");
if (!Strings.isNumeric(strN)) { if (!Strings.isNumeric(strN)) {
strN = "6"; strN = "6";
......
...@@ -21,15 +21,15 @@ import org.apache.commons.lang.StringEscapeUtils; ...@@ -21,15 +21,15 @@ import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.solo.model.Category; import org.b3log.solo.model.Category;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
...@@ -41,7 +41,6 @@ import org.b3log.solo.util.Solos; ...@@ -41,7 +41,6 @@ import org.b3log.solo.util.Solos;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -517,7 +516,6 @@ public class CategoryConsole { ...@@ -517,7 +516,6 @@ public class CategoryConsole {
context.setRenderer(renderer); context.setRenderer(renderer);
try { try {
final HttpServletRequest request = context.getRequest();
final String requestURI = context.requestURI(); final String requestURI = context.requestURI();
final String path = requestURI.substring((Latkes.getContextPath() + "/console/categories/").length()); final String path = requestURI.substring((Latkes.getContextPath() + "/console/categories/").length());
final JSONObject requestJSONObject = Solos.buildPaginationRequest(path); final JSONObject requestJSONObject = Solos.buildPaginationRequest(path);
......
...@@ -19,14 +19,14 @@ package org.b3log.solo.processor.console; ...@@ -19,14 +19,14 @@ package org.b3log.solo.processor.console;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer;
import org.b3log.solo.model.Comment; import org.b3log.solo.model.Comment;
import org.b3log.solo.service.CommentMgmtService; import org.b3log.solo.service.CommentMgmtService;
import org.b3log.solo.service.CommentQueryService; import org.b3log.solo.service.CommentQueryService;
......
...@@ -18,15 +18,13 @@ ...@@ -18,15 +18,13 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.advice.ProcessAdvice;
import org.b3log.latke.http.advice.RequestProcessAdviceException;
import org.b3log.latke.ioc.Singleton; import org.b3log.latke.ioc.Singleton;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.advice.ProcessAdvice;
import org.b3log.latke.servlet.advice.RequestProcessAdviceException;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
/** /**
* The common auth check before advice for admin console. * The common auth check before advice for admin console.
* *
...@@ -42,7 +40,7 @@ public class ConsoleAdminAuthAdvice extends ProcessAdvice { ...@@ -42,7 +40,7 @@ public class ConsoleAdminAuthAdvice extends ProcessAdvice {
if (!Solos.isAdminLoggedIn(context)) { if (!Solos.isAdminLoggedIn(context)) {
final JSONObject exception401 = new JSONObject(); final JSONObject exception401 = new JSONObject();
exception401.put(Keys.MSG, "Unauthorized to request [" + context.requestURI() + "], please signin using admin account"); exception401.put(Keys.MSG, "Unauthorized to request [" + context.requestURI() + "], please signin using admin account");
exception401.put(Keys.STATUS_CODE, HttpServletResponse.SC_UNAUTHORIZED); exception401.put(Keys.STATUS_CODE, 401);
throw new RequestProcessAdviceException(exception401); throw new RequestProcessAdviceException(exception401);
} }
......
...@@ -18,17 +18,15 @@ ...@@ -18,17 +18,15 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.advice.ProcessAdvice;
import org.b3log.latke.http.advice.RequestProcessAdviceException;
import org.b3log.latke.ioc.Singleton; import org.b3log.latke.ioc.Singleton;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.advice.ProcessAdvice;
import org.b3log.latke.servlet.advice.RequestProcessAdviceException;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
/** /**
* The common auth check before advice for admin console. * The common auth check before advice for admin console.
* *
...@@ -45,7 +43,7 @@ public class ConsoleAuthAdvice extends ProcessAdvice { ...@@ -45,7 +43,7 @@ public class ConsoleAuthAdvice extends ProcessAdvice {
if (null == currentUser) { if (null == currentUser) {
final JSONObject exception401 = new JSONObject(); final JSONObject exception401 = new JSONObject();
exception401.put(Keys.MSG, "Unauthorized to request [" + context.requestURI() + "], please signin"); exception401.put(Keys.MSG, "Unauthorized to request [" + context.requestURI() + "], please signin");
exception401.put(Keys.STATUS_CODE, HttpServletResponse.SC_UNAUTHORIZED); exception401.put(Keys.STATUS_CODE, 401);
throw new RequestProcessAdviceException(exception401); throw new RequestProcessAdviceException(exception401);
} }
...@@ -54,7 +52,7 @@ public class ConsoleAuthAdvice extends ProcessAdvice { ...@@ -54,7 +52,7 @@ public class ConsoleAuthAdvice extends ProcessAdvice {
if (Role.VISITOR_ROLE.equals(userRole)) { if (Role.VISITOR_ROLE.equals(userRole)) {
final JSONObject exception403 = new JSONObject(); final JSONObject exception403 = new JSONObject();
exception403.put(Keys.MSG, "Forbidden to request [" + context.requestURI() + "]"); exception403.put(Keys.MSG, "Forbidden to request [" + context.requestURI() + "]");
exception403.put(Keys.STATUS_CODE, HttpServletResponse.SC_FORBIDDEN); exception403.put(Keys.STATUS_CODE, 403);
throw new RequestProcessAdviceException(exception403); throw new RequestProcessAdviceException(exception403);
} }
......
...@@ -18,8 +18,8 @@ ...@@ -18,8 +18,8 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import freemarker.template.Template; import freemarker.template.Template;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.renderer.AbstractFreeMarkerRenderer; import org.b3log.latke.http.renderer.AbstractFreeMarkerRenderer;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
/** /**
......
...@@ -24,10 +24,10 @@ import org.b3log.latke.ioc.Inject; ...@@ -24,10 +24,10 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Link; import org.b3log.solo.model.Link;
import org.b3log.solo.service.LinkMgmtService; import org.b3log.solo.service.LinkMgmtService;
......
...@@ -22,10 +22,10 @@ import org.b3log.latke.ioc.Inject; ...@@ -22,10 +22,10 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.service.ArchiveDateMgmtService; import org.b3log.solo.service.ArchiveDateMgmtService;
import org.b3log.solo.service.TagMgmtService; import org.b3log.solo.service.TagMgmtService;
import org.json.JSONObject; import org.json.JSONObject;
......
...@@ -25,10 +25,10 @@ import org.b3log.latke.logging.Level; ...@@ -25,10 +25,10 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
import org.b3log.solo.service.PageMgmtService; import org.b3log.solo.service.PageMgmtService;
......
...@@ -24,10 +24,10 @@ import org.b3log.latke.logging.Level; ...@@ -24,10 +24,10 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Plugin; import org.b3log.latke.model.Plugin;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.service.PluginMgmtService; import org.b3log.solo.service.PluginMgmtService;
import org.b3log.solo.service.PluginQueryService; import org.b3log.solo.service.PluginQueryService;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
......
...@@ -23,10 +23,10 @@ import org.b3log.latke.logging.Level; ...@@ -23,10 +23,10 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Sign; import org.b3log.solo.model.Sign;
import org.b3log.solo.service.OptionMgmtService; import org.b3log.solo.service.OptionMgmtService;
......
...@@ -20,10 +20,10 @@ package org.b3log.solo.processor.console; ...@@ -20,10 +20,10 @@ package org.b3log.solo.processor.console;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.TextHtmlRenderer; import org.b3log.latke.http.renderer.TextHtmlRenderer;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.TagArticleRepository; import org.b3log.solo.repository.TagArticleRepository;
......
...@@ -19,15 +19,17 @@ package org.b3log.solo.processor.console; ...@@ -19,15 +19,17 @@ package org.b3log.solo.processor.console;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.Cookie;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.servlet.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.service.OptionQueryService; import org.b3log.solo.service.OptionQueryService;
...@@ -36,8 +38,6 @@ import org.b3log.solo.util.Skins; ...@@ -36,8 +38,6 @@ import org.b3log.solo.util.Skins;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.Set; import java.util.Set;
/** /**
...@@ -163,7 +163,7 @@ public class SkinConsole { ...@@ -163,7 +163,7 @@ public class SkinConsole {
skinMgmtService.updateSkin(skin); skinMgmtService.updateSkin(skin);
final HttpServletResponse response = context.getResponse(); final Response response = context.getResponse();
final Cookie skinDirNameCookie = new Cookie(Common.COOKIE_NAME_SKIN, skin.getString(Option.ID_C_SKIN_DIR_NAME)); final Cookie skinDirNameCookie = new Cookie(Common.COOKIE_NAME_SKIN, skin.getString(Option.ID_C_SKIN_DIR_NAME));
skinDirNameCookie.setMaxAge(60 * 60); // 1 hour skinDirNameCookie.setMaxAge(60 * 60); // 1 hour
skinDirNameCookie.setPath("/"); skinDirNameCookie.setPath("/");
......
...@@ -22,10 +22,10 @@ import org.b3log.latke.ioc.Inject; ...@@ -22,10 +22,10 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.service.TagMgmtService; import org.b3log.solo.service.TagMgmtService;
......
...@@ -26,10 +26,10 @@ import org.b3log.latke.logging.Logger; ...@@ -26,10 +26,10 @@ import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.http.annotation.Before;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.http.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JsonRenderer; import org.b3log.latke.http.renderer.JsonRenderer;
import org.b3log.solo.service.UserMgmtService; import org.b3log.solo.service.UserMgmtService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
......
...@@ -29,7 +29,7 @@ import org.b3log.latke.repository.*; ...@@ -29,7 +29,7 @@ import org.b3log.latke.repository.*;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.servlet.RequestContext; import org.b3log.latke.http.RequestContext;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.Stopwatchs; import org.b3log.latke.util.Stopwatchs;
...@@ -867,7 +867,7 @@ public class ArticleQueryService { ...@@ -867,7 +867,7 @@ public class ArticleQueryService {
* Invoking this method dose not effect on article view count. * Invoking this method dose not effect on article view count.
* </p> * </p>
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param articleId the specified article id * @param articleId the specified article id
* @return article contents, returns {@code null} if not found * @return article contents, returns {@code null} if not found
* @throws ServiceException service exception * @throws ServiceException service exception
......
...@@ -24,6 +24,7 @@ import org.b3log.latke.Keys; ...@@ -24,6 +24,7 @@ import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
...@@ -37,9 +38,7 @@ import org.b3log.latke.repository.*; ...@@ -37,9 +38,7 @@ import org.b3log.latke.repository.*;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.util.*; import org.b3log.latke.util.*;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.repository.*; import org.b3log.solo.repository.*;
import org.b3log.solo.util.Markdowns; import org.b3log.solo.util.Markdowns;
...@@ -181,7 +180,7 @@ public class DataModelService { ...@@ -181,7 +180,7 @@ public class DataModelService {
/** /**
* Fills articles in index.ftl. * Fills articles in index.ftl.
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param dataModel data model * @param dataModel data model
* @param currentPageNum current page number * @param currentPageNum current page number
* @param preference the specified preference * @param preference the specified preference
...@@ -571,7 +570,7 @@ public class DataModelService { ...@@ -571,7 +570,7 @@ public class DataModelService {
/** /**
* Fills common parts (header, side and footer). * Fills common parts (header, side and footer).
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param dataModel the specified data model * @param dataModel the specified data model
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
...@@ -608,7 +607,7 @@ public class DataModelService { ...@@ -608,7 +607,7 @@ public class DataModelService {
/** /**
* Fills footer.ftl. * Fills footer.ftl.
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param dataModel data model * @param dataModel data model
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
...@@ -621,7 +620,7 @@ public class DataModelService { ...@@ -621,7 +620,7 @@ public class DataModelService {
final String blogTitle = preference.getString(Option.ID_C_BLOG_TITLE); final String blogTitle = preference.getString(Option.ID_C_BLOG_TITLE);
dataModel.put(Option.ID_C_BLOG_TITLE, blogTitle); dataModel.put(Option.ID_C_BLOG_TITLE, blogTitle);
dataModel.put("blogHost", Latkes.getServePath()); dataModel.put("blogHost", Latkes.getServePath());
dataModel.put(Common.VERSION, SoloServletListener.VERSION); dataModel.put(Common.VERSION, Server.VERSION);
dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion()); dataModel.put(Common.STATIC_RESOURCE_VERSION, Latkes.getStaticResourceVersion());
dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); dataModel.put(Common.YEAR, String.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
String footerContent = ""; String footerContent = "";
...@@ -662,7 +661,7 @@ public class DataModelService { ...@@ -662,7 +661,7 @@ public class DataModelService {
/** /**
* Fills header.ftl. * Fills header.ftl.
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param dataModel data model * @param dataModel data model
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
...@@ -745,7 +744,7 @@ public class DataModelService { ...@@ -745,7 +744,7 @@ public class DataModelService {
/** /**
* Fills side.ftl. * Fills side.ftl.
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param dataModel data model * @param dataModel data model
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
...@@ -797,7 +796,7 @@ public class DataModelService { ...@@ -797,7 +796,7 @@ public class DataModelService {
/** /**
* Fills the specified template. * Fills the specified template.
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param template the specified template * @param template the specified template
* @param dataModel data model * @param dataModel data model
* @param preference the specified preference * @param preference the specified preference
...@@ -900,7 +899,7 @@ public class DataModelService { ...@@ -900,7 +899,7 @@ public class DataModelService {
* </pre> * </pre>
* </p> * </p>
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param article the specified article * @param article the specified article
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
...@@ -1008,7 +1007,7 @@ public class DataModelService { ...@@ -1008,7 +1007,7 @@ public class DataModelService {
* </pre> * </pre>
* </p> * </p>
* *
* @param context the specified HTTP servlet request context * @param context the specified HTTP request context
* @param articles the specified articles * @param articles the specified articles
* @param preference the specified preference * @param preference the specified preference
* @throws ServiceException service exception * @throws ServiceException service exception
......
...@@ -34,7 +34,6 @@ import org.b3log.latke.model.User; ...@@ -34,7 +34,6 @@ import org.b3log.latke.model.User;
import org.b3log.latke.repository.*; import org.b3log.latke.repository.*;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.repository.*; import org.b3log.solo.repository.*;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
...@@ -253,7 +252,7 @@ public class ExportService { ...@@ -253,7 +252,7 @@ public class ExportService {
form("userName", userName, form("userName", userName,
"userB3Key", userB3Key, "userB3Key", userB3Key,
"clientName", "Solo", "clientName", "Solo",
"clientVersion", SoloServletListener.VERSION, "clientVersion", Server.VERSION,
"clientHost", Latkes.getServePath(), "clientHost", Latkes.getServePath(),
"clientFavicon", preference.optString(Option.ID_C_FAVICON_URL), "clientFavicon", preference.optString(Option.ID_C_FAVICON_URL),
"clientTitle", clientTitle, "clientTitle", clientTitle,
......
...@@ -26,12 +26,10 @@ import org.b3log.latke.logging.Level; ...@@ -26,12 +26,10 @@ import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.json.JSONObject; import org.json.JSONObject;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
import javax.servlet.ServletContext;
import java.io.File; import java.io.File;
import java.util.*; import java.util.*;
...@@ -73,8 +71,7 @@ public class ImportService { ...@@ -73,8 +71,7 @@ public class ImportService {
*/ */
public void importMarkdowns() { public void importMarkdowns() {
new Thread(() -> { new Thread(() -> {
final ServletContext servletContext = SoloServletListener.getServletContext(); final String markdownsPath = ImportService.class.getResource("markdowns").getPath();
final String markdownsPath = servletContext.getRealPath("markdowns");
LOGGER.debug("Import directory [" + markdownsPath + "]"); LOGGER.debug("Import directory [" + markdownsPath + "]");
final JSONObject admin = userQueryService.getAdmin(); final JSONObject admin = userQueryService.getAdmin();
......
...@@ -35,7 +35,6 @@ import org.b3log.latke.repository.jdbc.util.JdbcRepositories.CreateTableResult; ...@@ -35,7 +35,6 @@ import org.b3log.latke.repository.jdbc.util.JdbcRepositories.CreateTableResult;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.util.Ids; import org.b3log.latke.util.Ids;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.model.Option.DefaultPreference; import org.b3log.solo.model.Option.DefaultPreference;
import org.b3log.solo.repository.*; import org.b3log.solo.repository.*;
...@@ -636,7 +635,7 @@ public class InitService { ...@@ -636,7 +635,7 @@ public class InitService {
final JSONObject versionOpt = new JSONObject(); final JSONObject versionOpt = new JSONObject();
versionOpt.put(Keys.OBJECT_ID, Option.ID_C_VERSION); versionOpt.put(Keys.OBJECT_ID, Option.ID_C_VERSION);
versionOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE); versionOpt.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_PREFERENCE);
versionOpt.put(Option.OPTION_VALUE, SoloServletListener.VERSION); versionOpt.put(Option.OPTION_VALUE, Server.VERSION);
optionRepository.add(versionOpt); optionRepository.add(versionOpt);
final JSONObject articleListStyleOpt = new JSONObject(); final JSONObject articleListStyleOpt = new JSONObject();
......
...@@ -17,6 +17,10 @@ ...@@ -17,6 +17,10 @@
*/ */
package org.b3log.solo.service; package org.b3log.solo.service;
import org.b3log.latke.http.Cookie;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.ioc.Inject; import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
...@@ -25,7 +29,6 @@ import org.b3log.latke.repository.Transaction; ...@@ -25,7 +29,6 @@ import org.b3log.latke.repository.Transaction;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.latke.util.URLs; import org.b3log.latke.util.URLs;
import org.b3log.solo.cache.StatisticCache; import org.b3log.solo.cache.StatisticCache;
...@@ -36,10 +39,8 @@ import org.b3log.solo.util.Solos; ...@@ -36,10 +39,8 @@ import org.b3log.solo.util.Solos;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -137,22 +138,19 @@ public class StatisticMgmtService { ...@@ -137,22 +138,19 @@ public class StatisticMgmtService {
* @param response the specified response * @param response the specified response
* @return {@code true} if the specified request has been served, returns {@code false} otherwise * @return {@code true} if the specified request has been served, returns {@code false} otherwise
*/ */
public static boolean hasBeenServed(final RequestContext context, final HttpServletResponse response) { public static boolean hasBeenServed(final RequestContext context, final Response response) {
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
final Cookie[] cookies = request.getCookies(); final List<Cookie> cookies = request.getCookies();
if (null == cookies || 0 == cookies.length) { if (cookies.isEmpty()) {
return false; return false;
} }
Cookie cookie;
boolean needToCreate = true; boolean needToCreate = true;
boolean needToAppend = true; boolean needToAppend = true;
JSONArray cookieJSONArray = null; JSONArray cookieJSONArray = null;
try { try {
for (int i = 0; i < cookies.length; i++) { for (final Cookie cookie : cookies) {
cookie = cookies[i];
if (!"visited".equals(cookie.getName())) { if (!"visited".equals(cookie.getName())) {
continue; continue;
} }
...@@ -215,7 +213,7 @@ public class StatisticMgmtService { ...@@ -215,7 +213,7 @@ public class StatisticMgmtService {
* @param response the specified response * @param response the specified response
* @throws ServiceException service exception * @throws ServiceException service exception
*/ */
public void incBlogViewCount(final RequestContext context, final HttpServletResponse response) throws ServiceException { public void incBlogViewCount(final RequestContext context, final Response response) throws ServiceException {
if (Solos.isBot(context.getRequest())) { if (Solos.isBot(context.getRequest())) {
return; return;
} }
...@@ -257,7 +255,7 @@ public class StatisticMgmtService { ...@@ -257,7 +255,7 @@ public class StatisticMgmtService {
* *
* @param request the specified request * @param request the specified request
*/ */
public void onlineVisitorCount(final HttpServletRequest request) { public void onlineVisitorCount(final Request request) {
if (Solos.isBot(request)) { if (Solos.isBot(request)) {
return; return;
} }
......
...@@ -21,7 +21,6 @@ import org.b3log.latke.ioc.Inject; ...@@ -21,7 +21,6 @@ import org.b3log.latke.ioc.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.upgrade.*; import org.b3log.solo.upgrade.*;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -58,7 +57,7 @@ public class UpgradeService { ...@@ -58,7 +57,7 @@ public class UpgradeService {
} }
final String currentVer = preference.getString(Option.ID_C_VERSION); // 数据库中的版本 final String currentVer = preference.getString(Option.ID_C_VERSION); // 数据库中的版本
if (SoloServletListener.VERSION.equals(currentVer)) { if (Server.VERSION.equals(currentVer)) {
// 如果数据库中的版本和运行时版本一致则说明已经是最新版 // 如果数据库中的版本和运行时版本一致则说明已经是最新版
return; return;
} }
......
...@@ -40,8 +40,6 @@ import org.b3log.solo.repository.UserRepository; ...@@ -40,8 +40,6 @@ import org.b3log.solo.repository.UserRepository;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
/** /**
* User management service. * User management service.
* *
...@@ -117,7 +115,7 @@ public class UserMgmtService { ...@@ -117,7 +115,7 @@ public class UserMgmtService {
final HttpResponse res = HttpRequest.post("https://hacpai.com/user/usite").trustAllCerts(true). final HttpResponse res = HttpRequest.post("https://hacpai.com/user/usite").trustAllCerts(true).
connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT). connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).
body(requestJSON.toString()).send(); body(requestJSON.toString()).send();
if (HttpServletResponse.SC_OK != res.statusCode()) { if (200 != res.statusCode()) {
return; return;
} }
res.charset("UTF-8"); res.charset("UTF-8");
......
...@@ -18,11 +18,7 @@ ...@@ -18,11 +18,7 @@
package org.b3log.solo.util; package org.b3log.solo.util;
import com.vdurmont.emoji.EmojiParser; import com.vdurmont.emoji.EmojiParser;
import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Latkes;
import org.b3log.solo.SoloServletListener;
import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
......
...@@ -29,8 +29,6 @@ import org.b3log.solo.model.UserExt; ...@@ -29,8 +29,6 @@ import org.b3log.solo.model.UserExt;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
/** /**
* GitHub utilities. * GitHub utilities.
* *
...@@ -55,7 +53,7 @@ public final class GitHubs { ...@@ -55,7 +53,7 @@ public final class GitHubs {
try { try {
final HttpResponse res = HttpRequest.get("https://hacpai.com/github/repos?id=" + githubUserId).trustAllCerts(true). final HttpResponse res = HttpRequest.get("https://hacpai.com/github/repos?id=" + githubUserId).trustAllCerts(true).
connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send(); connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
if (HttpServletResponse.SC_OK != res.statusCode()) { if (200 != res.statusCode()) {
return null; return null;
} }
res.charset("UTF-8"); res.charset("UTF-8");
...@@ -90,7 +88,7 @@ public final class GitHubs { ...@@ -90,7 +88,7 @@ public final class GitHubs {
try { try {
final HttpResponse res = HttpRequest.get("https://hacpai.com/github/user?ak=" + accessToken).trustAllCerts(true). final HttpResponse res = HttpRequest.get("https://hacpai.com/github/user?ak=" + accessToken).trustAllCerts(true).
connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send(); connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
if (HttpServletResponse.SC_OK != res.statusCode()) { if (200 != res.statusCode()) {
return null; return null;
} }
res.charset("UTF-8"); res.charset("UTF-8");
......
...@@ -23,26 +23,25 @@ import freemarker.template.TemplateExceptionHandler; ...@@ -23,26 +23,25 @@ import freemarker.template.TemplateExceptionHandler;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.Cookie;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.latke.util.Stopwatchs; import org.b3log.latke.util.Stopwatchs;
import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.file.Path; import java.net.URI;
import java.nio.file.Paths; import java.nio.file.*;
import java.util.*; import java.util.*;
import java.util.stream.Stream;
/** /**
* Skin utilities. * Skin utilities.
...@@ -66,8 +65,7 @@ public final class Skins { ...@@ -66,8 +65,7 @@ public final class Skins {
static { static {
TEMPLATE_CFG = new Configuration(Configuration.VERSION_2_3_28); TEMPLATE_CFG = new Configuration(Configuration.VERSION_2_3_28);
TEMPLATE_CFG.setDefaultEncoding("UTF-8"); TEMPLATE_CFG.setDefaultEncoding("UTF-8");
final ServletContext servletContext = SoloServletListener.getServletContext(); TEMPLATE_CFG.setClassForTemplateLoading(Skins.class, "");
TEMPLATE_CFG.setServletContextForTemplateLoading(servletContext, "");
TEMPLATE_CFG.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); TEMPLATE_CFG.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
TEMPLATE_CFG.setLogTemplateExceptions(false); TEMPLATE_CFG.setLogTemplateExceptions(false);
} }
...@@ -149,9 +147,7 @@ public final class Skins { ...@@ -149,9 +147,7 @@ public final class Skins {
langs = new HashMap<>(); langs = new HashMap<>();
final String language = Locales.getLanguage(localeString); final String language = Locales.getLanguage(localeString);
final String country = Locales.getCountry(localeString); final String country = Locales.getCountry(localeString);
final ServletContext servletContext = SoloServletListener.getServletContext(); final InputStream inputStream = Skins.class.getResourceAsStream("/skins/" + currentSkinDirName + "/lang/lang_" + language + '_' + country + ".properties");
final InputStream inputStream = servletContext.getResourceAsStream(
"/skins/" + currentSkinDirName + "/lang/lang_" + language + '_' + country + ".properties");
if (null != inputStream) { if (null != inputStream) {
LOGGER.log(Level.DEBUG, "Loading skin [dirName={0}, locale={1}]", currentSkinDirName, localeString); LOGGER.log(Level.DEBUG, "Loading skin [dirName={0}, locale={1}]", currentSkinDirName, localeString);
final Properties props = new Properties(); final Properties props = new Properties();
...@@ -194,11 +190,18 @@ public final class Skins { ...@@ -194,11 +190,18 @@ public final class Skins {
public static Set<String> getSkinDirNames() { public static Set<String> getSkinDirNames() {
final Set<String> ret = new HashSet<>(); final Set<String> ret = new HashSet<>();
final ServletContext servletContext = SoloServletListener.getServletContext(); try {
final Set<String> resourcePaths = servletContext.getResourcePaths("/skins"); final URI uri = Skins.class.getResource("/skins").toURI();
for (final String path : resourcePaths) { Path resourcePath;
final Path p = Paths.get(path); if (uri.getScheme().equals("jar")) {
final Path file = p.getFileName(); FileSystem fileSystem = FileSystems.newFileSystem(uri, Collections.<String, Object>emptyMap());
resourcePath = fileSystem.getPath("/skins");
} else {
resourcePath = Paths.get(uri);
}
final Stream<Path> walk = Files.walk(resourcePath, 1);
for (final Iterator<Path> it = walk.iterator(); it.hasNext(); ) {
final Path file = it.next().getFileName();
final String fileName = file.toString(); final String fileName = file.toString();
if (fileName.startsWith(".") || fileName.endsWith(".md")) { if (fileName.startsWith(".") || fileName.endsWith(".md")) {
continue; continue;
...@@ -206,6 +209,9 @@ public final class Skins { ...@@ -206,6 +209,9 @@ public final class Skins {
ret.add(fileName); ret.add(fileName);
} }
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Get skin dir names failed", e);
}
return ret; return ret;
} }
...@@ -239,12 +245,12 @@ public final class Skins { ...@@ -239,12 +245,12 @@ public final class Skins {
* @param request the specified request * @param request the specified request
* @return directory name, or {@code null} if not found * @return directory name, or {@code null} if not found
*/ */
public static String getSkinDirNameFromCookie(final HttpServletRequest request) { public static String getSkinDirNameFromCookie(final Request request) {
final Set<String> skinDirNames = Skins.getSkinDirNames(); final Set<String> skinDirNames = Skins.getSkinDirNames();
boolean isMobile = Solos.isMobile(request); boolean isMobile = Solos.isMobile(request);
String skin = null, mobileSkin = null; String skin = null, mobileSkin = null;
final Cookie[] cookies = request.getCookies(); final List<Cookie> cookies = request.getCookies();
if (null != cookies) { if (!cookies.isEmpty()) {
for (final Cookie cookie : cookies) { for (final Cookie cookie : cookies) {
if (Common.COOKIE_NAME_SKIN.equals(cookie.getName()) && !isMobile) { if (Common.COOKIE_NAME_SKIN.equals(cookie.getName()) && !isMobile) {
final String s = cookie.getValue(); final String s = cookie.getValue();
......
...@@ -23,29 +23,27 @@ import org.apache.commons.lang.RandomStringUtils; ...@@ -23,29 +23,27 @@ import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.Cookie;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.RequestContext;
import org.b3log.latke.http.Response;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.servlet.RequestContext;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.latke.util.Crypts; import org.b3log.latke.util.Crypts;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.Server;
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.UserExt; import org.b3log.solo.model.UserExt;
import org.b3log.solo.repository.UserRepository; import org.b3log.solo.repository.UserRepository;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie; import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException; import java.util.MissingResourceException;
import java.util.ResourceBundle; import java.util.ResourceBundle;
...@@ -71,7 +69,7 @@ public final class Solos { ...@@ -71,7 +69,7 @@ public final class Solos {
/** /**
* Solo User-Agent. * Solo User-Agent.
*/ */
public static final String USER_AGENT = "Solo/" + SoloServletListener.VERSION + "; +https://github.com/b3log/solo"; public static final String USER_AGENT = "Solo/" + Server.VERSION + "; +https://github.com/b3log/solo";
/** /**
* Cookie expiry in 30 days. * Cookie expiry in 30 days.
...@@ -188,7 +186,7 @@ public final class Solos { ...@@ -188,7 +186,7 @@ public final class Solos {
final HttpResponse res = HttpRequest.post("https://hacpai.com/apis/upload/token").trustAllCerts(true). final HttpResponse res = HttpRequest.post("https://hacpai.com/apis/upload/token").trustAllCerts(true).
body(requestJSON.toString()).connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send(); body(requestJSON.toString()).connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
uploadTokenCheckTime = now; uploadTokenCheckTime = now;
if (HttpServletResponse.SC_OK != res.statusCode()) { if (200 != res.statusCode()) {
return null; return null;
} }
res.charset("UTF-8"); res.charset("UTF-8");
...@@ -249,17 +247,16 @@ public final class Solos { ...@@ -249,17 +247,16 @@ public final class Solos {
* @param response the specified response * @param response the specified response
* @return the current logged-in user, returns {@code null} if not found * @return the current logged-in user, returns {@code null} if not found
*/ */
public static JSONObject getCurrentUser(final HttpServletRequest request, final HttpServletResponse response) { public static JSONObject getCurrentUser(final Request request, final Response response) {
final Cookie[] cookies = request.getCookies(); final List<Cookie> cookies = request.getCookies();
if (null == cookies || 0 == cookies.length) { if (cookies.isEmpty()) {
return null; return null;
} }
final BeanManager beanManager = BeanManager.getInstance(); final BeanManager beanManager = BeanManager.getInstance();
final UserRepository userRepository = beanManager.getReference(UserRepository.class); final UserRepository userRepository = beanManager.getReference(UserRepository.class);
try { try {
for (int i = 0; i < cookies.length; i++) { for (final Cookie cookie : cookies) {
final Cookie cookie = cookies[i];
if (!COOKIE_NAME.equals(cookie.getName())) { if (!COOKIE_NAME.equals(cookie.getName())) {
continue; continue;
} }
...@@ -304,7 +301,7 @@ public final class Solos { ...@@ -304,7 +301,7 @@ public final class Solos {
* @param response the specified response * @param response the specified response
* @param user the specified user * @param user the specified user
*/ */
public static void login(final JSONObject user, final HttpServletResponse response) { public static void login(final JSONObject user, final Response response) {
try { try {
final String userId = user.optString(Keys.OBJECT_ID); final String userId = user.optString(Keys.OBJECT_ID);
final JSONObject cookieJSONObject = new JSONObject(); final JSONObject cookieJSONObject = new JSONObject();
...@@ -330,7 +327,7 @@ public final class Solos { ...@@ -330,7 +327,7 @@ public final class Solos {
* @param response the specified response * @param response the specified response
* @return {@code true} if succeed, otherwise returns {@code false} * @return {@code true} if succeed, otherwise returns {@code false}
*/ */
public static void logout(final HttpServletRequest request, final HttpServletResponse response) { public static void logout(final Request request, final Response response) {
if (null != response) { if (null != response) {
final Cookie cookie = new Cookie(COOKIE_NAME, null); final Cookie cookie = new Cookie(COOKIE_NAME, null);
cookie.setMaxAge(0); cookie.setMaxAge(0);
...@@ -386,24 +383,25 @@ public final class Solos { ...@@ -386,24 +383,25 @@ public final class Solos {
return false; return false;
} }
final HttpServletRequest request = context.getRequest(); final Request request = context.getRequest();
if (null == request) { if (null == request) {
return true; return true;
} }
final HttpSession session = request.getSession(); // TODO: session
if (null != session) { // final HttpSession session = request.getSession();
Map<String, String> viewPwds = (Map<String, String>) session.getAttribute(Common.ARTICLES_VIEW_PWD); // if (null != session) {
if (null == viewPwds) { // Map<String, String> viewPwds = (Map<String, String>) session.getAttribute(Common.ARTICLES_VIEW_PWD);
viewPwds = new HashMap<>(); // if (null == viewPwds) {
} // viewPwds = new HashMap<>();
// }
if (articleViewPwd.equals(viewPwds.get(article.optString(Keys.OBJECT_ID)))) { //
return false; // if (articleViewPwd.equals(viewPwds.get(article.optString(Keys.OBJECT_ID)))) {
} // return false;
} // }
// }
final HttpServletResponse response = context.getResponse();
final Response response = context.getResponse();
final JSONObject currentUser = getCurrentUser(request, response); final JSONObject currentUser = getCurrentUser(request, response);
return !(null != currentUser && !Role.VISITOR_ROLE.equals(currentUser.optString(User.USER_ROLE))); return !(null != currentUser && !Role.VISITOR_ROLE.equals(currentUser.optString(User.USER_ROLE)));
...@@ -415,7 +413,7 @@ public final class Solos { ...@@ -415,7 +413,7 @@ public final class Solos {
* @param request the specified request * @param request the specified request
* @return {@code true} if it is, returns {@code false} otherwise * @return {@code true} if it is, returns {@code false} otherwise
*/ */
public static boolean isMobile(final HttpServletRequest request) { public static boolean isMobile(final Request request) {
final Object val = request.getAttribute(Keys.HttpRequest.IS_MOBILE_BOT); final Object val = request.getAttribute(Keys.HttpRequest.IS_MOBILE_BOT);
if (!(val instanceof Boolean)) { if (!(val instanceof Boolean)) {
return false; return false;
...@@ -430,7 +428,7 @@ public final class Solos { ...@@ -430,7 +428,7 @@ public final class Solos {
* @param request the specified request * @param request the specified request
* @return {@code true} if it is, returns {@code false} otherwise * @return {@code true} if it is, returns {@code false} otherwise
*/ */
public static boolean isBot(final HttpServletRequest request) { public static boolean isBot(final Request request) {
final Object val = request.getAttribute(Keys.HttpRequest.IS_SEARCH_ENGINE_BOT); final Object val = request.getAttribute(Keys.HttpRequest.IS_SEARCH_ENGINE_BOT);
if (!(val instanceof Boolean)) { if (!(val instanceof Boolean)) {
return false; return false;
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-present, b3log.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!--
Description: Solo web deployment descriptor.
Version: 1.1.0.0, Mar 1, 2019
Author: Liang Ding
-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.b3log.solo.SoloServletListener</listener-class>
</listener>
<session-config>
<session-timeout>
60
</session-timeout>
</session-config>
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.b3log.latke.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- Error Pages -->
<error-page>
<error-code>404</error-code>
<location>/error/404</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/error/401</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/403</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500</location>
</error-page>
</web-app>
...@@ -17,9 +17,12 @@ ...@@ -17,9 +17,12 @@
*/ */
package org.b3log.solo; package org.b3log.solo;
import io.netty.handler.codec.http.*;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.http.Request;
import org.b3log.latke.http.Response;
import org.b3log.latke.ioc.BeanManager; import org.b3log.latke.ioc.BeanManager;
import org.b3log.latke.ioc.Discoverer; import org.b3log.latke.ioc.Discoverer;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -39,10 +42,6 @@ import org.testng.annotations.AfterClass; ...@@ -39,10 +42,6 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeMethod;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.sql.Connection; import java.sql.Connection;
import java.util.Collection; import java.util.Collection;
...@@ -134,7 +133,7 @@ public abstract class AbstractTestCase { ...@@ -134,7 +133,7 @@ public abstract class AbstractTestCase {
* *
* @param request the specified request * @param request the specified request
*/ */
public void mockAdminLogin(final MockHttpServletRequest request) { public void mockAdminLogin(final MockRequest request) {
final JSONObject adminUser = getUserQueryService().getAdmin(); final JSONObject adminUser = getUserQueryService().getAdmin();
final String userId = adminUser.optString(Keys.OBJECT_ID); final String userId = adminUser.optString(Keys.OBJECT_ID);
final JSONObject cookieJSONObject = new JSONObject(); final JSONObject cookieJSONObject = new JSONObject();
...@@ -142,8 +141,7 @@ public abstract class AbstractTestCase { ...@@ -142,8 +141,7 @@ public abstract class AbstractTestCase {
final String random = RandomStringUtils.randomAlphanumeric(16); final String random = RandomStringUtils.randomAlphanumeric(16);
cookieJSONObject.put(Keys.TOKEN, "pass:" + random); cookieJSONObject.put(Keys.TOKEN, "pass:" + random);
final String cookieValue = Crypts.encryptByAES(cookieJSONObject.toString(), Solos.COOKIE_SECRET); final String cookieValue = Crypts.encryptByAES(cookieJSONObject.toString(), Solos.COOKIE_SECRET);
final Cookie cookie = new Cookie(Solos.COOKIE_NAME, cookieValue); request.addCookie(Solos.COOKIE_NAME, cookieValue);
request.setCookies(new Cookie[]{cookie});
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
} }
...@@ -154,10 +152,10 @@ public abstract class AbstractTestCase { ...@@ -154,10 +152,10 @@ public abstract class AbstractTestCase {
* @param response the specified response * @param response the specified response
* @return mock dispatcher servlet * @return mock dispatcher servlet
*/ */
public MockDispatcherServlet mockDispatcherServletService(final HttpServletRequest request, final MockHttpServletResponse response) { public MockDispatcherServlet mockDispatcherServletService(final Request request, final Response response) {
final MockDispatcherServlet ret = new MockDispatcherServlet(); final MockDispatcherServlet ret = new MockDispatcherServlet();
ret.init(); ret.init();
SoloServletListener.routeConsoleProcessors(); Server.routeConsoleProcessors();
ret.service(request, response); ret.service(request, response);
return ret; return ret;
...@@ -168,10 +166,9 @@ public abstract class AbstractTestCase { ...@@ -168,10 +166,9 @@ public abstract class AbstractTestCase {
* *
* @return mock request * @return mock request
*/ */
public MockHttpServletRequest mockRequest() { public MockRequest mockRequest() {
final MockHttpServletRequest ret = new MockHttpServletRequest(); final HttpRequest req = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/a");
return new MockRequest(req);
return ret;
} }
/** /**
...@@ -179,12 +176,9 @@ public abstract class AbstractTestCase { ...@@ -179,12 +176,9 @@ public abstract class AbstractTestCase {
* *
* @return mock response * @return mock response
*/ */
public MockHttpServletResponse mockResponse() { public MockResponse mockResponse() {
final StringWriter stringWriter = new StringWriter(); final HttpResponse res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
final PrintWriter printWriter = new PrintWriter(stringWriter); final MockResponse response = new MockResponse(res);
final MockHttpServletResponse response = new MockHttpServletResponse();
response.setWriter(printWriter);
response.setBodyWriter(stringWriter);
return response; return response;
} }
......
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo;
import org.b3log.latke.Latkes;
import org.b3log.latke.servlet.HttpMethod;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.security.Principal;
import java.util.*;
/**
* Mock HTTP servlet request.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.3, Mar 1, 2019
*/
public class MockHttpServletRequest implements HttpServletRequest {
/**
* Header.
*/
private Map<String, String> headers = new HashMap<>();
/**
* Request URI.
*/
private String requestURI = "/";
/**
* Context path.
*/
private String contextPath = "";
/**
* Attributes.
*/
private Map<String, Object> attributes = new HashMap<>();
@Override
public String getAuthType() {
throw new UnsupportedOperationException("Not supported yet.");
}
private Cookie[] cookies;
public void setCookies(final Cookie[] cookies) {
this.cookies = cookies;
}
@Override
public Cookie[] getCookies() {
return cookies;
}
@Override
public long getDateHeader(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Sets header with the specified name and value.
*
* @param name the specified name
* @param value the specified value
*/
public void setHeader(final String name, final String value) {
headers.put(name, value);
}
@Override
public String getHeader(final String name) {
return headers.get(name);
}
@Override
public Enumeration getHeaders(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Enumeration getHeaderNames() {
return new Enumeration() {
@Override
public boolean hasMoreElements() {
return false;
}
@Override
public Object nextElement() {
return null;
}
};
}
@Override
public int getIntHeader(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
private String method = HttpMethod.GET.toString();
public void setMethod(final String method) {
this.method = method;
}
@Override
public String getMethod() {
return method;
}
@Override
public String getPathInfo() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getPathTranslated() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getContextPath() {
return contextPath;
}
@Override
public String getQueryString() {
return "";
}
@Override
public String getRemoteUser() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isUserInRole(final String role) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Principal getUserPrincipal() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getRequestedSessionId() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getRequestURI() {
return requestURI;
}
/**
* Sets request URI with the specified request URI.
*
* @param requestURI the specified request URI
*/
public void setRequestURI(final String requestURI) {
this.requestURI = requestURI;
}
@Override
public StringBuffer getRequestURL() {
return new StringBuffer(Latkes.getServePath() + requestURI);
}
@Override
public String getServletPath() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public HttpSession getSession(final boolean create) {
return null;
}
@Override
public HttpSession getSession() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isRequestedSessionIdValid() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isRequestedSessionIdFromCookie() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isRequestedSessionIdFromURL() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isRequestedSessionIdFromUrl() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object getAttribute(final String name) {
return attributes.get(name);
}
@Override
public Enumeration getAttributeNames() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getCharacterEncoding() {
return "mock character encoding";
}
@Override
public void setCharacterEncoding(final String env) {
}
@Override
public int getContentLength() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getContentType() {
return "mock content type";
}
@Override
public ServletInputStream getInputStream() {
throw new UnsupportedOperationException("Not supported yet.");
}
private Map<String, String> param = new HashMap<>();
public void putParameter(final String name, final String value) {
param.put(name, value);
}
@Override
public String getParameter(final String name) {
return param.get(name);
}
@Override
public Enumeration getParameterNames() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String[] getParameterValues(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Map getParameterMap() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getProtocol() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getScheme() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getServerName() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public int getServerPort() {
throw new UnsupportedOperationException("Not supported yet.");
}
private BufferedReader reader;
public void setReader(BufferedReader reader) {
this.reader = reader;
}
@Override
public BufferedReader getReader() {
return reader;
}
private String remoteAddr;
public void setRemoteAddr(final String remoteAddr) {
this.remoteAddr = remoteAddr;
}
@Override
public String getRemoteAddr() {
return remoteAddr;
}
@Override
public String getRemoteHost() {
return "mock remote host";
}
@Override
public void setAttribute(final String name, final Object o) {
attributes.put(name, o);
}
@Override
public void removeAttribute(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Locale getLocale() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Enumeration getLocales() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isSecure() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public RequestDispatcher getRequestDispatcher(final String path) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getRealPath(final String path) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public int getRemotePort() {
return 0;
}
@Override
public String getLocalName() {
return "mock local name";
}
@Override
public String getLocalAddr() {
return "mock local addr";
}
@Override
public int getLocalPort() {
return 0;
}
@Override
public String changeSessionId() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean authenticate(final HttpServletResponse response) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void login(final String username, final String password) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void logout() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Collection<Part> getParts() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Part getPart(final String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public <T extends HttpUpgradeHandler> T upgrade(final Class<T> handlerClass) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public long getContentLengthLong() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public ServletContext getServletContext() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public AsyncContext startAsync() throws IllegalStateException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public AsyncContext startAsync(final ServletRequest servletRequest, final ServletResponse servletResponse) throws IllegalStateException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isAsyncStarted() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isAsyncSupported() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public AsyncContext getAsyncContext() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public DispatcherType getDispatcherType() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-present, b3log.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.b3log.solo;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
/**
* Mock HTTP servlet request.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.2, May 1, 2012
* @since 2.4.34
*/
public class MockHttpServletResponse implements HttpServletResponse {
private List<Cookie> cookies = new ArrayList<>();
@Override
public void addCookie(Cookie cookie) {
cookies.add(cookie);
}
public List<Cookie> cookies() {
return cookies;
}
@Override
public boolean containsHeader(String name) {
return false;
}
@Override
public String encodeURL(String url) {
return null;
}
@Override
public String encodeRedirectURL(String url) {
return null;
}
@Override
public String encodeUrl(String url) {
return null;
}
@Override
public String encodeRedirectUrl(String url) {
return null;
}
@Override
public void sendError(int sc, String msg) {
}
@Override
public void sendError(int sc) {
}
@Override
public void sendRedirect(String location) {
}
@Override
public void setDateHeader(String name, long date) {
}
@Override
public void addDateHeader(String name, long date) {
}
private Map<String, String> headers = new HashMap<>();
@Override
public void setHeader(String name, String value) {
headers.put(name, value);
}
@Override
public String getHeader(String name) {
return headers.get(name);
}
@Override
public void addHeader(String name, String value) {
headers.put(name, value);
}
@Override
public void setIntHeader(String name, int value) {
}
@Override
public void addIntHeader(String name, int value) {
}
@Override
public void setStatus(int sc) {
}
@Override
public void setStatus(int sc, String sm) {
}
@Override
public int getStatus() {
return 0;
}
@Override
public Collection<String> getHeaders(String name) {
return null;
}
@Override
public Collection<String> getHeaderNames() {
return null;
}
@Override
public String getCharacterEncoding() {
return null;
}
@Override
public String getContentType() {
return null;
}
private long outputBytes;
public long outputBytes() {
return outputBytes;
}
@Override
public ServletOutputStream getOutputStream() {
return new ServletOutputStream() {
@Override
public boolean isReady() {
return false;
}
@Override
public void setWriteListener(WriteListener writeListener) {
}
@Override
public void write(int b) {
outputBytes++;
}
};
}
private StringWriter bodyWriter;
private PrintWriter writer;
public void setWriter(final PrintWriter writer) {
this.writer = writer;
}
public void setBodyWriter(final StringWriter bodyWriter) {
this.bodyWriter = bodyWriter;
}
public String body() {
return bodyWriter.toString();
}
@Override
public PrintWriter getWriter() {
return writer;
}
@Override
public void setCharacterEncoding(String charset) {
}
@Override
public void setContentLength(int len) {
}
@Override
public void setContentLengthLong(long len) {
}
@Override
public void setContentType(String type) {
}
@Override
public void setBufferSize(int size) {
}
@Override
public int getBufferSize() {
return 0;
}
@Override
public void flushBuffer() {
}
@Override
public void resetBuffer() {
}
@Override
public boolean isCommitted() {
return false;
}
@Override
public void reset() {
}
@Override
public void setLocale(Locale loc) {
}
@Override
public Locale getLocale() {
return null;
}
}
/*
* Copyright (c) 2009-present, b3log.org
*
* Licensed 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.b3log.solo;
import io.netty.handler.codec.http.HttpRequest;
import org.b3log.latke.http.Request;
/**
* Mock HTTP request.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 2.0.0.0, Nov 2, 2019
* @since 3.6.7
*/
public class MockRequest extends Request {
public MockRequest(final HttpRequest req) {
super(null, req);
}
}
\ No newline at end of file
/*
* Copyright (c) 2009-present, b3log.org
*
* Licensed 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.b3log.solo;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponse;
import org.b3log.latke.http.Response;
/**
* Mock HTTP response.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 2.0.0.0, Nov 3, 2019
* @since 3.6.7
*/
public class MockResponse extends Response {
public MockResponse(final HttpResponse res) {
super(null, res);
}
}
...@@ -22,8 +22,8 @@ import org.apache.commons.lang.time.DateFormatUtils; ...@@ -22,8 +22,8 @@ import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -55,13 +55,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -55,13 +55,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getArchivesArticlesByPage() { public void getArchivesArticlesByPage() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/articles/archives/" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM")); request.setRequestURI("/articles/archives/" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM"));
request.putParameter("p", "1"); request.setParameter("p", "1");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true"));
} }
...@@ -75,13 +75,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -75,13 +75,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/get-article-content"); request.setRequestURI("/get-article-content");
request.putParameter("id", articleId); request.setParameter("id", articleId);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "Solo 博客系统已经初始化完毕")); Assert.assertTrue(StringUtils.contains(content, "Solo 博客系统已经初始化完毕"));
} }
...@@ -90,13 +90,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -90,13 +90,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getArticlesByPage() { public void getArticlesByPage() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/articles"); request.setRequestURI("/articles");
request.putParameter("p", "1"); request.setParameter("p", "1");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true"));
} }
...@@ -110,13 +110,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -110,13 +110,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final JSONObject admin = getUserRepository().getAdmin(); final JSONObject admin = getUserRepository().getAdmin();
final String userId = admin.optString(Keys.OBJECT_ID); final String userId = admin.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/articles/authors/" + userId); request.setRequestURI("/articles/authors/" + userId);
request.putParameter("p", "1"); request.setParameter("p", "1");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true"));
} }
...@@ -125,13 +125,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -125,13 +125,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getRandomArticles() { public void getRandomArticles() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/articles/random"); request.setRequestURI("/articles/random");
request.setMethod("POST"); request.setMethod("POST");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"randomArticles")); Assert.assertTrue(StringUtils.contains(content, "{\"randomArticles"));
} }
...@@ -145,12 +145,12 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -145,12 +145,12 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/article/id/" + articleId + "/relevant/articles"); request.setRequestURI("/article/id/" + articleId + "/relevant/articles");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"relevantArticles\"")); Assert.assertTrue(StringUtils.contains(content, "{\"relevantArticles\""));
} }
...@@ -159,13 +159,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -159,13 +159,13 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getTagArticlesByPage() { public void getTagArticlesByPage() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/articles/tags/Solo"); request.setRequestURI("/articles/tags/Solo");
request.putParameter("p", "1"); request.setParameter("p", "1");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "{\"sc\":true"));
} }
...@@ -174,14 +174,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -174,14 +174,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showArchiveArticles() { public void showArchiveArticles() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/archives/" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM")); request.setRequestURI("/archives/" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM"));
request.putParameter("p", "1"); request.setParameter("p", "1");
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客</title>"));
} }
...@@ -194,14 +194,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -194,14 +194,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
public void showArticle() throws Exception { public void showArticle() throws Exception {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/article"); request.setRequestURI("/article");
request.setAttribute(Article.ARTICLE, article); request.setAttribute(Article.ARTICLE, article);
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客</title>"));
} }
...@@ -215,14 +215,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -215,14 +215,14 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article-pwd"); request.setRequestURI("/console/article-pwd");
request.putParameter("articleId", articleId); request.setParameter("articleId", articleId);
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>访问密码 - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>访问密码 - Solo 的个人博客</title>"));
} }
......
...@@ -19,8 +19,8 @@ package org.b3log.solo.processor; ...@@ -19,8 +19,8 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -49,12 +49,12 @@ public class BlogProcessorTestCase extends AbstractTestCase { ...@@ -49,12 +49,12 @@ public class BlogProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getBlogInfo() { public void getBlogInfo() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/blog/info"); request.setRequestURI("/blog/info");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.startsWith(content, "{\"staticServePath\":\"http://localhost:8080\"")); Assert.assertTrue(StringUtils.startsWith(content, "{\"staticServePath\":\"http://localhost:8080\""));
} }
...@@ -63,13 +63,13 @@ public class BlogProcessorTestCase extends AbstractTestCase { ...@@ -63,13 +63,13 @@ public class BlogProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getArticlesTags() { public void getArticlesTags() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/blog/articles-tags"); request.setRequestURI("/blog/articles-tags");
request.putParameter("pwd", "pass"); request.setParameter("pwd", "pass");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.startsWith(content, "{\"data\":")); Assert.assertTrue(StringUtils.startsWith(content, "{\"data\":"));
} }
} }
...@@ -20,8 +20,8 @@ package org.b3log.solo.processor; ...@@ -20,8 +20,8 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.b3log.solo.model.Category; import org.b3log.solo.model.Category;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -53,12 +53,10 @@ public class CategoryProcessorTestCase extends AbstractTestCase { ...@@ -53,12 +53,10 @@ public class CategoryProcessorTestCase extends AbstractTestCase {
/** /**
* showCategoryArticles. * showCategoryArticles.
*
* @throws Exception exception
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showCategoryArticles() throws Exception { public void showCategoryArticles() {
MockHttpServletRequest request = mockRequest(); MockRequest request = mockRequest();
request.setRequestURI("/console/category/"); request.setRequestURI("/console/category/");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -66,12 +64,11 @@ public class CategoryProcessorTestCase extends AbstractTestCase { ...@@ -66,12 +64,11 @@ public class CategoryProcessorTestCase extends AbstractTestCase {
requestJSON.put(Category.CATEGORY_TITLE, "分类1"); requestJSON.put(Category.CATEGORY_TITLE, "分类1");
requestJSON.put(Category.CATEGORY_URI, "cate1"); requestJSON.put(Category.CATEGORY_URI, "cate1");
final BufferedReader reader = new BufferedReader(new StringReader(requestJSON.toString())); request.setJSON(requestJSON);
request.setReader(reader);
mockAdminLogin(request); mockAdminLogin(request);
MockHttpServletResponse response = mockResponse(); MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
request = mockRequest(); request = mockRequest();
...@@ -81,7 +78,7 @@ public class CategoryProcessorTestCase extends AbstractTestCase { ...@@ -81,7 +78,7 @@ public class CategoryProcessorTestCase extends AbstractTestCase {
response = mockResponse(); response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>分类1 - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>分类1 - Solo 的个人博客</title>"));
} }
} }
...@@ -22,8 +22,6 @@ import org.b3log.latke.Keys; ...@@ -22,8 +22,6 @@ import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
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.model.Option;
...@@ -64,7 +62,7 @@ public class CommentProcessorTestCase extends AbstractTestCase { ...@@ -64,7 +62,7 @@ public class CommentProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void addArticleComment() throws Exception { public void addArticleComment() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/article/comments"); request.setRequestURI("/article/comments");
request.setMethod("POST"); request.setMethod("POST");
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
...@@ -81,10 +79,10 @@ public class CommentProcessorTestCase extends AbstractTestCase { ...@@ -81,10 +79,10 @@ public class CommentProcessorTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
......
...@@ -19,8 +19,8 @@ package org.b3log.solo.processor; ...@@ -19,8 +19,8 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -49,12 +49,12 @@ public class ErrorProcessorTestCase extends AbstractTestCase { ...@@ -49,12 +49,12 @@ public class ErrorProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showErrorPage() { public void showErrorPage() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/error/403"); request.setRequestURI("/error/403");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>403 Forbidden! - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>403 Forbidden! - Solo 的个人博客</title>"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -50,12 +48,12 @@ public class FeedProcessorTestCase extends AbstractTestCase { ...@@ -50,12 +48,12 @@ public class FeedProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void blogArticlesAtom() { public void blogArticlesAtom() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/atom.xml"); request.setRequestURI("/atom.xml");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\"")); Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\""));
} }
...@@ -64,12 +62,12 @@ public class FeedProcessorTestCase extends AbstractTestCase { ...@@ -64,12 +62,12 @@ public class FeedProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void blogArticlesRSS() { public void blogArticlesRSS() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/rss.xml"); request.setRequestURI("/rss.xml");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\"")); Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\""));
} }
} }
...@@ -18,14 +18,14 @@ ...@@ -18,14 +18,14 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.http.Cookie;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.b3log.solo.util.Solos; import org.b3log.solo.util.Solos;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import javax.servlet.http.Cookie;
import java.util.List; import java.util.List;
/** /**
...@@ -43,12 +43,12 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -43,12 +43,12 @@ public class IndexProcessorTestCase extends AbstractTestCase {
*/ */
@Test @Test
public void showStart() { public void showStart() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/start"); request.setRequestURI("/start");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>欢迎使用! - Solo</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>欢迎使用! - Solo</title>"));
} }
...@@ -67,12 +67,12 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -67,12 +67,12 @@ public class IndexProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showIndex() { public void showIndex() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/"); request.setRequestURI("/");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>Solo 的个人博客</title>"));
} }
...@@ -81,12 +81,12 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -81,12 +81,12 @@ public class IndexProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showKillBrowser() { public void showKillBrowser() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/kill-browser"); request.setRequestURI("/kill-browser");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>Kill IE! - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>Kill IE! - Solo 的个人博客</title>"));
} }
...@@ -95,12 +95,12 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -95,12 +95,12 @@ public class IndexProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void logout() { public void logout() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/logout"); request.setRequestURI("/logout");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final List<Cookie> cookies = response.cookies(); final List<Cookie> cookies = response.getCookies();
Assert.assertEquals(cookies.size(), 1); Assert.assertEquals(cookies.size(), 1);
Assert.assertEquals(cookies.get(0).getName(), Solos.COOKIE_NAME); Assert.assertEquals(cookies.get(0).getName(), Solos.COOKIE_NAME);
Assert.assertNull(cookies.get(0).getValue()); Assert.assertNull(cookies.get(0).getValue());
......
...@@ -17,11 +17,11 @@ ...@@ -17,11 +17,11 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import org.b3log.latke.servlet.DispatcherServlet; import org.b3log.latke.http.Dispatcher;
import org.b3log.latke.servlet.handler.*; import org.b3log.latke.http.Request;
import org.b3log.latke.http.Response;
import org.b3log.latke.http.handler.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -46,7 +46,7 @@ public class MockDispatcherServlet { ...@@ -46,7 +46,7 @@ public class MockDispatcherServlet {
HANDLERS.add(new AfterHandleHandler()); HANDLERS.add(new AfterHandleHandler());
} }
public void service(final HttpServletRequest req, final HttpServletResponse resp) { public void service(final Request req, final Response resp) {
DispatcherServlet.handle(req, resp); Dispatcher.handle(req, resp);
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -49,12 +47,12 @@ public class SearchProcessorTestCase extends AbstractTestCase { ...@@ -49,12 +47,12 @@ public class SearchProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showOpensearchXML() { public void showOpensearchXML() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/opensearch.xml"); request.setRequestURI("/opensearch.xml");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")); Assert.assertTrue(StringUtils.contains(content, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"));
} }
...@@ -63,14 +61,14 @@ public class SearchProcessorTestCase extends AbstractTestCase { ...@@ -63,14 +61,14 @@ public class SearchProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void search() { public void search() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/search"); request.setRequestURI("/search");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客搜索")); Assert.assertTrue(StringUtils.contains(content, "Solo 的个人博客搜索"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -49,12 +47,12 @@ public class SitemapProcessorTestCase extends AbstractTestCase { ...@@ -49,12 +47,12 @@ public class SitemapProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void sitemap() { public void sitemap() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/sitemap.xml"); request.setRequestURI("/sitemap.xml");
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\"")); Assert.assertTrue(StringUtils.startsWith(content, "<?xml version=\"1.0\""));
} }
} }
...@@ -20,8 +20,6 @@ package org.b3log.solo.processor; ...@@ -20,8 +20,6 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,13 +49,13 @@ public class TagProcessorTestCase extends AbstractTestCase { ...@@ -51,13 +49,13 @@ public class TagProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showTagArticles() { public void showTagArticles() {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/tags/Solo"); request.setRequestURI("/tags/Solo");
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>Solo 标签 - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>Solo 标签 - Solo 的个人博客</title>"));
} }
} }
...@@ -20,8 +20,6 @@ package org.b3log.solo.processor; ...@@ -20,8 +20,6 @@ package org.b3log.solo.processor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,13 +49,13 @@ public class UserTemplateProcessorTestCase extends AbstractTestCase { ...@@ -51,13 +49,13 @@ public class UserTemplateProcessorTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showCategoryArticles() { public void showCategoryArticles() {
MockHttpServletRequest request = mockRequest(); MockRequest request = mockRequest();
request.setRequestURI("/links.html"); request.setRequestURI("/links.html");
request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME); request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
MockHttpServletResponse response = mockResponse(); MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<title>友情链接 - Solo 的个人博客</title>")); Assert.assertTrue(StringUtils.contains(content, "<title>友情链接 - Solo 的个人博客</title>"));
} }
} }
...@@ -19,8 +19,8 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,8 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest; import org.b3log.solo.MockRequest;
import org.b3log.solo.MockHttpServletResponse; import org.b3log.solo.MockResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,14 +51,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -51,14 +51,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showAdminIndex() throws Exception { public void showAdminIndex() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/admin-index.do"); request.setRequestURI("/admin-index.do");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "后台管理 - Solo 的个人博客")); Assert.assertTrue(StringUtils.contains(content, "后台管理 - Solo 的个人博客"));
} }
...@@ -69,14 +69,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -69,14 +69,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showAdminFunctions() throws Exception { public void showAdminFunctions() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/admin-article.do"); request.setRequestURI("/admin-article.do");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<div class=\"form\">")); Assert.assertTrue(StringUtils.contains(content, "<div class=\"form\">"));
} }
...@@ -87,14 +87,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -87,14 +87,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void showAdminPreferenceFunction() throws Exception { public void showAdminPreferenceFunction() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/admin-preference.do"); request.setRequestURI("/admin-preference.do");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "信息配置")); Assert.assertTrue(StringUtils.contains(content, "信息配置"));
} }
...@@ -105,14 +105,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -105,14 +105,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void exportSQL() throws Exception { public void exportSQL() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/export/sql"); request.setRequestURI("/console/export/sql");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final long outputBytes = response.outputBytes(); final long outputBytes = response.getContent().length;
Assert.assertTrue(0 < outputBytes); Assert.assertTrue(0 < outputBytes);
} }
...@@ -123,14 +123,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -123,14 +123,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void exportJSON() throws Exception { public void exportJSON() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/export/json"); request.setRequestURI("/console/export/json");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final long outputBytes = response.outputBytes(); final long outputBytes = response.getContent().length;
Assert.assertTrue(0 < outputBytes); Assert.assertTrue(0 < outputBytes);
} }
...@@ -141,14 +141,14 @@ public class AdminConsoleTestCase extends AbstractTestCase { ...@@ -141,14 +141,14 @@ public class AdminConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void exportHexo() throws Exception { public void exportHexo() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/export/hexo"); request.setRequestURI("/console/export/hexo");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final long outputBytes = response.outputBytes(); final long outputBytes = response.getContent().length;
Assert.assertTrue(0 < outputBytes); Assert.assertTrue(0 < outputBytes);
} }
} }
...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils; ...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.json.JSONObject; import org.json.JSONObject;
import org.testng.Assert; import org.testng.Assert;
...@@ -58,14 +56,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -58,14 +56,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getArticleThumbs() throws Exception { public void getArticleThumbs() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/thumbs"); request.setRequestURI("/console/thumbs");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -76,7 +74,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -76,7 +74,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void markdown2HTML() throws Exception { public void markdown2HTML() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/markdown/2html"); request.setRequestURI("/console/markdown/2html");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -85,11 +83,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -85,11 +83,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
request.setReader(reader); request.setReader(reader);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "<p><strong>Solo<\\/strong><\\/p>")); Assert.assertTrue(StringUtils.contains(content, "<p><strong>Solo<\\/strong><\\/p>"));
} }
...@@ -103,14 +101,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -103,14 +101,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/" + articleId); request.setRequestURI("/console/article/" + articleId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -121,14 +119,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -121,14 +119,14 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getArticles() throws Exception { public void getArticles() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/articles/status/published/1/10/20"); request.setRequestURI("/console/articles/status/published/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -142,15 +140,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -142,15 +140,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/" + articleId); request.setRequestURI("/console/article/" + articleId);
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -164,15 +162,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -164,15 +162,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/unpublish/" + articleId); request.setRequestURI("/console/article/unpublish/" + articleId);
request.setMethod("PUT"); request.setMethod("PUT");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -186,15 +184,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -186,15 +184,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/canceltop/" + articleId); request.setRequestURI("/console/article/canceltop/" + articleId);
request.setMethod("PUT"); request.setMethod("PUT");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -208,15 +206,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -208,15 +206,15 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/puttop/" + articleId); request.setRequestURI("/console/article/puttop/" + articleId);
request.setMethod("PUT"); request.setMethod("PUT");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -229,7 +227,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -229,7 +227,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
public void updateArticle() throws Exception { public void updateArticle() throws Exception {
final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0); final JSONObject article = getArticleRepository().get(new Query()).optJSONArray(Keys.RESULTS).optJSONObject(0);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/"); request.setRequestURI("/console/article/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -238,11 +236,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -238,11 +236,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
request.setReader(reader); request.setReader(reader);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
...@@ -257,7 +255,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -257,7 +255,7 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
article.put(Keys.OBJECT_ID, ""); article.put(Keys.OBJECT_ID, "");
article.put(Article.ARTICLE_PERMALINK, ""); article.put(Article.ARTICLE_PERMALINK, "");
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/"); request.setRequestURI("/console/article/");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -266,11 +264,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase { ...@@ -266,11 +264,11 @@ public class ArticleConsoleTestCase extends AbstractTestCase {
request.setReader(reader); request.setReader(reader);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "\"sc\":true")); Assert.assertTrue(StringUtils.contains(content, "\"sc\":true"));
} }
} }
...@@ -20,8 +20,6 @@ package org.b3log.solo.processor.console; ...@@ -20,8 +20,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Category; import org.b3log.solo.model.Category;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -58,7 +56,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -58,7 +56,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void addCategory() throws Exception { public void addCategory() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/category/"); request.setRequestURI("/console/category/");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -70,10 +68,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -70,10 +68,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
request.setReader(reader); request.setReader(reader);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -86,16 +84,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -86,16 +84,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
public void getCategory() throws Exception { public void getCategory() throws Exception {
final JSONObject category = getCategoryQueryService().getByTitle("分类1"); final JSONObject category = getCategoryQueryService().getByTitle("分类1");
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/category/" + category.optString(Keys.OBJECT_ID)); request.setRequestURI("/console/category/" + category.optString(Keys.OBJECT_ID));
request.setMethod("GET"); request.setMethod("GET");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -106,7 +104,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -106,7 +104,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "addCategory") @Test(dependsOnMethods = "addCategory")
public void updateCategory() throws Exception { public void updateCategory() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/category/"); request.setRequestURI("/console/category/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -119,10 +117,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -119,10 +117,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
category = getCategoryQueryService().getByTitle("分类1"); category = getCategoryQueryService().getByTitle("分类1");
...@@ -140,16 +138,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -140,16 +138,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "updateCategory") @Test(dependsOnMethods = "updateCategory")
public void getCategories() throws Exception { public void getCategories() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/categories/1/10/20"); request.setRequestURI("/console/categories/1/10/20");
request.setMethod("GET"); request.setMethod("GET");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -162,7 +160,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -162,7 +160,7 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
public void changeOrder() throws Exception { public void changeOrder() throws Exception {
final JSONObject category = getCategoryQueryService().getByTitle("新的分类1"); final JSONObject category = getCategoryQueryService().getByTitle("新的分类1");
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/category/order/"); request.setRequestURI("/console/category/order/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -173,10 +171,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -173,10 +171,10 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -189,16 +187,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase { ...@@ -189,16 +187,16 @@ public class CategoryConsoleTestCase extends AbstractTestCase {
public void removeCategory() throws Exception { public void removeCategory() throws Exception {
final JSONObject category = getCategoryQueryService().getByTitle("新的分类1"); final JSONObject category = getCategoryQueryService().getByTitle("新的分类1");
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/category/" + category.optString(Keys.OBJECT_ID)); request.setRequestURI("/console/category/" + category.optString(Keys.OBJECT_ID));
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -20,8 +20,6 @@ package org.b3log.solo.processor.console; ...@@ -20,8 +20,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.json.JSONObject; import org.json.JSONObject;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -55,15 +53,15 @@ public class CommentConsoleTestCase extends AbstractTestCase { ...@@ -55,15 +53,15 @@ public class CommentConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getComments() throws Exception { public void getComments() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/comments/1/10/20"); request.setRequestURI("/console/comments/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -78,15 +76,15 @@ public class CommentConsoleTestCase extends AbstractTestCase { ...@@ -78,15 +76,15 @@ public class CommentConsoleTestCase extends AbstractTestCase {
final JSONObject article = recentArticles.get(0); final JSONObject article = recentArticles.get(0);
final String articleId = article.optString(Keys.OBJECT_ID); final String articleId = article.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/comments/article/" + articleId); request.setRequestURI("/console/comments/article/" + articleId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -101,16 +99,16 @@ public class CommentConsoleTestCase extends AbstractTestCase { ...@@ -101,16 +99,16 @@ public class CommentConsoleTestCase extends AbstractTestCase {
final JSONObject comment = recentComments.get(0); final JSONObject comment = recentComments.get(0);
final String commentId = comment.optString(Keys.OBJECT_ID); final String commentId = comment.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/article/comment/" + commentId); request.setRequestURI("/console/article/comment/" + commentId);
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils; ...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Link; import org.b3log.solo.model.Link;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -59,7 +57,7 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -59,7 +57,7 @@ public class LinkConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void addLink() throws Exception { public void addLink() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/link/"); request.setRequestURI("/console/link/");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -74,10 +72,10 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -74,10 +72,10 @@ public class LinkConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -91,7 +89,7 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -91,7 +89,7 @@ public class LinkConsoleTestCase extends AbstractTestCase {
final JSONObject l = getLinkRepository().getList(new Query()).get(0); final JSONObject l = getLinkRepository().getList(new Query()).get(0);
final String linkId = l.optString(Keys.OBJECT_ID); final String linkId = l.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/link/"); request.setRequestURI("/console/link/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -107,10 +105,10 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -107,10 +105,10 @@ public class LinkConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -124,7 +122,7 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -124,7 +122,7 @@ public class LinkConsoleTestCase extends AbstractTestCase {
final JSONObject l = getLinkRepository().getList(new Query()).get(0); final JSONObject l = getLinkRepository().getList(new Query()).get(0);
final String linkId = l.optString(Keys.OBJECT_ID); final String linkId = l.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/link/order/"); request.setRequestURI("/console/link/order/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -135,10 +133,10 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -135,10 +133,10 @@ public class LinkConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -152,15 +150,15 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -152,15 +150,15 @@ public class LinkConsoleTestCase extends AbstractTestCase {
final JSONObject l = getLinkRepository().getList(new Query()).get(0); final JSONObject l = getLinkRepository().getList(new Query()).get(0);
final String linkId = l.optString(Keys.OBJECT_ID); final String linkId = l.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/link/" + linkId); request.setRequestURI("/console/link/" + linkId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -171,15 +169,15 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -171,15 +169,15 @@ public class LinkConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "getLink") @Test(dependsOnMethods = "getLink")
public void getLinks() throws Exception { public void getLinks() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/links/1/10/20"); request.setRequestURI("/console/links/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -193,16 +191,16 @@ public class LinkConsoleTestCase extends AbstractTestCase { ...@@ -193,16 +191,16 @@ public class LinkConsoleTestCase extends AbstractTestCase {
final JSONObject l = getLinkRepository().getList(new Query()).get(0); final JSONObject l = getLinkRepository().getList(new Query()).get(0);
final String linkId = l.optString(Keys.OBJECT_ID); final String linkId = l.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/link/" + linkId); request.setRequestURI("/console/link/" + linkId);
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,16 +49,16 @@ public class OtherConsoleTestCase extends AbstractTestCase { ...@@ -51,16 +49,16 @@ public class OtherConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void removeUnusedArchives() throws Exception { public void removeUnusedArchives() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/archive/unused"); request.setRequestURI("/console/archive/unused");
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils; ...@@ -21,8 +21,6 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -59,7 +57,7 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -59,7 +57,7 @@ public class PageConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void addPage() throws Exception { public void addPage() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/page/"); request.setRequestURI("/console/page/");
request.setMethod("POST"); request.setMethod("POST");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -74,10 +72,10 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -74,10 +72,10 @@ public class PageConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -90,7 +88,7 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -90,7 +88,7 @@ public class PageConsoleTestCase extends AbstractTestCase {
public void updatePage() throws Exception { public void updatePage() throws Exception {
final JSONObject p = getPageRepository().getList(new Query()).get(0); final JSONObject p = getPageRepository().getList(new Query()).get(0);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/page/"); request.setRequestURI("/console/page/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -100,10 +98,10 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -100,10 +98,10 @@ public class PageConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -117,7 +115,7 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -117,7 +115,7 @@ public class PageConsoleTestCase extends AbstractTestCase {
final JSONObject p = getPageRepository().getList(new Query()).get(0); final JSONObject p = getPageRepository().getList(new Query()).get(0);
final String pageId = p.optString(Keys.OBJECT_ID); final String pageId = p.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/page/order/"); request.setRequestURI("/console/page/order/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -128,10 +126,10 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -128,10 +126,10 @@ public class PageConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -145,15 +143,15 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -145,15 +143,15 @@ public class PageConsoleTestCase extends AbstractTestCase {
final JSONObject p = getPageRepository().getList(new Query()).get(0); final JSONObject p = getPageRepository().getList(new Query()).get(0);
final String pageId = p.optString(Keys.OBJECT_ID); final String pageId = p.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/page/" + pageId); request.setRequestURI("/console/page/" + pageId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -164,15 +162,15 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -164,15 +162,15 @@ public class PageConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "getPage") @Test(dependsOnMethods = "getPage")
public void getPages() throws Exception { public void getPages() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/pages/1/10/20"); request.setRequestURI("/console/pages/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -186,16 +184,16 @@ public class PageConsoleTestCase extends AbstractTestCase { ...@@ -186,16 +184,16 @@ public class PageConsoleTestCase extends AbstractTestCase {
final JSONObject p = getPageRepository().getList(new Query()).get(0); final JSONObject p = getPageRepository().getList(new Query()).get(0);
final String pageId = p.optString(Keys.OBJECT_ID); final String pageId = p.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/page/" + pageId); request.setRequestURI("/console/page/" + pageId);
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,15 +49,15 @@ public class PluginConsoleTestCase extends AbstractTestCase { ...@@ -51,15 +49,15 @@ public class PluginConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getPlugins() throws Exception { public void getPlugins() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/plugins/1/10/20"); request.setRequestURI("/console/plugins/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.json.JSONObject; import org.json.JSONObject;
import org.testng.Assert; import org.testng.Assert;
...@@ -56,15 +54,15 @@ public class PreferenceConsoleTestCase extends AbstractTestCase { ...@@ -56,15 +54,15 @@ public class PreferenceConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getSigns() throws Exception { public void getSigns() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/signs/"); request.setRequestURI("/console/signs/");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -75,15 +73,15 @@ public class PreferenceConsoleTestCase extends AbstractTestCase { ...@@ -75,15 +73,15 @@ public class PreferenceConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getPreference() throws Exception { public void getPreference() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/preference/"); request.setRequestURI("/console/preference/");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -96,7 +94,7 @@ public class PreferenceConsoleTestCase extends AbstractTestCase { ...@@ -96,7 +94,7 @@ public class PreferenceConsoleTestCase extends AbstractTestCase {
public void updatePreference() throws Exception { public void updatePreference() throws Exception {
final JSONObject p = getOptionQueryService().getPreference(); final JSONObject p = getOptionQueryService().getPreference();
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/preference/"); request.setRequestURI("/console/preference/");
request.setMethod("PUT"); request.setMethod("PUT");
final JSONObject requestJSON = new JSONObject(); final JSONObject requestJSON = new JSONObject();
...@@ -106,10 +104,10 @@ public class PreferenceConsoleTestCase extends AbstractTestCase { ...@@ -106,10 +104,10 @@ public class PreferenceConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,15 +49,15 @@ public class RepairConsoleTestCase extends AbstractTestCase { ...@@ -51,15 +49,15 @@ public class RepairConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void restoreSigns() throws Exception { public void restoreSigns() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/fix/restore-signs"); request.setRequestURI("/fix/restore-signs");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "Restore signs succeeded.")); Assert.assertTrue(StringUtils.contains(content, "Restore signs succeeded."));
} }
} }
...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console; ...@@ -19,8 +19,6 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -51,15 +49,15 @@ public class TagConsoleTestCase extends AbstractTestCase { ...@@ -51,15 +49,15 @@ public class TagConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "init") @Test(dependsOnMethods = "init")
public void getTags() throws Exception { public void getTags() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/tags"); request.setRequestURI("/console/tags");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -70,15 +68,15 @@ public class TagConsoleTestCase extends AbstractTestCase { ...@@ -70,15 +68,15 @@ public class TagConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "getTags") @Test(dependsOnMethods = "getTags")
public void getUnusedTags() throws Exception { public void getUnusedTags() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/tag/unused"); request.setRequestURI("/console/tag/unused");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -89,16 +87,16 @@ public class TagConsoleTestCase extends AbstractTestCase { ...@@ -89,16 +87,16 @@ public class TagConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "getUnusedTags") @Test(dependsOnMethods = "getUnusedTags")
public void removeUnusedTags() throws Exception { public void removeUnusedTags() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/tag/unused"); request.setRequestURI("/console/tag/unused");
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
...@@ -19,11 +19,8 @@ package org.b3log.solo.processor.console; ...@@ -19,11 +19,8 @@ package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.MockHttpServletRequest;
import org.b3log.solo.MockHttpServletResponse;
import org.json.JSONObject; import org.json.JSONObject;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
...@@ -60,7 +57,7 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -60,7 +57,7 @@ public class UserConsoleTestCase extends AbstractTestCase {
public void updateUser() throws Exception { public void updateUser() throws Exception {
final JSONObject u = getUserRepository().getFirst(new Query()); final JSONObject u = getUserRepository().getFirst(new Query());
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/user/"); request.setRequestURI("/console/user/");
request.setMethod("PUT"); request.setMethod("PUT");
final BufferedReader reader = new BufferedReader(new StringReader(u.toString())); final BufferedReader reader = new BufferedReader(new StringReader(u.toString()));
...@@ -68,10 +65,10 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -68,10 +65,10 @@ public class UserConsoleTestCase extends AbstractTestCase {
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -85,15 +82,15 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -85,15 +82,15 @@ public class UserConsoleTestCase extends AbstractTestCase {
final JSONObject u = getUserRepository().getFirst(new Query()); final JSONObject u = getUserRepository().getFirst(new Query());
final String userId = u.optString(Keys.OBJECT_ID); final String userId = u.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/user/" + userId); request.setRequestURI("/console/user/" + userId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -104,15 +101,15 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -104,15 +101,15 @@ public class UserConsoleTestCase extends AbstractTestCase {
*/ */
@Test(dependsOnMethods = "getUser") @Test(dependsOnMethods = "getUser")
public void getUsers() throws Exception { public void getUsers() throws Exception {
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/users/1/10/20"); request.setRequestURI("/console/users/1/10/20");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -126,15 +123,15 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -126,15 +123,15 @@ public class UserConsoleTestCase extends AbstractTestCase {
final JSONObject u = getUserRepository().getFirst(new Query()); final JSONObject u = getUserRepository().getFirst(new Query());
final String userId = u.optString(Keys.OBJECT_ID); final String userId = u.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/changeRole/" + userId); request.setRequestURI("/console/changeRole/" + userId);
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
...@@ -148,16 +145,16 @@ public class UserConsoleTestCase extends AbstractTestCase { ...@@ -148,16 +145,16 @@ public class UserConsoleTestCase extends AbstractTestCase {
final JSONObject u = getUserRepository().getFirst(new Query()); final JSONObject u = getUserRepository().getFirst(new Query());
final String userId = u.optString(Keys.OBJECT_ID); final String userId = u.optString(Keys.OBJECT_ID);
final MockHttpServletRequest request = mockRequest(); final MockRequest request = mockRequest();
request.setRequestURI("/console/user/" + userId); request.setRequestURI("/console/user/" + userId);
request.setMethod("DELETE"); request.setMethod("DELETE");
mockAdminLogin(request); mockAdminLogin(request);
final MockHttpServletResponse response = mockResponse(); final MockResponse response = mockResponse();
mockDispatcherServletService(request, response); mockDispatcherServletService(request, response);
final String content = response.body(); final String content = response.getContentStr();
Assert.assertTrue(StringUtils.contains(content, "sc\":true")); Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
} }
} }
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