From 7f18cc46a1227511094d79eddf8f1ebb4f018b7f Mon Sep 17 00:00:00 2001 From: Prabhu Subramanian Date: Tue, 7 Jan 2025 17:18:15 +0000 Subject: [PATCH 1/3] Tag rails routes Signed-off-by: Prabhu Subramanian --- .../x2cpg/passes/taggers/ChennaiTagsPass.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala index dbf9baf4..0a0511e9 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala @@ -119,12 +119,24 @@ class ChennaiTagsPass(atom: Cpg) extends CpgPass(atom): ).store()(dstGraph) } end tagPhpRoutes + private def tagRubyRoutes(dstGraph: DiffGraphBuilder): Unit = + atom.method.where( + _.filename("config/routes.rb").code( + ".*(get|post|put|delete|head|option|resources|namespace).*" + ) + ).newTagNode( + FRAMEWORK_ROUTE + ).store()(dstGraph) + atom.method.filename(".*controller.rb.*").parameter.newTagNode(FRAMEWORK_INPUT).store()( + dstGraph + ) override def run(dstGraph: DiffGraphBuilder): Unit = if language == Languages.PYTHON || language == Languages.PYTHONSRC then tagPythonRoutes(dstGraph) if language == Languages.NEWC || language == Languages.C then tagCRoutes(dstGraph) if language == Languages.PHP then tagPhpRoutes(dstGraph) + if language == Languages.RUBYSRC then tagRubyRoutes(dstGraph) atom.configFile("chennai.json").content.foreach { cdxData => val ctagsJson = parse(cdxData).getOrElse(Json.Null) val cursor: HCursor = ctagsJson.hcursor From 6d19cd0e9eb735bcee12ee76f1b30cf22cb5fde8 Mon Sep 17 00:00:00 2001 From: Prabhu Subramanian Date: Tue, 7 Jan 2025 17:26:22 +0000 Subject: [PATCH 2/3] Tag rails routes Signed-off-by: Prabhu Subramanian --- .github/workflows/containers.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/containers.yml b/.github/workflows/containers.yml index 4ecca8a0..bf15ad37 100644 --- a/.github/workflows/containers.yml +++ b/.github/workflows/containers.yml @@ -74,6 +74,7 @@ jobs: run: | python3.12 -m pip install --upgrade pip python3.12 -m pip install poetry + python3.12 -m poetry self add poetry-plugin-export python3.12 -m poetry export -f requirements.txt --with=science --without-hashes --output target/chen-science-requirements.txt python3.12 -m poetry export -f requirements.txt --with=database --without-hashes --output target/chen-database-requirements.txt - name: Upload chen to ghcr From ef53138d4dd4bbe5083b5aea87ec0c6fb55c9e4f Mon Sep 17 00:00:00 2001 From: Prabhu Subramanian Date: Wed, 8 Jan 2025 14:12:02 +0000 Subject: [PATCH 3/3] Tag sinatra routes Signed-off-by: Prabhu Subramanian --- .../passes/taggers/ChennaiTagsPass.scala | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala index 0a0511e9..5a40f3f5 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/ChennaiTagsPass.scala @@ -120,16 +120,42 @@ class ChennaiTagsPass(atom: Cpg) extends CpgPass(atom): } end tagPhpRoutes private def tagRubyRoutes(dstGraph: DiffGraphBuilder): Unit = + // rails + val railsRoutePrefix = ".*(get|post|put|delete|head|option|resources|namespace)\\s('|\").*" atom.method.where( _.filename("config/routes.rb").code( - ".*(get|post|put|delete|head|option|resources|namespace).*" + railsRoutePrefix ) ).newTagNode( FRAMEWORK_ROUTE ).store()(dstGraph) + atom.method.where( + _.filename("config/routes.rb").code( + railsRoutePrefix + ) + ).parameter.newTagNode(FRAMEWORK_INPUT).store()( + dstGraph + ) atom.method.filename(".*controller.rb.*").parameter.newTagNode(FRAMEWORK_INPUT).store()( dstGraph ) + atom.method.filename(".*controller.rb.*").methodReturn.newTagNode( + FRAMEWORK_OUTPUT + ).store()(dstGraph) + // sinatra + val sinatraRoutePrefix = + "(app\\.namespace|app\\.)?(get|post|delete|head|options|put)\\s('|\").*" + atom.method.code(sinatraRoutePrefix).newTagNode( + FRAMEWORK_ROUTE + ).store()(dstGraph) + atom.method.code(sinatraRoutePrefix).parameter + .newTagNode(FRAMEWORK_INPUT).store()( + dstGraph + ) + atom.method.code(sinatraRoutePrefix).methodReturn.newTagNode( + FRAMEWORK_OUTPUT + ).store()(dstGraph) + end tagRubyRoutes override def run(dstGraph: DiffGraphBuilder): Unit = if language == Languages.PYTHON || language == Languages.PYTHONSRC then tagPythonRoutes(dstGraph)