Package com.soashable.robotolympics

Source Code of com.soashable.robotolympics.ChallengeExtension

package com.soashable.robotolympics;

import org.dom4j.Element;
import org.dom4j.QName;
import org.xmpp.forms.DataForm;
import org.xmpp.forms.FormField;
import org.xmpp.packet.Message;
import org.xmpp.packet.PacketExtension;

public class ChallengeExtension extends PacketExtension {

    public static final String ELEMENT_NAME = "challenge";
    public static final String NAMESPACE = "urn:xmpp:tmp:challenge";
   
    private transient DataForm challengeForm;
   
    static {
        registeredExtensions.put(QName.get(ELEMENT_NAME, NAMESPACE), ChallengeExtension.class);
    }

    public ChallengeExtension() {
        this( new DataForm(DataForm.Type.form) );
    }
   
    public ChallengeExtension(DataForm challengeForm) {
        super(ELEMENT_NAME, NAMESPACE);

        setChallengeForm(challengeForm);
    }
   
    public ChallengeExtension(Element element) {
        super(element);
        // challengeForm will be lazilly loaded when the getter is called
    }
   
    public DataForm getChallengeForm() {
        if( challengeForm == null ) {
            Element dataFormElem = element.element( QName.get(DataForm.ELEMENT_NAME, DataForm.NAMESPACE) );
            if( dataFormElem != null ) {
                challengeForm = new DataForm(dataFormElem);
            // TODO how to create new element of none exists? not here.
        }
       
        return challengeForm;
    }
   
    public void setChallengeForm(DataForm challengeForm) {
        this.challengeForm = challengeForm;
        Element currentFormElem = element.element(QName.get(DataForm.ELEMENT_NAME, DataForm.NAMESPACE) );
       
        // we may only have 1
        if( currentFormElem != null ) {
            element.remove(currentFormElem);
        }
       
        element.add(challengeForm.getElement());
       
        addFormType();
    }
   
    public String getFrom() {
        return getChallengeForm().getField("from").getValues().get(0);
    }
   
    public void setFrom(String from) {
        DataForm challengeForm = getChallengeForm();
       
        FormField field = challengeForm.getField("from");
        if( field == null ) {
            field = challengeForm.addField();
            field.setVariable("from");
            field.setType(FormField.Type.hidden);
           
            field.clearValues();
        }
        field.addValue(from);
    }
   
    public String getChallengeId() {
        return getChallengeForm().getField("cid").getValues().get(0);
    }
   
    public void setChallengeId(String challengeId) {
        DataForm challengeForm = getChallengeForm();
       
        FormField field = challengeForm.getField("cid");
        if( field == null ) {
            field = challengeForm.addField();
            field.setVariable("cid");
            field.setType(FormField.Type.hidden);
           
            field.clearValues();
        }
        field.addValue(challengeId);
    }
   
    public String getPacketId() {
        return getChallengeForm().getField("sid").getValues().get(0);
    }
   
    public void setPacketId(String packetId) {
        DataForm challengeForm = getChallengeForm();
       
        FormField field = challengeForm.getField("sid");
        if( field == null ) {
            field = challengeForm.addField();
            field.setVariable("sid");
            field.setType(FormField.Type.hidden);
           
            field.clearValues();
        }
        field.addValue(packetId);
    }
   
    public void setQAChallenge(String question) {
        DataForm challengeForm = getChallengeForm();
       
        FormField field = challengeForm.getField("qa");
        if( field == null ) {
            field = challengeForm.addField();
            field.setVariable("qa");
            field.setType(FormField.Type.text_single);
        }
        field.setLabel(question);
    }
   
    public String getQAChallenge() {
        return getChallengeForm().getField("qa").getLabel();
    }
   
    public void setQAResponse(String response) {
        FormField field = challengeForm.getField("qa");
        field.clearValues();
        field.addValue(response);
    }
   
    public String getQAResponse() {
        return challengeForm.getField("qa").getValues().get(0);
    }
   
    public void removeQAChallenge() {
        getChallengeForm().removeField("qa");
    }
   
    public void addFormType() {
        DataForm challengeForm = getChallengeForm();
       
        challengeForm.removeField("FORM_TYPE");
       
        FormField field = challengeForm.addField();
        field.setVariable("FORM_TYPE");
        field.setType(FormField.Type.hidden);
        field.addValue("urn:xmpp:tmp:challenge");
    }
   
   
    public void addLegacyChallenge(Message challengeMessage) {
        DataForm challengeForm = getChallengeForm();
       
        if( challengeForm == null ) {
            return; //TODO should this throw exception?
        }
       
        String question = getQAChallenge();
        String challengeId = getChallengeId();
       
        challengeMessage.setBody("Anti-Spim Device: Your messages to " + challengeMessage.getTo() + " are being blocked until you have proved that you are not a robot. To unblock, reply with the answer to '"+question+"' followed by '"+challengeId+"'");
    }
}

















TOP

Related Classes of com.soashable.robotolympics.ChallengeExtension

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.