From bf15c00f4b6a7154246b999c0894b58b7a9b54a4 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 25 May 2017 18:26:39 -0500 Subject: [PATCH] #11725 Validate wrong varNamea and return proper response. (#11726) * #11725 Validate wrong varNamea and return proper response. * #11725 Return NotFoundInDbException when field by var not found. --- .../com/dotcms/contenttype/business/FieldAPIImpl.java | 8 ++++---- .../dotcms/contenttype/business/FieldFactoryImpl.java | 9 +++++++-- .../dotcms/rest/api/v1/contenttype/FieldResource.java | 2 +- .../com/dotmarketing/servlets/BinaryExporterServlet.java | 7 +++++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java index 80ca60eae582..9a76561d5b04 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java @@ -226,13 +226,13 @@ public Field find(String id) throws DotDataException { public Field byContentTypeAndVar(ContentType type, String fieldVar) throws DotDataException { return fac.byContentTypeFieldVar(type, fieldVar); } - + @Override public Field byContentTypeIdAndVar(String id, String fieldVar) throws DotDataException { try { - return APILocator.getContentTypeAPI(APILocator.systemUser()).find(id).fieldMap().get(fieldVar); - } catch (Exception e) { - throw new DotDataException(e); + return byContentTypeAndVar(APILocator.getContentTypeAPI(APILocator.systemUser()).find(id), fieldVar); + } catch (DotSecurityException e) { + throw new DotDataException(e); } } diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java index 7580e87a437a..1bfd297b9122 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java @@ -58,8 +58,13 @@ public Field byId(String id) throws DotDataException { @Override public Field byContentTypeFieldVar(ContentType type, String var) throws DotDataException { - - return type.fieldMap().get(var); + Field field = type.fieldMap().get(var); + + if(field==null) { + throw new NotFoundInDbException("Field variable with var:" + var + " not found"); + } + + return field; } diff --git a/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldResource.java b/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldResource.java index 8b0351a07a00..e53c78aa8766 100644 --- a/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldResource.java +++ b/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldResource.java @@ -264,7 +264,7 @@ public Response updateContentTypeFieldByVar(@PathParam("typeId") final String ty } else { field = fapi.save(field, user); - + response = Response.ok(new ResponseEntityView(new JsonFieldTransformer(field).mapObject())).build(); } } diff --git a/dotCMS/src/main/java/com/dotmarketing/servlets/BinaryExporterServlet.java b/dotCMS/src/main/java/com/dotmarketing/servlets/BinaryExporterServlet.java index 8dc0fb97fb5b..c1a9bf745ec2 100644 --- a/dotCMS/src/main/java/com/dotmarketing/servlets/BinaryExporterServlet.java +++ b/dotCMS/src/main/java/com/dotmarketing/servlets/BinaryExporterServlet.java @@ -31,6 +31,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import com.dotcms.contenttype.exception.NotFoundInDbException; import com.dotcms.contenttype.model.type.ContentType; import com.dotcms.repackage.com.google.common.io.Files; import com.dotcms.repackage.org.apache.commons.collections.LRUMap; @@ -313,9 +314,11 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws Servl //Find the contentlet content type ContentType type = APILocator.getContentTypeAPI(APILocator.systemUser()).find((content.getContentTypeId())); //And the file asset field - com.dotcms.contenttype.model.field.Field field = APILocator.getContentTypeFieldAPI().byContentTypeAndVar(type, fieldVarName); + com.dotcms.contenttype.model.field.Field field; - if(field == null){ + try { + field = APILocator.getContentTypeFieldAPI().byContentTypeAndVar(type, fieldVarName); + } catch (NotFoundInDbException e) { Logger.debug(this,"Field " + fieldVarName + " does not exists within structure " + content.getStructure().getVelocityVarName()); resp.sendError(404); return;