blob: 1bcd1f4d0e54991e1c8ba6c0b6502a930224aa8f [file] [log] [blame]
package net.eyde.personalblog.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.eyde.personalblog.service.PersonalBlogService;
import net.eyde.personalblog.service.ServiceException;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.checkerframework.checker.tainting.qual.Untainted;
/**
* Description of the Class
*
* @author NEyde
* @created September 17, 2002
*/
public final class ReadAction extends BlogGeneralAction {
/**
* Process the specified HTTP request, and create the corresponding HTTP response (or forward to
* another web component that will create it). Return an ActionForward instance describing where
* and how control should be forwarded, or null if the response has already been completed.
*
* @param mapping The ActionMapping used to select this instance
* @param request The HTTP request we are processing
* @param response The HTTP response we are creating
* @param form Description of the Parameter
* @return Description of the Return Value
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet exception occurs
*/
@Override
public ActionForward executeSub(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
ActionErrors errors = new ActionErrors();
String forward = "readposts";
// Get request parameters
String reqCategory = cleanNull(request.getParameter("cat"));
// Get instance of PersonalBlog Service
PersonalBlogService pblog = PersonalBlogService.getInstance();
// Set Request Parameters
// Depending on the parameters, call the appropriate method
try {
if (!reqCategory.equals("")) {
request.setAttribute("posts", pblog.getPostsByCategory(reqCategory));
} else {
request.setAttribute("posts", pblog.getPosts());
}
} catch (ServiceException e) {
ActionMessages messages = new ActionMessages();
ActionMessage message = new ActionMessage("exception.postdoesnotexist");
messages.add(ActionMessages.GLOBAL_MESSAGE, message);
errors.add(messages);
e.printStackTrace();
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
}
return (mapping.findForward(forward));
}
/**
* Validates userInput: verifies that it cannot be used for an attack.
*
* <p>A string is valid if it contains only letters, digits, and whitespace.
*
* @param userInput user input to be validated
* @return the input if it is valid
* @throws IllegalArgumentException if userInput is not valid
*/
@Untainted String validate(String userInput) {
for (int i = 0; i < userInput.length(); ++i) {
char ch = userInput.charAt(i);
if (!Character.isLetter(ch) && !Character.isDigit(ch) && !Character.isWhitespace(ch))
throw new IllegalArgumentException("Illegal user input");
}
@SuppressWarnings("tainting")
@Untainted String result = userInput;
return result;
}
}
/* To fix the bug, replace line 48 by:
String reqCategory = validate(cleanNull(request.getParameter("cat")));
*/