1package im.conversations.android.xmpp.model.upload;
 2
 3import com.google.common.base.Strings;
 4import com.google.common.collect.ImmutableMap;
 5import im.conversations.android.annotation.XmlElement;
 6import im.conversations.android.xmpp.model.Extension;
 7import java.util.Arrays;
 8import java.util.Collection;
 9import java.util.List;
10import java.util.Map;
11import okhttp3.HttpUrl;
12
13@XmlElement
14public class Put extends Extension {
15
16    private static final List<String> HEADER_ALLOW_LIST =
17            Arrays.asList("Authorization", "Cookie", "Expires");
18
19    public Put() {
20        super(Put.class);
21    }
22
23    public HttpUrl getUrl() {
24        final var url = this.getAttribute("url");
25        if (Strings.isNullOrEmpty(url)) {
26            return null;
27        }
28        return HttpUrl.parse(url);
29    }
30
31    public Collection<Header> getHeaders() {
32        return this.getExtensions(Header.class);
33    }
34
35    public Map<String, String> getHeadersAllowList() {
36        final var headers = new ImmutableMap.Builder<String, String>();
37        for (final Header header : this.getHeaders()) {
38            final String name = header.getHeaderName();
39            final String value = Strings.nullToEmpty(header.getContent()).trim();
40            if (Strings.isNullOrEmpty(value) || value.contains("\n")) {
41                continue;
42            }
43            if (HEADER_ALLOW_LIST.contains(name)) {
44                headers.put(name, value);
45            }
46        }
47        return headers.buildKeepingLast();
48    }
49}