Package org.vosao.servlet

Source Code of org.vosao.servlet.FormSendServlet

/**
* Vosao CMS. Simple CMS for Google App Engine.
*
* Copyright (C) 2009-2010 Vosao development team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
* email: vosao.dev@gmail.com
*/

package org.vosao.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.tanesha.recaptcha.ReCaptchaResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import org.vosao.common.UploadException;
import org.vosao.common.VosaoContext;
import org.vosao.entity.ConfigEntity;
import org.vosao.entity.FormEntity;
import org.vosao.i18n.Messages;
import org.vosao.utils.FileItem;
import org.vosao.utils.RecaptchaUtil;
import org.vosao.utils.StreamUtil;

/**
* Servlet for form submition in forms plugin.
*
* @author Aleksandr Oleynik
*/
public class FormSendServlet extends AbstractServlet {
 
  private static final long serialVersionUID = 1L;

  private static final long MAX_SIZE = 10000000;
  private static final String TEXT_MESSAGE = "{\"result\":\"%s\", \"message\":\"%s\"}";
  private static final String FORM_NAME_PARAM = "form-name";

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
    String message = null;
    Map<String, String> parameters = new HashMap<String, String>();
    List<FileItem> files = new ArrayList<FileItem>();
    try {
      if (request.getContentType().startsWith("multipart/form-data")) {
        ServletFileUpload upload = new ServletFileUpload();
        upload.setFileSizeMax(MAX_SIZE);
        upload.setHeaderEncoding("UTF-8");
        FileItemIterator iter;
        try {
          iter = upload.getItemIterator(request);
          InputStream stream = null;
          while (iter.hasNext()) {
            FileItemStream item = iter.next();
            stream = item.openStream();
            if (item.isFormField()) {
              parameters.put(item.getFieldName(),
                Streams.asString(stream, "UTF-8"));
            } else {
              files.add(new FileItem(item,
                StreamUtil.readFileStream(stream)));
            }
          }
        } catch (FileUploadException e) {
          logger.error(e.getMessage());
          throw new UploadException(Messages.get(
              "request_parsing_error"));
        }
      }
      else {
        for (Object key : request.getParameterMap().keySet()) {
          String paramName = (String)key;
          parameters.put(paramName, request.getParameter(paramName));
        }
      }
      message = processForm(parameters, files, request);
    } catch (UploadException e) {
      message = createMessage("error", e.getMessage());
      logger.error(message);
    }
    catch (Exception e) {
      message = createMessage("error", e.getMessage());
      logger.error(message);
      e.printStackTrace();
    }
    response.setContentType("text/html");
      response.setCharacterEncoding("UTF-8");
    response.setStatus(200);
    response.getWriter().write(message);
  }

  private String createMessage(final String result, final String message) {
    return String.format(TEXT_MESSAGE, result, message);
  }
 
  private String processForm(Map<String, String> parameters,
      List<FileItem> files, HttpServletRequest request)
      throws UploadException {
    String formName = parameters.get(FORM_NAME_PARAM);
    if (formName == null) {
      throw new UploadException(Messages.get(
          "form.name_parameter_not_found"));
    }
    FormEntity form = getDao().getFormDao().getByName(formName);
    if (form == null) {
      throw new UploadException(Messages.get("form.not_found", formName));
    }
    ConfigEntity config = VosaoContext.getInstance().getConfig();
    String challenge = parameters.get("recaptcha_challenge_field");
    String response = parameters.get("recaptcha_response_field");
    if (form.isEnableCaptcha() && config.isEnableRecaptcha()) {
      ReCaptchaResponse recaptchaResponse = RecaptchaUtil.check(
          config.getRecaptchaPublicKey(),
          config.getRecaptchaPrivateKey(),
          challenge, response, request);
      if (!recaptchaResponse.isValid()) {
        return createMessage("error", Messages.get("incorrect_captcha"));
      }
    }
    getBusiness().getFormBusiness().submit(form, parameters, files,
        request.getRemoteAddr());
    return createMessage("success", Messages.get("form.success_submit"));
  }
 
}
TOP

Related Classes of org.vosao.servlet.FormSendServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.