Search in sources :

Example 1 with Field

use of eu.siacs.conversations.xmpp.forms.Field in project Conversations by siacs.

the class XmppConnection method sendRegistryRequest.

private void sendRegistryRequest() {
    final IqPacket register = new IqPacket(IqPacket.TYPE.GET);
    register.query("jabber:iq:register");
    register.setTo(account.getServer());
    sendUnmodifiedIqPacket(register, new OnIqPacketReceived() {

        @Override
        public void onIqPacketReceived(final Account account, final IqPacket packet) {
            boolean failed = false;
            if (packet.getType() == IqPacket.TYPE.RESULT && packet.query().hasChild("username") && (packet.query().hasChild("password"))) {
                final IqPacket register = new IqPacket(IqPacket.TYPE.SET);
                final Element username = new Element("username").setContent(account.getUsername());
                final Element password = new Element("password").setContent(account.getPassword());
                register.query("jabber:iq:register").addChild(username);
                register.query().addChild(password);
                register.setFrom(account.getJid().toBareJid());
                sendUnmodifiedIqPacket(register, registrationResponseListener);
            } else if (packet.getType() == IqPacket.TYPE.RESULT && (packet.query().hasChild("x", "jabber:x:data"))) {
                final Data data = Data.parse(packet.query().findChild("x", "jabber:x:data"));
                final Element blob = packet.query().findChild("data", "urn:xmpp:bob");
                final String id = packet.getId();
                Bitmap captcha = null;
                if (blob != null) {
                    try {
                        final String base64Blob = blob.getContent();
                        final byte[] strBlob = Base64.decode(base64Blob, Base64.DEFAULT);
                        InputStream stream = new ByteArrayInputStream(strBlob);
                        captcha = BitmapFactory.decodeStream(stream);
                    } catch (Exception e) {
                    //ignored
                    }
                } else {
                    try {
                        Field url = data.getFieldByName("url");
                        String urlString = url.findChildContent("value");
                        URL uri = new URL(urlString);
                        captcha = BitmapFactory.decodeStream(uri.openConnection().getInputStream());
                    } catch (IOException e) {
                        Log.e(Config.LOGTAG, e.toString());
                    }
                }
                if (captcha != null) {
                    failed = !mXmppConnectionService.displayCaptchaRequest(account, id, data, captcha);
                }
            } else {
                failed = true;
            }
            if (failed) {
                final Element instructions = packet.query().findChild("instructions");
                setAccountCreationFailed((instructions != null) ? instructions.getContent() : "");
            }
        }
    });
}
Also used : Account(eu.siacs.conversations.entities.Account) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Element(eu.siacs.conversations.xml.Element) Data(eu.siacs.conversations.xmpp.forms.Data) IOException(java.io.IOException) KeyManagementException(java.security.KeyManagementException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) InvalidJidException(eu.siacs.conversations.xmpp.jid.InvalidJidException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) URL(java.net.URL) IqPacket(eu.siacs.conversations.xmpp.stanzas.IqPacket) Field(eu.siacs.conversations.xmpp.forms.Field) Bitmap(android.graphics.Bitmap) ByteArrayInputStream(java.io.ByteArrayInputStream)

Example 2 with Field

use of eu.siacs.conversations.xmpp.forms.Field in project Conversations by siacs.

the class ServiceDiscoveryResult method mkCapHash.

protected byte[] mkCapHash() {
    StringBuilder s = new StringBuilder();
    List<Identity> identities = this.getIdentities();
    Collections.sort(identities);
    for (Identity id : identities) {
        s.append(blankNull(id.getCategory()) + "/" + blankNull(id.getType()) + "/" + blankNull(id.getLang()) + "/" + blankNull(id.getName()) + "<");
    }
    List<String> features = this.getFeatures();
    Collections.sort(features);
    for (String feature : features) {
        s.append(feature + "<");
    }
    Collections.sort(forms, new Comparator<Data>() {

        @Override
        public int compare(Data lhs, Data rhs) {
            return lhs.getFormType().compareTo(rhs.getFormType());
        }
    });
    for (Data form : forms) {
        s.append(form.getFormType() + "<");
        List<Field> fields = form.getFields();
        Collections.sort(fields, new Comparator<Field>() {

            @Override
            public int compare(Field lhs, Field rhs) {
                return lhs.getFieldName().compareTo(rhs.getFieldName());
            }
        });
        for (Field field : fields) {
            s.append(field.getFieldName() + "<");
            List<String> values = field.getValues();
            Collections.sort(values);
            for (String value : values) {
                s.append(value + "<");
            }
        }
    }
    MessageDigest md;
    try {
        md = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException e) {
        return null;
    }
    try {
        return md.digest(s.toString().getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        return null;
    }
}
Also used : UnsupportedEncodingException(java.io.UnsupportedEncodingException) Data(eu.siacs.conversations.xmpp.forms.Data) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Field(eu.siacs.conversations.xmpp.forms.Field) MessageDigest(java.security.MessageDigest)

Example 3 with Field

use of eu.siacs.conversations.xmpp.forms.Field in project Conversations by siacs.

the class ServiceDiscoveryResult method createJSONFromForm.

private static JSONObject createJSONFromForm(Data data) {
    JSONObject object = new JSONObject();
    for (Field field : data.getFields()) {
        try {
            JSONArray jsonValues = new JSONArray();
            for (String value : field.getValues()) {
                jsonValues.put(value);
            }
            object.put(field.getFieldName(), jsonValues);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    try {
        JSONArray jsonValues = new JSONArray();
        jsonValues.put(data.getFormType());
        object.put(Data.FORM_TYPE, jsonValues);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return object;
}
Also used : Field(eu.siacs.conversations.xmpp.forms.Field) JSONObject(org.json.JSONObject) JSONArray(org.json.JSONArray) JSONException(org.json.JSONException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Aggregations

Field (eu.siacs.conversations.xmpp.forms.Field)3 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)3 Data (eu.siacs.conversations.xmpp.forms.Data)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 Bitmap (android.graphics.Bitmap)1 Account (eu.siacs.conversations.entities.Account)1 Element (eu.siacs.conversations.xml.Element)1 InvalidJidException (eu.siacs.conversations.xmpp.jid.InvalidJidException)1 IqPacket (eu.siacs.conversations.xmpp.stanzas.IqPacket)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ConnectException (java.net.ConnectException)1 URL (java.net.URL)1 UnknownHostException (java.net.UnknownHostException)1 KeyManagementException (java.security.KeyManagementException)1 MessageDigest (java.security.MessageDigest)1 JSONArray (org.json.JSONArray)1 JSONException (org.json.JSONException)1 JSONObject (org.json.JSONObject)1