You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2012/05/11 21:23:46 UTC
svn commit: r1337337 - in /ofbiz/branches/release11.04: ./
framework/common/config/ framework/common/src/org/ofbiz/common/
framework/common/webcommon/WEB-INF/
specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/
Author: jacopoc
Date: Fri May 11 19:23:46 2012
New Revision: 1337337
URL: http://svn.apache.org/viewvc?rev=1337337&view=rev
Log:
Applied fix from trunk for revision: 1337057
===
Copied the captcha image generator into a single event that streams the image to the response for a direct request rather than trying to store it during screen rendering to be served up later.
Added:
ofbiz/branches/release11.04/framework/common/config/captcha.properties
- copied unchanged from r1337057, ofbiz/trunk/framework/common/config/captcha.properties
Modified:
ofbiz/branches/release11.04/ (props changed)
ofbiz/branches/release11.04/framework/common/src/org/ofbiz/common/CommonEvents.java
ofbiz/branches/release11.04/framework/common/webcommon/WEB-INF/common-controller.xml
ofbiz/branches/release11.04/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
Propchange: ofbiz/branches/release11.04/
------------------------------------------------------------------------------
Merged /ofbiz/trunk:r1337057
Modified: ofbiz/branches/release11.04/framework/common/src/org/ofbiz/common/CommonEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release11.04/framework/common/src/org/ofbiz/common/CommonEvents.java?rev=1337337&r1=1337336&r2=1337337&view=diff
==============================================================================
--- ofbiz/branches/release11.04/framework/common/src/org/ofbiz/common/CommonEvents.java (original)
+++ ofbiz/branches/release11.04/framework/common/src/org/ofbiz/common/CommonEvents.java Fri May 11 19:23:46 2012
@@ -18,6 +18,12 @@
*******************************************************************************/
package org.ofbiz.common;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
@@ -28,8 +34,10 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import javolution.util.FastMap;
import net.sf.json.JSON;
@@ -37,6 +45,8 @@ import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.StringUtils;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.StringUtil;
import org.ofbiz.base.util.UtilGenerics;
@@ -370,10 +380,96 @@ public class CommonEvents {
writeJSONtoResponse(jsonUiLabel, response);
return "success";
}
-}
-
-
-
-
+ public static String getCaptcha(HttpServletRequest request,HttpServletResponse response) {
+ try {
+ final String captchaSizeConfigName = StringUtils.defaultIfEmpty(request.getParameter("captchaSize"), "default");
+ final String captchaSizeConfig = UtilProperties.getPropertyValue("captcha.properties", "captcha." + captchaSizeConfigName);
+ final String[] captchaSizeConfigs = captchaSizeConfig.split("\\|");
+
+ final int fontSize = Integer.parseInt(captchaSizeConfigs[0]);
+ final int height = Integer.parseInt(captchaSizeConfigs[1]);
+ final int width = Integer.parseInt(captchaSizeConfigs[2]);
+ final int charsToPrint = UtilProperties.getPropertyAsInteger("captcha.properties", "captcha.code_length", 6);
+ final char[] availableChars = UtilProperties.getPropertyValue("captcha.properties", "captcha.characters").toCharArray();
+
+ //It is possible to pass the font size, image width and height with the request as well
+ Color backgroundColor = Color.gray;
+ Color borderColor = Color.DARK_GRAY;
+ Color textColor = Color.ORANGE;
+ Color circleColor = new Color(160, 160, 160);
+ Font textFont = new Font("Arial", Font.PLAIN, fontSize);
+ int circlesToDraw = 6;
+ float horizMargin = 20.0f;
+ double rotationRange = 0.7; // in radians
+ BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+
+ Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
+
+ g.setColor(backgroundColor);
+ g.fillRect(0, 0, width, height);
+
+ //Generating some circles for background noise
+ g.setColor(circleColor);
+ for (int i = 0; i < circlesToDraw; i++) {
+ int circleRadius = (int) (Math.random() * height / 2.0);
+ int circleX = (int) (Math.random() * width - circleRadius);
+ int circleY = (int) (Math.random() * height - circleRadius);
+ g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2);
+ }
+ g.setColor(textColor);
+ g.setFont(textFont);
+
+ FontMetrics fontMetrics = g.getFontMetrics();
+ int maxAdvance = fontMetrics.getMaxAdvance();
+ int fontHeight = fontMetrics.getHeight();
+
+ String captchaCode = RandomStringUtils.random(6, availableChars);
+
+ float spaceForLetters = -horizMargin * 2 + width;
+ float spacePerChar = spaceForLetters / (charsToPrint - 1.0f);
+
+ for (int i = 0; i < captchaCode.length(); i++) {
+
+ // this is a separate canvas used for the character so that
+ // we can rotate it independently
+ int charWidth = fontMetrics.charWidth(captchaCode.charAt(i));
+ int charDim = Math.max(maxAdvance, fontHeight);
+ int halfCharDim = (charDim / 2);
+
+ BufferedImage charImage =
+ new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D charGraphics = charImage.createGraphics();
+ charGraphics.translate(halfCharDim, halfCharDim);
+ double angle = (Math.random() - 0.5) * rotationRange;
+ charGraphics.transform(AffineTransform.getRotateInstance(angle));
+ charGraphics.translate(-halfCharDim, -halfCharDim);
+ charGraphics.setColor(textColor);
+ charGraphics.setFont(textFont);
+
+ int charX = (int) (0.5 * charDim - 0.5 * charWidth);
+ charGraphics.drawString("" + captchaCode.charAt(i), charX,
+ ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()));
+
+ float x = horizMargin + spacePerChar * (i) - charDim / 2.0f;
+ int y = ((height - charDim) / 2);
+
+ g.drawImage(charImage, (int) x, y, charDim, charDim, null, null);
+
+ charGraphics.dispose();
+ }
+ // Drawing the image border
+ g.setColor(borderColor);
+ g.drawRect(0, 0, width - 1, height - 1);
+ g.dispose();
+ response.setContentType("image/jpeg");
+ ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
+ HttpSession session = request.getSession();
+ session.setAttribute("_CAPTCHA_CODE_", captchaCode);
+ } catch (Exception ioe) {
+ Debug.logError(ioe.getMessage(), module);
+ }
+ return "success";
+ }
+}
Modified: ofbiz/branches/release11.04/framework/common/webcommon/WEB-INF/common-controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/release11.04/framework/common/webcommon/WEB-INF/common-controller.xml?rev=1337337&r1=1337336&r2=1337337&view=diff
==============================================================================
--- ofbiz/branches/release11.04/framework/common/webcommon/WEB-INF/common-controller.xml (original)
+++ ofbiz/branches/release11.04/framework/common/webcommon/WEB-INF/common-controller.xml Fri May 11 19:23:46 2012
@@ -202,6 +202,13 @@ under the License.
<response name="success" type="view" value="main"/>
</request-map>
+ <!-- Common captcha image request, the captcha code is stored in the session using _CAPTCHA_CODE_ as the key -->
+ <request-map uri="captcha.jpg">
+ <security https="false" auth="false"/>
+ <event type="java" path="org.ofbiz.common.CommonEvents" invoke="getCaptcha"/>
+ <response name="success" type="none"/>
+ </request-map>
+
<!-- Lookup requests -->
<request-map uri="LookupGeo"><security https="true" auth="true"/><response name="success" type="view" value="LookupGeo"/></request-map>
<request-map uri="LookupGeoName"><security https="true" auth="true"/><response name="success" type="view" value="LookupGeoName"/></request-map>
Modified: ofbiz/branches/release11.04/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/release11.04/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml?rev=1337337&r1=1337336&r2=1337337&view=diff
==============================================================================
--- ofbiz/branches/release11.04/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml (original)
+++ ofbiz/branches/release11.04/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml Fri May 11 19:23:46 2012
@@ -1938,7 +1938,13 @@ under the License.
<response name="success" type="view" value="ProductUomDropDownOnly" save-last-view="true"/>
</request-map>
- <!-- Captcha -->
+ <!-- Captcha: Image request, the captcha code is stored in the session using _CAPTCHA_CODE_ as the key -->
+ <request-map uri="captcha.jpg">
+ <security https="true" auth="false"/>
+ <event type="java" path="org.ofbiz.common.CommonEvents" invoke="getCaptcha"/>
+ <response name="success" type="none"/>
+ </request-map>
+
<request-map uri="reloadCaptchaImage">
<security https="true" auth="false"/>
<response name="success" type="view" value="reloadCaptchaImage"/>