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}