Skip to content

Commit a8ae1f0

Browse files
committed
Fix bugs with Javalin found in e2e test
1 parent 54281d5 commit a8ae1f0

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

agent/src/main/java/dev/aikido/agent/Wrappers.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package dev.aikido.agent;
22

33
import dev.aikido.agent.wrappers.*;
4-
import dev.aikido.agent.wrappers.javalin.JavalinDataWrapper;
5-
import dev.aikido.agent.wrappers.javalin.JavalinWrapper;
4+
import dev.aikido.agent.wrappers.javalin.*;
65
import dev.aikido.agent.wrappers.jdbc.MSSQLWrapper;
76
import dev.aikido.agent.wrappers.jdbc.MariaDBWrapper;
87
import dev.aikido.agent.wrappers.jdbc.MysqlCJWrapper;
@@ -34,6 +33,7 @@ private Wrappers() {}
3433
new PathsWrapper(),
3534
new NettyWrapper(),
3635
new JavalinWrapper(),
37-
new JavalinDataWrapper()
36+
new JavalinDataWrapper(),
37+
new JavalinContextClearWrapper()
3838
);
3939
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dev.aikido.agent.wrappers.javalin;
2+
3+
import dev.aikido.agent.wrappers.Wrapper;
4+
import dev.aikido.agent_api.context.Context;
5+
import net.bytebuddy.asm.Advice;
6+
import net.bytebuddy.description.method.MethodDescription;
7+
import net.bytebuddy.description.type.TypeDescription;
8+
import net.bytebuddy.matcher.ElementMatcher;
9+
import static net.bytebuddy.matcher.ElementMatchers.*;
10+
11+
public class JavalinContextClearWrapper implements Wrapper {
12+
13+
@Override
14+
public String getName() {
15+
return JavalinContextClearAdvice.class.getName();
16+
}
17+
18+
@Override
19+
public ElementMatcher<? super MethodDescription> getMatcher() {
20+
return isDeclaredBy(getTypeMatcher()).and(named("service"));
21+
}
22+
23+
@Override
24+
public ElementMatcher<? super TypeDescription> getTypeMatcher() {
25+
return nameContains("io.javalin.jetty.JavalinJettyServlet");
26+
}
27+
28+
public static class JavalinContextClearAdvice {
29+
@Advice.OnMethodEnter
30+
public static void before() {
31+
Context.reset();
32+
}
33+
}
34+
}

agent_api/src/main/java/dev/aikido/agent_api/context/JavalinContextObject.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public JavalinContextObject(
1818
}
1919
this.query = new HashMap<>(queryParams);
2020
this.cookies = extractCookies(cookies);
21-
this.headers = new HashMap<>(headers);
21+
this.headers = extractHeaders(headers);
2222
this.route = buildRouteFromUrl(this.url);
2323
this.remoteAddress = getIpFromRequest(rawIp, this.headers);
24-
this.source = "SpringFramework";
24+
this.source = "Javalin";
2525
this.redirectStartNodes = new ArrayList<>();
2626

2727
// We don't have access yet to the route parameters, will add once we have access.
@@ -40,4 +40,12 @@ private static HashMap<String, List<String>> extractCookies(Map<String, String>
4040
}
4141
return cookies;
4242
}
43+
private static HashMap<String, String> extractHeaders(Map<String, String> rawHeaders) {
44+
HashMap<String, String> headers = new HashMap<>();
45+
for (Map.Entry<String, String> entry: rawHeaders.entrySet()) {
46+
// Lower-case keys :
47+
headers.put(entry.getKey().toLowerCase(), entry.getValue());
48+
}
49+
return headers;
50+
}
4351
}

0 commit comments

Comments
 (0)