Skip to content

Commit d14618f

Browse files
authored
fix: Support callpod user agent format (#21828)
Fixes #21829 Fixes #21546
1 parent 2512466 commit d14618f

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

flow-server/src/main/java/com/vaadin/flow/shared/BrowserDetails.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,17 @@ private void parseAndroidVersion(String userAgent) {
366366
return;
367367
}
368368

369+
if (userAgent.contains("callpod keeper for android")) {
370+
String token = "; android ";
371+
int startIndex = userAgent.indexOf(token) + token.length();
372+
int endIndex = userAgent.indexOf(";", startIndex);
373+
String osVersionString = safeSubstring(userAgent, startIndex,
374+
endIndex);
375+
String[] parts = osVersionString.split("\\.");
376+
parseOsVersion(parts, userAgent);
377+
return;
378+
}
379+
369380
String osVersionString = safeSubstring(userAgent,
370381
userAgent.indexOf("android ") + "android ".length(),
371382
userAgent.length());

flow-server/src/test/java/com/vaadin/flow/shared/BrowserDetailsTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public class BrowserDetailsTest extends TestCase {
8585
private static final String ANDROID_GOOGLE_NEXUS_2_2 = "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
8686
private static final String ANDROID_MOTOROLA_3_0 = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13";
8787
private static final String ANDROID_GALAXY_NEXUS_4_0_4_CHROME = "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19";
88+
private static final String ANDROID_CALLPOD_KEEPER = "callpod keeper for android 1.0 (10.1.1/240) dalvik/2.1.0 (linux; u; android 6.0; lg-v495 build/mra58k)";
8889

8990
private static final String EDGE_12_WINDOWS_10 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240";
9091

@@ -110,6 +111,8 @@ public class BrowserDetailsTest extends TestCase {
110111
// Web crawlers and bots
111112
private static final String BYTE_SPIDER = "mozilla/5.0 (linux; android 5.0) applewebkit/537.36 (khtml, like gecko) mobile safari/537.36 (compatible; bytespider; spider-feedback@bytedance.com)";
112113
private static final String DUCK_DUCK_BOT = "ddg_android/5.169.0 (com.duckduckgo.mobile.android; android api 33)";
114+
private static final String DUCK_DUCK_BOT_2 = "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.106 Mobile DuckDuckGo/5 Safari/537.36";
115+
private static final String DUCK_DUCK_BOT_3 = "DuckDuckGo/0.26.3 CFNetwork/1331.0.7 Darwin/21.4.0";
113116

114117
public void testSafari3() {
115118
BrowserDetails bd = new BrowserDetails(SAFARI3_WINDOWS);
@@ -236,6 +239,14 @@ public void testAndroid40Chrome() {
236239

237240
}
238241

242+
public void testAndroidCallpodKeeper() {
243+
BrowserDetails bd = new BrowserDetails(ANDROID_CALLPOD_KEEPER);
244+
assertOSMajorVersion(bd, 6);
245+
assertOSMinorVersion(bd, 0);
246+
assertEngineVersion(bd, -1);
247+
248+
}
249+
239250
private void assertOSMajorVersion(BrowserDetails bd, int i) {
240251
assertEquals(i, bd.getOperatingSystemMajorVersion());
241252
}
@@ -740,7 +751,7 @@ public void testByteSpiderWebCrawler() {
740751
assertAndroid(bd, 5, 0);
741752
}
742753

743-
public void testDuckDuckBot() {
754+
public void testDuckDuckBot1() {
744755
BrowserDetails bd = new BrowserDetails(DUCK_DUCK_BOT);
745756
assertUnspecifiedBrowser(bd);
746757
assertBrowserMajorVersion(bd, -1);
@@ -749,6 +760,34 @@ public void testDuckDuckBot() {
749760
assertAndroid(bd, 5, 169);
750761
}
751762

763+
public void testDuckDuckBot2() {
764+
BrowserDetails bd = new BrowserDetails(DUCK_DUCK_BOT_2);
765+
assertBrowserMajorVersion(bd, 130);
766+
assertBrowserMinorVersion(bd, 0);
767+
assertEngineVersion(bd, 537.36f);
768+
assertAndroid(bd, 14, -1);
769+
}
770+
771+
public void testDuckDuckBot3() {
772+
BrowserDetails bd = new BrowserDetails(DUCK_DUCK_BOT_3);
773+
assertUnspecifiedBrowser(bd);
774+
assertBrowserMajorVersion(bd, -1);
775+
assertBrowserMinorVersion(bd, -1);
776+
assertEngineVersion(bd, -1);
777+
778+
bd = new BrowserDetails("DuckDuckGo");
779+
assertUnspecifiedBrowser(bd);
780+
assertBrowserMajorVersion(bd, -1);
781+
assertBrowserMinorVersion(bd, -1);
782+
assertEngineVersion(bd, -1);
783+
784+
bd = new BrowserDetails("DuckDuckGo/5");
785+
assertUnspecifiedBrowser(bd);
786+
assertBrowserMajorVersion(bd, -1);
787+
assertBrowserMinorVersion(bd, -1);
788+
assertEngineVersion(bd, -1);
789+
}
790+
752791
private static UserAgent[] getUserAgentDetails(String agentFile)
753792
throws IOException {
754793
String userAgents = IOUtils.toString(

0 commit comments

Comments
 (0)