Author: michiel
Date: 2010-02-09 10:31:11 +0100 (Tue, 09 Feb 2010)
New Revision: 40921
Modified:
mmbase/trunk/applications/resources/src/main/java/org/mmbase/datatypes/CaptchaDataType.java
mmbase/trunk/applications/resources/src/main/resources/META-INF/tags/mm/resources/captcha.tagx
Log:
merged some things from 1.9
Modified:
mmbase/trunk/applications/resources/src/main/java/org/mmbase/datatypes/CaptchaDataType.java
===================================================================
---
mmbase/trunk/applications/resources/src/main/java/org/mmbase/datatypes/CaptchaDataType.java
2010-02-09 09:29:07 UTC (rev 40920)
+++
mmbase/trunk/applications/resources/src/main/java/org/mmbase/datatypes/CaptchaDataType.java
2010-02-09 09:31:11 UTC (rev 40921)
@@ -54,6 +54,7 @@
public String background = "white";
public String fillColor = "black";
public int swirl = 30;
+ public String font = null;
public CaptchaImage(String text) {
this.text = text;
@@ -108,11 +109,16 @@
}
commands.add("gravity(west)");
commands.add("s(80x22!)");
+ if (image.font != null) {
+ commands.add("font(" + image.font + ")");
+ }
commands.add("fill(" + image.fillColor + ")");
commands.add("pointsize(20)");
commands.add("text(0,0,\'" + image.text + "')");
commands.add("f(png)");
- commands.add("swirl(" + image.swirl + ")");
+ if (image.swirl != 0) {
+ commands.add("swirl(" + image.swirl + ")");
+ }
ImageConversionRequest req =
Factory.getImageConversionRequest(input, "gif", receiver,
commands);
@@ -179,6 +185,7 @@
private int length = 5;
private int swirl = 30;
private String background = "white";
+ private String font = null;
public void setLength(int l) {
@@ -192,6 +199,10 @@
background = bg;
}
+ public void setFont(String f) {
+ font = f;
+ }
+
@Override
public String input(Request request, Node node, Field field, boolean
search) {
if (search) {
@@ -202,6 +213,7 @@
CaptchaImage image = new
CaptchaDataType.CaptchaImage(createString(length));
image.swirl = swirl;
image.background = background;
+ image.font = font;
StringBuilder show = new StringBuilder();
try {
CaptchaDataType.createCaptchaImage(null, image);
Modified:
mmbase/trunk/applications/resources/src/main/resources/META-INF/tags/mm/resources/captcha.tagx
===================================================================
---
mmbase/trunk/applications/resources/src/main/resources/META-INF/tags/mm/resources/captcha.tagx
2010-02-09 09:29:07 UTC (rev 40920)
+++
mmbase/trunk/applications/resources/src/main/resources/META-INF/tags/mm/resources/captcha.tagx
2010-02-09 09:31:11 UTC (rev 40921)
@@ -3,35 +3,47 @@
xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0"
xmlns:jsp="http://java.sun.com/JSP/Page"
version="2.0">
- <jsp:directive.tag
import="java.io.*,java.util.*,org.mmbase.util.images.*,org.mmbase.servlet.FileServlet"
/>
+ <jsp:directive.tag import="java.io.*,java.util.*,org.mmbase.datatypes.*"
+ description="Image based implementation of Turing test
('captcha')"
+ />
- <!-- Length of key to produce. The generated key will be stored in the
session attribute
- 'captchakey'
- The location of the generated image is in 'captchafilename'.
+
-->
- <jsp:directive.attribute name="length" type="java.lang.Integer" />
+ <jsp:directive.attribute name="length" type="java.lang.Integer"
+ description="Length of key to produce. The
generated key will be stored in the session attribute 'captchakey'
+ The location of the generated image is
in 'captchafilename'."
+ />
- <!-- If template attribute is used, current node is an image, and temlate is
used to generate the
- background of the captcha image. Defaults to a white back-ground. -->
- <jsp:directive.attribute name="template" type="java.lang.String" />
+ <jsp:directive.attribute name="swirl" type="java.lang.Integer"
+ description="How much the image must be distorted.
0 is no distortion. Default is 30."
+ />
- <!-- When using template attribute, you may want to specifiy the fill color
to. Defaults to black -->
- <jsp:directive.attribute name="fill" type="java.lang.String" />
- <!-- If the key is stated explicitely, no new key is generated, but this
given one is shown. -->
+ <jsp:directive.attribute name="template" type="java.lang.String"
+ description="If template attribute is used, current
node is an image, and temlate is used to generate the
+ background of the captcha image.
Defaults to a white back-ground. See also 'background' attribute."
+ />
- <jsp:directive.attribute name="key" type="java.lang.String" />
- <jsp:declaration>
+ <jsp:directive.attribute name="fill" type="java.lang.String"
+ description="When using template attribute, you may
want to specifiy the fill color to. Defaults to black."
- static final String[] charset = {"3","4","5","6","7","8",
"a","b","c","d","e","f","h","i","j","k","m","n","p","q","r","s","t","u","v","w","x","y"};
// 29 elements
- static final Random rand = new Random();
- static Timer deleter = new Timer(true);
+ />
- </jsp:declaration>
+ <jsp:directive.attribute name="background" type="java.lang.String"
+ description="Background color to be used. Defaults
to white. Use 'transparent' for a transparent image."
+ />
+ <jsp:directive.attribute name="font" type="java.lang.String"
+ description="Font file to use to produce the text.
E.g. mm:fonts/arial.ttf (mm: is mean 'mmbase configuration directory')"
+ />
+
+ <!-- If the key is stated explicitely, no new key is generated, but this
given one is shown. -->
+ <jsp:directive.attribute name="key" type="java.lang.String" />
<jsp:scriptlet>
InputStream input = null;
- StringBuilder sb = new StringBuilder();
+ String text = null;;
int length = 5;
+ int swirl = 30;
+ String font = null;
</jsp:scriptlet>
<c:if test="${! empty template}">
<mm:node>
@@ -47,56 +59,40 @@
</c:if>
<c:if test="${! empty key}">
<mm:write referid="key" jspvar="k" vartype="string" write="false">
- <jsp:scriptlet>sb.append(k);</jsp:scriptlet>
+ <jsp:scriptlet>text = k;</jsp:scriptlet>
</mm:write>
</c:if>
+ <c:if test="${! empty font}">
+ <mm:write referid="font" jspvar="f" vartype="string" write="false">
+ <jsp:scriptlet>font = f;</jsp:scriptlet>
+ </mm:write>
+ </c:if>
<mm:import jspvar="fillColor" from="this" externid="fill">000000</mm:import>
+ <mm:import jspvar="backgroundColor" from="this"
externid="background">white</mm:import>
<jsp:scriptlet>
- String base = "temporary_images";
- </jsp:scriptlet>
- <mm:import
id="baseUrl"><jsp:expression>org.mmbase.servlet.MMBaseServlet.getBasePath("files")
+ base</jsp:expression></mm:import>
-
- <jsp:scriptlet>
- if (input == null) {
- input = new ByteArrayInputStream(gifBytes);
+ if (text == null) {
+ text = CaptchaDataType.createString(length);
}
- if (sb.length() == 0) {
- for(int n = 0; n < length; n++) {
- sb = sb.append(charset[rand.nextInt(28)]);
- }
- }
- final File directory = FileServlet.getFile(base, response);
- directory.mkdir();
- final File file = File.createTempFile("captcha", ".png", directory);
- file.deleteOnExit();
- String captchaKey = sb.toString();
- // captchaKey = " ";
- session.setAttribute("captchakey", captchaKey);
- session.setAttribute("captchafilename", file + file.getName());
- FileReceiver receiver = new FileReceiver(file);
- //white pixel
- ImageConversionRequest req =
- Factory.getImageConversionRequest(input, "gif", receiver,
- "gravity(west)", "s(80x22!)", "fill(" + fillColor + ")", "pointsize(20)",
"draw(text 10x10 \'" + captchaKey + "')", "f(png)", "swirl(10)");
- // should also be possible to use 'text', but that is broken with newer
image-magicks.
+ CaptchaDataType.CaptchaImage image = new
CaptchaDataType.CaptchaImage(text);
+ image.swirl = swirl;
+ image.fillColor = fillColor;
+ image.background = backgroundColor;
+ image.font = font;
+ CaptchaDataType.createCaptchaImage(input, image);
- req.waitForConversion();
- deleter.schedule(new TimerTask() { public void run() {file.delete();} },
60000);
- Dimension dim = receiver.getDimension();
- int width = dim.getWidth();
- int height = dim.getHeight();
+ session.setAttribute("captchakey", image.text); // deprecated
+ session.setAttribute(CaptchaDataType.KEY, image.text);
+ jspContext.setAttribute("image", image);
+ session.setAttribute("captchafilename", image.file.getName());
</jsp:scriptlet>
- <mm:import
id="filename"><jsp:expression>file.getName()</jsp:expression></mm:import>
- <mm:import id="width" vartype="integer"
><jsp:expression>width</jsp:expression></mm:import>
- <mm:import id="height"
vartype="integer"><jsp:expression>height</jsp:expression></mm:import>
- <mm:link page="${baseUrl}/${filename}">
+ <mm:link page="${image.path}">
<c:choose>
- <c:when test="${width > 0}">
- <img src="${_}" alt="captcha" width="${width}" height="${height}" />
+ <c:when test="${image.width > 0}">
+ <img src="${_}" alt="captcha" width="${image.width}"
height="${image.height}" />
</c:when>
<c:otherwise>
<img src="${_}" alt="captcha" />
</c:otherwise>
</c:choose>
</mm:link>
-</jsp:root>
+</jsp:root>
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs