Well, its great that someone, somewhere has got it to work!!!

You wrote this
"But as you can see, RegisterAction do not verify captcha, so we cannot use
captcha for validating registrations. But this is very easy to be added,
needs a small patch."

Where does this patch go?




---Original Message-----
From: Asiri Rathnayake [mailto:asiri.rathnay...@gmail.com]
Sent: 15 July 2009 11:09
To: edw...@eldon.gotadsl.co.uk
Cc: XWiki Users
Subject: Re: [xwiki-users] about to give in...


  Hi,

  Ok, I got captcha to work for commenting. I will explain how I did it:

  * I could not find any helpful documentation so I went and looked at the
CaptchaPlugin.java class
(http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/
java/com/xpn/xwiki/plugin/captcha/CaptchaPlugin.java)

  * Here I found that you need to have a preference parameter named like
<action>_registered or <action>_anonymous in your XWiki.XWikiPreference
object that defines the captcha mode to be used for validation. Possible
values are "image" and "text"

  * Out of curiosity I fired up my local XE, navigated to
http://localhost:8080/xwiki/bin/admin/XWiki/XWikiPreferences and selected
edit->class. I looked for fields that looked like above and found the
following ones:

  registration_anonymous : Captcha mode for new registrations

  registration_registered: This is weired

  edit_anonymous: Captcha mode for unregistered user edits

  edit_registered: Captcha mode for registered user edits

  comment_anonymous: Captcha mode for unregistered user comments

  comment_registered: Captcha mode for registered user comments

  These fields have pretty names that doesn't make much sense.

  * Then I switched back to object edit mode and inside the
XWiki.XWikiPreferences object I found these fields and set them to "image"

  * I don't know how I ended up looking at XWiki::hasCaptcha() method but
anyway I was looking at it after some time. Here I learnt that you need the
"xwiki.plugin.captcha" flag to be set to 1 if your captacha validations to
work.

  * Then inside eclipse I did a search for all the references of
XWiki.hasCaptcha() method and leant following actions support captcha:

  - CommentAddAction

  - EditAction

  - PreviewAction

  - SaveAction

  All of these actions only verify if captcha is enabled and if it validates
correctly. They do not display the captcha images, without that displaying
all of them validates to "true". So this means we need to edit the templates
and display captcha if these actions are to be restricted.

  But as you can see, RegisterAction do not verify captcha, so we cannot use
captcha for validating registrations. But this is very easy to be added,
needs a small patch.

  * Then I went and located commentsinline.vm and found the section which
displays the comment box:

  <code>
  #macro(displayCommentForm)
    #if($xwiki.hasAccessLevel('comment'))
      <form action="$doc.getURL('commentadd')" method="post"
id="AddComment">
        <fieldset class="expanded" id="commentform">
          <legend>$msg.get('core.viewers.comments.add.title')</legend>
          <input type="hidden" name="xredirect"
value="${doc.getURL('view')}#Comments" />
          #if($context.user != 'XWiki.XWikiGuest')
             <label>$msg.get('core.viewers.comments.add.guestName.prompt')
$xwiki.getUserName($context.user)</label>
             <input type="hidden" name="${xCommentClass}_author"
value="$context.user"/>
          #else
            <label>$msg.get('core.viewers.comments.add.guestName.prompt')
<input type="text" name="${xCommentClass}_author"
value="$msg.get('core.viewers.comments.add.guestName.default')"/></label>
          #end
          <input type="hidden" name="${xCommentClass}_date" value=""/>
          <input type="hidden" name="${xCommentClass}_replyto"
value="$!{request.replyto}"/>
          <div class="commentcontainer">
             <label>$msg.get('core.viewers.comments.add.comment.label')</lab
el>
             <textarea id='${xCommentClass}_comment' rows='5' cols="80"
name='${xCommentClass}_comment'></textarea>
          </div>
          <div>
            <span class="buttonwrapper"><input type="submit"
value="$msg.get('core.viewers.comments.add.submit')" class="button"/></span>
            <span class="buttonwrapper"><input #if("$!{request.replyto}" ==
'') type="reset" #else type="submit" #end
value="$msg.get('core.viewers.comments.add.cancel')" class="button"
name="action_cancel"/></span>
          </div>
        </fieldset>
      </form>
    #end
  #end
  </code>

  I added the captcha display code as bellow:

  <code>
  #macro(displayCommentForm)
    #if($xwiki.hasAccessLevel('comment'))
      <form action="$doc.getURL('commentadd')" method="post"
id="AddComment">
        <fieldset class="expanded" id="commentform">
          <legend>$msg.get('core.viewers.comments.add.title')</legend>
          <input type="hidden" name="xredirect"
