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}