Skip to content

Commit 8b33e6d

Browse files
authored
Improved Hapi support
- server defined by Glue
1 parent ed305d2 commit 8b33e6d

File tree

1 file changed

+22
-1
lines changed
  • javascript/ql/lib/semmle/javascript/frameworks

1 file changed

+22
-1
lines changed

javascript/ql/lib/semmle/javascript/frameworks/Hapi.qll

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,21 @@ module Hapi {
99
/**
1010
* An expression that creates a new Hapi server.
1111
*/
12-
class ServerDefinition extends Http::Servers::StandardServerDefinition, DataFlow::NewNode {
12+
class ServerDefinition extends Http::Servers::StandardServerDefinition, DataFlow::Node {
1313
ServerDefinition() {
1414
// `server = new Hapi.Server()`
1515
this = DataFlow::moduleMember("hapi", "Server").getAnInstantiation()
16+
or
17+
// server = Glue.compose(manifest, composeOptions)
18+
this = DataFlow::moduleMember("@hapi/glue", "compose").getAnInvocation()
19+
or
20+
// server inside a plugin
21+
// TODO match `function (server, options)`
22+
exists(Function f |
23+
this.(DataFlow::ParameterNode).getParameter() = f.getParameter(0) and
24+
f.getParameter(0).getName() = "server" and
25+
f.getParameter(1).getName() = "options"
26+
)
1627
}
1728
}
1829

@@ -209,6 +220,16 @@ module Hapi {
209220
// server.ext('/', fun)
210221
this.getMethodName() = "ext" and
211222
handler = this.getArgument(1)
223+
or
224+
// server.route([{ handler(request){}])
225+
this.getMethodName() = "route" and
226+
handler =
227+
this.getArgument(0)
228+
.(DataFlow::ArrayLiteralNode)
229+
.getAnElement()
230+
.(DataFlow::ObjectLiteralNode)
231+
.getAPropertySource("handler")
232+
.getAFunctionValue()
212233
)
213234
}
214235

0 commit comments

Comments
 (0)