value="${doc.getURL('view')}#Comments" />
          #if($context.user != 'XWiki.XWikiGuest')
             <label>$msg.get('core.viewers.comments.add.guestName.prompt')
$xwiki.getUserName($context.user)</label>
             <input type="hidden" name="${xCommentClass}_author"
value="$context.user"/>
          #else
            <label>$msg.get('core.viewers.comments.add.guestName.prompt')
<input type="text" name="${xCommentClass}_author"
value="$msg.get('core.viewers.comments.add.guestName.default')"/></label>
          #end
          <input type="hidden" name="${xCommentClass}_date" value=""/>
          <input type="hidden" name="${xCommentClass}_replyto"
value="$!{request.replyto}"/>
          <div class="commentcontainer">
             <label>$msg.get('core.viewers.comments.add.comment.label')</lab
el>
             <textarea id='${xCommentClass}_comment' rows='5' cols="80"
name='${xCommentClass}_comment'></textarea>
          </div>
          $xwiki.jcaptcha.displayCaptcha("comment", "myclass") ## Here
          <div>
            <span class="buttonwrapper"><input type="submit"
value="$msg.get('core.viewers.comments.add.submit')" class="button"/></span>
            <span class="buttonwrapper"><input #if("$!{request.replyto}" ==
'') type="reset" #else type="submit" #end
value="$msg.get('core.viewers.comments.add.cancel')" class="button"
name="action_cancel"/></span>
          </div>
        </fieldset>
      </form>
    #end
  #end
  </code>

  * Restarted xwiki and logged in as a normal user (Admin user does not get
captcha anyway) and voila, I saw captcha display near the comment box. I
tried to post a comment with an invalid captcha input and it failed, but the
failiure was not that visible. Then I tried to post a comment with the
correct captcha input and it worked!!!

  This is my experience but I'm not sure when captcha support will be fixed
on xwiki completely.

  Thanks.

  - Asiri


  On Wed, Jul 15, 2009 at 3:02 PM, Edward Laptop
<edw...@eldon.gotadsl.co.uk> wrote:

    Thanks for the reply!

    I have been on this for ages and ages and ages.

    I looked at the links below, and I think I see what you mean. To be
honest, its beyond my understanding.

    I have been working with registerinline.vm - I  can get the captcha
field to veryify fine. In my page there is variable $reg which appears to be
the key.

    Please keep in touch - and I will too. Maybe one of us will crack it

    Incidentally I used
    http://n2.nabble.com/CAPTCHA-for-comments-and-registration-tp507976p5079
89.html

    as a basis and it seemed to work. Trouble was, its not a full solution.
I contact some people from the thread - but nobody seemed to be able to
solve it fully.



    Perhaps there is a bug???



    Has anyone got captcha to work on a registration page????????



    -----Original Message-----
    From: Asiri Rathnayake [mailto:asiri.rathnay...@gmail.com]
    Sent: 15 July 2009 10:17
    To: edw...@eldon.gotadsl.co.uk; XWiki Users
    Subject: Re: [xwiki-users] about to give in...


      Hi Edward,


      On Wed, Jul 15, 2009 at 12:35 PM, Edward Eldon
<edw...@eldon.gotadsl.co.uk> wrote:

        Hi

        I have noticed that there has been more activity in the last couple
of days
        ... so, here's one last attempt.

        I have got to the stage where a captcha field is shown, and the page
        (registerinline.vm) displays the correct errors if it isn't filled
in (some
        simple if statements)

        However, the user is STILL registered even if the captcha is filled
in
        wrongly.

      I think I found the problem. Still, I'm not a captcha expert so please
bear with me.

      If you consider the CommentAction
(http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/
java/com/xpn/xwiki/web/CommentAddAction.java) you will see that there is a
check for captcha.

      That is, if you have displayed captcha somewhere in the comment
section, user will _HAVE_ to provide the correct input otherwise the action
will not complete.

      On the other hand take the RegisterAction
(http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/
java/com/xpn/xwiki/web/RegisterAction.java) There is no captcha verification
here at all :)

      My guess is this is a bug of xwiki, not you doing something wrong.

      Still, don't take my word, try to put captcha somehow into comment
area and see if it works... if it does, we cam make sure that no captcha is
supported for log-in action of xwiki, which needs fixing.

      I'm trying to get captcha to work for comment action, I will inform
you if i succeed.

      Thanks.

      - Asiri



        I have searched this news group, experimented and given up ... but
if anyone
        can suggest how to stop this my xwiki user would really appreciate
it.
        Happy to post code if anyone's interested!

        thanks - hopefully

        Edward
        _______________________________________________
        users mailing list
        users@xwiki.org
        http://lists.xwiki.org/mailman/listinfo/users




_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to