- XML parser framework rewrite
[mir.git] / source / mircoders / localizer / basic / MirBasicPostingSessionHandler.java
index 0152cab..786fd62 100755 (executable)
  */
 package mircoders.localizer.basic;
 
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
-import java.util.*;
+import java.util.Vector;
 
 import mir.config.MirPropertiesConfiguration;
-import mir.entity.Entity;
 import mir.log.LoggerWrapper;
 import mir.session.Request;
 import mir.session.Response;
@@ -47,15 +45,11 @@ import mir.session.SessionExc;
 import mir.session.SessionFailure;
 import mir.session.SessionHandler;
 import mir.session.UploadedFile;
+import mir.session.ValidationError;
 import mir.storage.StorageObject;
 import mir.util.ExceptionFunctions;
-import mircoders.entity.EntityComment;
 import mircoders.global.MirGlobal;
-import mircoders.media.MediaUploadProcessor;
-import mircoders.module.ModuleComment;
-import mircoders.storage.DatabaseComment;
-import mircoders.storage.DatabaseCommentToMedia;
-import mircoders.storage.DatabaseContent;
+import mircoders.module.ModuleMediaType;
 
 /**
  *
@@ -71,6 +65,12 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
   protected LoggerWrapper logger;
   protected MirPropertiesConfiguration configuration;
 
+  private String normalResponseGenerator;
+  private String dupeResponseGenerator;
+  private String unsupportedMediaTypeResponseGenerator;
+  private String finalResponseGenerator;
+
+
   public MirBasicPostingSessionHandler() {
     logger = new LoggerWrapper("Localizer.OpenPosting");
     try {
@@ -83,13 +83,31 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
     }
   }
 
+  protected void setNormalResponseGenerator(String aGenerator) {
+    normalResponseGenerator = aGenerator;
+  }
+
+  protected void setResponseGenerators(String aNormalResponseGenerator, String aDupeResponseGenerator,
+        String anUnsupportedMediaTypeResponseGenerator, String aFinalResponseGenerator) {
+    setNormalResponseGenerator(aNormalResponseGenerator);
+    dupeResponseGenerator = aDupeResponseGenerator;
+    unsupportedMediaTypeResponseGenerator = anUnsupportedMediaTypeResponseGenerator;
+    finalResponseGenerator = aFinalResponseGenerator;
+  }
+
   public void processRequest(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
-    if (aSession.getAttribute("initialRequest")==null) {
-      initialRequest(aRequest, aSession, aResponse);
-      aSession.setAttribute("initialRequest", "no");
+    if (MirGlobal.abuse().getOpenPostingDisabled()) {
+      makeOpenPostingDisabledResponse(aRequest, aSession, aResponse);
+      aSession.terminate();
     }
     else {
-      subsequentRequest(aRequest, aSession, aResponse);
+      if (aSession.getAttribute("initialRequest") == null) {
+        initialRequest(aRequest, aSession, aResponse);
+        aSession.setAttribute("initialRequest", "no");
+      }
+      else {
+        subsequentRequest(aRequest, aSession, aResponse);
+      }
     }
   };
 
@@ -101,7 +119,6 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
 
   public void subsequentRequest(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
     try {
-
       try {
         List validationErrors = new Vector();
 
@@ -149,12 +166,21 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
     logger.debug("referrer = " + aRequest.getHeader("Referer"));
 
     aSession.setAttribute("referer", aRequest.getHeader("Referer"));
-    aSession.setAttribute("nrmediaitems",
-        new Integer(configuration.getInt("ServletModule.OpenIndy.DefaultMediaUploadItems")));
   }
 
   protected void initializeResponseData(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
-    int nrMediaItems = ((Integer) aSession.getAttribute("nrmediaitems")).intValue();
+    int nrMediaItems = configuration.getInt("ServletModule.OpenIndy.DefaultMediaUploadItems", 5);
+
+    if (aSession.getAttribute("nrmediaitems")!=null) {
+      nrMediaItems = ((Integer) aSession.getAttribute("nrmediaitems")).intValue();
+    }
+    try {
+      nrMediaItems = Math.min(configuration.getInt("ServletModule.OpenIndy.MaxMediaUploadItems"), Integer.parseInt(aRequest.getParameter("nrmediaitems")));
+    }
+    catch (Throwable t) {
+    }
+    aSession.setAttribute("nrmediaitems", new Integer(nrMediaItems));
+
     List mediaItems = new Vector();
     int i=0;
 
@@ -170,9 +196,38 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
     aResponse.setResponseValue("errors", null);
   }
 
-  protected abstract void makeInitialResponse(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure;
-  protected abstract void makeResponse(Request aRequest, Session aSession, Response aResponse, List anErrors) throws SessionExc, SessionFailure;
-  protected abstract void makeFinalResponse(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure;
+  protected void makeInitialResponse(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
+    aResponse.setResponseGenerator(normalResponseGenerator);
+  };
+
+  protected void makeResponse(Request aRequest, Session aSession, Response aResponse, List anErrors) throws SessionExc, SessionFailure {
+    aResponse.setResponseValue("errors", anErrors);
+    aResponse.setResponseGenerator(normalResponseGenerator);
+  };
+
+  protected void makeFinalResponse(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
+    aResponse.setResponseGenerator(finalResponseGenerator);
+  };
+
+  protected void makeErrorResponse(Request aRequest, Session aSession, Response aResponse, Throwable anError) throws SessionExc, SessionFailure {
+    anError.printStackTrace();
+    Throwable rootCause = ExceptionFunctions.traceCauseException(anError);
+
+    if (rootCause instanceof DuplicatePostingExc)
+      aResponse.setResponseGenerator(dupeResponseGenerator);
+    if (rootCause instanceof ModuleMediaType.UnsupportedMimeTypeExc) {
+      aResponse.setResponseValue("mimetype", ((ModuleMediaType.UnsupportedMimeTypeExc) rootCause).getMimeType());
+      aResponse.setResponseGenerator(unsupportedMediaTypeResponseGenerator);
+    }
+    else {
+      aResponse.setResponseValue("errorstring", anError.getMessage());
+      aResponse.setResponseGenerator(configuration.getString("Localizer.OpenSession.ErrorTemplate"));
+    }
+  };
+
+  protected void makeOpenPostingDisabledResponse(Request aRequest, Session aSession, Response aResponse) {
+    aResponse.setResponseGenerator(configuration.getString("ServletModule.OpenIndy.PostingDisabledTemplate"));
+  }
 
   protected void preProcessRequest(Request aRequest, Session aSession) throws SessionExc, SessionFailure {
   };
@@ -182,15 +237,6 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
   };
 
   protected boolean shouldProcessRequest(Request aRequest, Session aSession, List aValidationErrors) throws SessionExc, SessionFailure {
-    int nrMediaItems = ((Integer) aSession.getAttribute("nrmediaitems")).intValue();
-    try {
-      nrMediaItems = Math.min(configuration.getInt("ServletModule.OpenIndy.MaxMediaUploadItems"), Integer.parseInt(aRequest.getParameter("nrmediaitems")));
-    }
-    catch (Throwable t) {
-    }
-
-    aSession.setAttribute("nrmediaitems", new Integer(nrMediaItems));
-
     if (aRequest.getParameter("post")==null)
       return false;
     else {
@@ -200,123 +246,17 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
   }
 
   protected void validate(List aResults, Request aRequest, Session aSession) throws SessionExc, SessionFailure {
-  }
+    String password = (String) aSession.getAttribute("password");
 
-  protected void makeErrorResponse(Request aRequest, Session aSession, Response aResponse, Throwable anError) throws SessionExc, SessionFailure {
-    aResponse.setResponseValue("errorstring", anError.getMessage());
-    aResponse.setResponseGenerator(configuration.getString("Localizer.OpenSession.ErrorTemplate"));
-  };
-
-  /**
-   * Class that represents a validation error
-   *
-   * <p>Title: </p>
-   * <p>Description: </p>
-   * <p>Copyright: Copyright (c) 2003</p>
-   * <p>Company: </p>
-   * @author not attributable
-   * @version 1.0
-   */
+    if (password!=null) {
+      String submittedPassword= aRequest.getParameter("password").trim();
 
-  public class ValidationError {
-    private String field;
-    private String message;
-    private List parameters;
-
-    public ValidationError(String aField, String aMessage) {
-      this (aField, aMessage, new String[] {});
-    }
-
-    public ValidationError(String aField, String aMessage, Object aParameter) {
-      this (aField, aMessage, new Object[] {aParameter});
-    }
-
-    public ValidationError(String aField, String aMessage, Object[] aParameters) {
-      field = aField;
-      message = aMessage;
-      parameters = Arrays.asList(aParameters);
-    }
-
-    public String getMessage() {
-      return message;
-    }
-
-    public String getField() {
-      return field;
-    }
-
-    public List getParameters() {
-      return parameters;
-    }
-  }
-
-  /**
-   * Convenience validation method to test wether a field has been filled in
-   *
-   * @param aRequest
-   * @param aFieldName
-   * @param anErrorMessageResource
-   * @param aValidationResults
-   * @return
-   */
-
-  protected boolean testFieldEntered(Request aRequest, String aFieldName, String anErrorMessageResource, List aValidationResults) {
-    Object value = aRequest.getParameter(aFieldName);
-    if (value==null || !(value instanceof String) || ((String) value).trim().length()==0) {
-      aValidationResults.add(new ValidationError(aFieldName, anErrorMessageResource));
-      return false;
-    }
-    else
-      return true;
-  }
-
-  /**
-   * Convenience validation method to test wether a field is numeric
-
-   * @param aRequest
-   * @param aFieldName
-   * @param anErrorMessageResource
-   * @param aValidationResults
-   * @return
-   */
-
-  protected boolean testFieldIsNumeric(Request aRequest, String aFieldName, String anErrorMessageResource, List aValidationResults) {
-    Object value = aRequest.getParameter(aFieldName);
-    if (value!=null) {
-      try {
-        Integer.parseInt((String) value);
-        return true;
-      }
-      catch (Throwable t) {
-        aValidationResults.add(new ValidationError(aFieldName, anErrorMessageResource));
-        return false;
+      if (!password.equals(submittedPassword)) {
+        aResults.add(new ValidationError("password", "passwordmismatch"));
       }
     }
-    return true;
   }
 
-  /**
-   * Convenience validation method to test wether a field is numeric
-
-   * @param aRequest
-   * @param aFieldName
-   * @param anErrorMessageResource
-   * @param aValidationResults
-   * @return
-   */
-
-  protected boolean testFieldLength(Request aRequest, String aFieldName, int aMaxLength, String anErrorMessageResource, List aValidationResults) {
-    String value = aRequest.getParameter(aFieldName);
-
-    if (value!=null) {
-      if (value.length()>aMaxLength) {
-        aValidationResults.add(new ValidationError(aFieldName, anErrorMessageResource));
-        return false;
-      }
-      else return true;
-    }
-    return true;
-  }
 
   /**
    * Method to generate a one-time password
@@ -364,4 +304,10 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
     return result;
   }
 
+  protected static class DuplicatePostingExc extends SessionExc {
+    public DuplicatePostingExc(String aMessage) {
+      super(aMessage);
+    }
+  }
+
 }