support for CAPTCHAs
[mir.git] / source / mircoders / localizer / basic / MirBasicOpenPostingLocalizer.java
index 82b36e9..688f130 100755 (executable)
@@ -34,13 +34,7 @@ import mir.log.LoggerWrapper;
 import mir.session.Request;
 import mir.session.Session;
 import mir.session.SessionHandler;
-import mircoders.abuse.FilterType;
-import mircoders.abuse.IPFilterType;
-import mircoders.abuse.RegularExpressionFilterType;
-import mircoders.abuse.SubStringFilterType;
-import mircoders.abuse.ThrottleFilter;
-import mircoders.abuse.PostingSizeFilterType;
-import mircoders.abuse.URLBlacklistFilterType;
+import mircoders.abuse.*;
 import mircoders.entity.EntityComment;
 import mircoders.entity.EntityContent;
 import mircoders.global.MirGlobal;
@@ -49,14 +43,11 @@ import mircoders.localizer.MirLocalizerExc;
 import mircoders.localizer.MirLocalizerFailure;
 import mircoders.localizer.MirOpenPostingLocalizer;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Arrays;
+import java.util.*;
+import java.awt.image.BufferedImage;
+
+import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
+import com.octo.captcha.service.image.ImageCaptchaService;
 
 public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
   private List afterContentProducerTasks;
@@ -65,6 +56,7 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
   private Map filterTypesMap;
   protected LoggerWrapper logger;
   protected MirPropertiesConfiguration configuration;
+  private static ImageCaptchaService captchaService = new DefaultManageableImageCaptchaService();
 
   public MirBasicOpenPostingLocalizer() throws MirLocalizerFailure {
     logger = new LoggerWrapper("Localizer.Basic.OpenPosting");
@@ -172,22 +164,6 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
     }
   }
 
-  public String generateOnetimePassword() {
-    Random r = new Random();
-    int random = r.nextInt();
-
-    long l = System.currentTimeMillis();
-
-    l = (l*l*l*l)/random;
-    if (l<0) {
-      l = l * -1;
-    }
-
-    String returnString = ""+l;
-
-    return returnString.substring(5);
-  }
-
   public List getAntiAbuseFilterTypes() {
     return Collections.unmodifiableList(filterTypes);
   }
@@ -206,4 +182,20 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
     filterTypesMap.put(aFilterType.getName(), aFilterType);
     filterTypes.add(aFilterType);
   }
-}
+
+  public Captcha generateCaptcha(final String aSessionId) {
+    final BufferedImage challenge = captchaService.getImageChallengeForID(aSessionId);
+
+    return new Captcha() {
+
+      public BufferedImage getChallenge() {
+        return challenge;
+      }
+
+      public boolean validateAnswer(String anAnswer) {
+        return captchaService.validateResponseForID(aSessionId, anAnswer).booleanValue();
+      }
+    };
+  }
+
+}
\ No newline at end of file