Skip to content

Commit 7d3b4cc

Browse files
authored
Merge pull request #613 from sircpl/sircpl/default_user_agent
Add default user agent header
2 parents b878e83 + 6eefeb3 commit 7d3b4cc

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,9 @@
256256
<version>3.3.0</version>
257257
<configuration>
258258
<archive>
259+
<manifest>
260+
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
261+
</manifest>
259262
<manifestEntries>
260263
<Automatic-Module-Name>org.zendesk.client.v2</Automatic-Module-Name>
261264
</manifestEntries>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.zendesk.client.v2;
2+
3+
import java.util.regex.Pattern;
4+
5+
public class DefaultUserAgent {
6+
private static final Pattern VERSION_PATTERN = Pattern.compile("[\\w-.]+");
7+
private final String userAgent;
8+
9+
public DefaultUserAgent() {
10+
this(DefaultUserAgent.class.getPackage().getImplementationVersion());
11+
}
12+
13+
public DefaultUserAgent(String version) {
14+
StringBuilder sb = new StringBuilder("zendesk-java-client");
15+
if (version != null && VERSION_PATTERN.matcher(version).matches()) {
16+
sb.append('/').append(version);
17+
}
18+
this.userAgent = sb.toString();
19+
}
20+
21+
public String toString() {
22+
return this.userAgent;
23+
}
24+
}

src/main/java/org/zendesk/client/v2/Zendesk.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
*/
108108
public class Zendesk implements Closeable {
109109
private static final String JSON = "application/json; charset=UTF-8";
110+
private static final String USER_AGENT_HEADER = "User-Agent";
110111
private static final DefaultAsyncHttpClientConfig DEFAULT_ASYNC_HTTP_CLIENT_CONFIG =
111112
new DefaultAsyncHttpClientConfig.Builder().setFollowRedirect(true).build();
112113
private final boolean closeClient;
@@ -176,6 +177,7 @@ private Zendesk(
176177
}
177178
this.realm = null;
178179
}
180+
headers.putIfAbsent(USER_AGENT_HEADER, new DefaultUserAgent().toString());
179181
this.headers = Collections.unmodifiableMap(headers);
180182
this.mapper = createMapper();
181183
}
@@ -194,6 +196,7 @@ private Zendesk(
194196
throw new IllegalStateException(
195197
"Cannot specify token or password without specifying username");
196198
}
199+
headers.putIfAbsent(USER_AGENT_HEADER, new DefaultUserAgent().toString());
197200
this.headers = Collections.unmodifiableMap(headers);
198201

199202
this.mapper = createMapper();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.zendesk.client.v2;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.Test;
6+
7+
public class DefaultUserAgentTest {
8+
@Test
9+
public void testDefaultVersion() {
10+
assertThat(new DefaultUserAgent().toString()).startsWith("zendesk-java-client");
11+
}
12+
13+
@Test
14+
public void testNullVersion() {
15+
assertThat(new DefaultUserAgent(null).toString()).isEqualTo("zendesk-java-client");
16+
}
17+
18+
@Test
19+
public void testInvalidVersion() {
20+
assertThat(new DefaultUserAgent("???").toString()).isEqualTo("zendesk-java-client");
21+
}
22+
23+
@Test
24+
public void testSnapshotVersion() {
25+
assertThat(new DefaultUserAgent("0.1.2-SNAPSHOT").toString())
26+
.isEqualTo("zendesk-java-client/0.1.2-SNAPSHOT");
27+
}
28+
29+
@Test
30+
public void testReleaseVersion() {
31+
assertThat(new DefaultUserAgent("0.1.2").toString()).isEqualTo("zendesk-java-client/0.1.2");
32+
}
33+
}

0 commit comments

Comments
 (0)