Capabilities.java

 1package im.conversations.android.xmpp.model.capabilties;
 2
 3import com.google.common.base.Optional;
 4import com.google.common.base.Strings;
 5import com.google.common.collect.Iterables;
 6import com.google.common.io.BaseEncoding;
 7
 8import eu.siacs.conversations.xml.Namespace;
 9import im.conversations.android.annotation.XmlElement;
10import im.conversations.android.xmpp.EntityCapabilities2;
11import im.conversations.android.xmpp.model.Extension;
12import im.conversations.android.xmpp.model.Hash;
13
14@XmlElement(name = "c", namespace = Namespace.ENTITY_CAPABILITIES_2)
15public class Capabilities extends Extension {
16
17    public Capabilities() {
18        super(Capabilities.class);
19    }
20
21    public EntityCapabilities2.EntityCaps2Hash getHash() {
22        final Optional<Hash> sha256Hash =
23                Iterables.tryFind(
24                        getExtensions(Hash.class), h -> h.getAlgorithm() == Hash.Algorithm.SHA_256);
25        if (sha256Hash.isPresent()) {
26            final String content = sha256Hash.get().getContent();
27            if (Strings.isNullOrEmpty(content)) {
28                return null;
29            }
30            if (BaseEncoding.base64().canDecode(content)) {
31                return EntityCapabilities2.EntityCaps2Hash.of(Hash.Algorithm.SHA_256, content);
32            }
33        }
34        return null;
35    }
36
37    public void setHash(final EntityCapabilities2.EntityCaps2Hash caps2Hash) {
38        final Hash hash = new Hash();
39        hash.setAlgorithm(caps2Hash.algorithm);
40        hash.setContent(caps2Hash.encoded());
41        this.addExtension(hash);
42    }
43}