/*
* #%L
* BroadleafCommerce CMS Module
* %%
* Copyright (C) 2009 - 2013 Broadleaf Commerce
* %%
* 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.
* #L%
*/
package org.broadleafcommerce.cms.web.controller;
import org.broadleafcommerce.cms.page.service.PageService;
import org.broadleafcommerce.common.RequestDTO;
import org.broadleafcommerce.common.TimeDTO;
import org.broadleafcommerce.common.file.service.BroadleafFileUtils;
import org.broadleafcommerce.common.page.dto.PageDTO;
import org.broadleafcommerce.common.time.SystemTime;
import org.broadleafcommerce.common.web.BaseUrlResolver;
import org.broadleafcommerce.common.web.BroadleafRequestContext;
import org.broadleafcommerce.common.web.resource.BroadleafContextUtil;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* This class serves up the Robots.txt file. The default contents can be overridden by
* adding a Page named "/robots.txt" in the BLC admin or DB.
*
* @author bpolster
*/
public class BroadleafRobotsController {
public static final String BLC_RULE_MAP_PARAM = "blRuleMap";
// The following attribute is set in BroadleafProcessURLFilter
public static final String REQUEST_DTO = "blRequestDTO";
@Resource(name = "blBaseUrlResolver")
private BaseUrlResolver baseUrlResolver;
@Resource(name = "blPageService")
private PageService pageService;
@Resource(name = "blBroadleafContextUtil")
protected BroadleafContextUtil blcContextUtil;
public String getRobotsFile(HttpServletRequest request, HttpServletResponse response) {
blcContextUtil.establishThinRequestContext();
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
PageDTO page = pageService.findPageByURI(null,
"/robots.txt", buildMvelParameters(request), isSecure(request));
if (page != null && page.getPageFields().containsKey("body")) {
String body = (String) page.getPageFields().get("body");
body = body.replace("${siteBaseUrl}", baseUrlResolver.getSiteBaseUrl());
return body;
} else {
return getDefaultRobotsTxt();
}
}
public boolean isSecure(HttpServletRequest request) {
boolean secure = false;
if (request != null) {
secure = ("HTTPS".equalsIgnoreCase(request.getScheme()) || request.isSecure());
}
return secure;
}
/**
* Used to produce a working but simple robots.txt. Can be overridden in code or by defining a page
* managed in the Broadleaf CMS named "/robots.txt"
*
* @return
*/
protected String getDefaultRobotsTxt() {
StringBuilder sb = new StringBuilder();
sb.append("# Using default Broadleaf Commerce robots.txt file").append("\n");
sb.append("User-agent: *").append("\n");
sb.append("Disallow:").append("\n");
String fileLoc = BroadleafFileUtils.appendUnixPaths(baseUrlResolver.getSiteBaseUrl(), "/sitemap.xml.gz");
sb.append("Sitemap:").append(fileLoc);
return sb.toString();
}
/**
*
* @param request
* @return
*/
private Map<String, Object> buildMvelParameters(HttpServletRequest request) {
TimeDTO timeDto = new TimeDTO(SystemTime.asCalendar());
RequestDTO requestDto = (RequestDTO) request.getAttribute(REQUEST_DTO);
Map<String, Object> mvelParameters = new HashMap<String, Object>();
mvelParameters.put("time", timeDto);
mvelParameters.put("request", requestDto);
Map<String, Object> blcRuleMap = (Map<String, Object>) request.getAttribute(BLC_RULE_MAP_PARAM);
if (blcRuleMap != null) {
for (String mapKey : blcRuleMap.keySet()) {
mvelParameters.put(mapKey, blcRuleMap.get(mapKey));
}
}
return mvelParameters;
}
}