DocRestController.java
package sk.iway.iwcm.rest;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.HandlerMapping;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.doc.GroupDetails;
import sk.iway.iwcm.doc.GroupsDB;
import sk.iway.iwcm.users.UsersDB;
/**
* DocRestController.java
* <br>
* <br>Returns DocDetails object of requested document(web-page)
*
*Title webjet8
*Company Interway s.r.o. (www.interway.sk)
*Copyright Interway s.r.o. (c) 2001-2017
*@author $Author: jeeff rzapach $
*@version $Revision: 1.3 $
*created Date: 16.1.2017 14:11:45
*modified $Date: 2004/08/16 06:26:11 $
*/
@RestController
public class DocRestController extends sk.iway.iwcm.rest.RestController
{
/**
* Returns DocDetails object for given docId or virtualPath. If virtualPath contains .html it has to be replaced to -html
* <br>
* <br>Examples:
* <br>
* <br>1)
* <br>URL - /rest/documents/50124
* <br>2)
* <br>URL - /rest/documents/en/gallery/kitchen
* <br>3)
* <br>URL - /rest/documents/en/home-html
*
* @param request - http request
* @param param docId, or virtualPath
* @return DocDetails object
*/
@RequestMapping(path={"/rest/documents/{param}/**"}, method=RequestMethod.GET)
public DocDetails getDoc(HttpServletRequest request, @PathVariable String param)
{
if(!isIpAddressAllowed(request))
return null;
int docId = getDocId(param, (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE), request);
DocDetails result = DocDB.getInstance().getDoc(docId);
if (result != null)
{
if (result.isAvailable()==false) return null;
GroupDetails group = GroupsDB.getInstance().getGroup(result.getGroupId());
if (group == null || group.isInternal()) return null;
//kontrola prav
Identity user = UsersDB.getCurrentUser(request);
if (DocDB.canAccess(result, user, true) == false)
{
return null;
}
}
return result;
}
/**
* param je bud docId, alebo prva cast url stranky
*
* @param param - URL adresa stranky alebo docId
* @param calledUrl - cele volane URL rest sluzby
* @return - normovane docId
*/
private int getDocId(String param, String calledUrl, HttpServletRequest request)
{
int docId;
String restOfTheUrl = calledUrl.substring( ("/rest/documents/"+param).length() );
//String restOfTheUrl = calledUrl.replace("/rest/documents/"+param, "");
if(Tools.isEmpty(restOfTheUrl) || restOfTheUrl.equals("/"))
{
docId = Tools.getIntValue(param, -1);
}
else
{
String docUrl = "/"+param+restOfTheUrl;
if(!docUrl.contains("-html") && docUrl.charAt(docUrl.length()-1)!='/')
docUrl += '/';
docId = DocDB.getDocIdFromURL(docUrl.replace("-html", ".html"), DocDB.getDomain(request));
}
return docId;
}
}