From 13e56bc055feac03cbad0173a6dc498001547bbd Mon Sep 17 00:00:00 2001 From: prabhu <7842+prabhu@users.noreply.github.com> Date: Wed, 8 Jan 2025 14:42:14 +0000 Subject: [PATCH] Tag framework routes (#95) * Tag rails routes Signed-off-by: Prabhu Subramanian * Tag sinatra routes Signed-off-by: Prabhu Subramanian --------- Signed-off-by: Prabhu Subramanian --- .github/workflows/containers.yml | 1 + .../passes/taggers/ChennaiTagsPass.scala | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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 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..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 @@ -119,12 +119,50 @@ class ChennaiTagsPass(atom: Cpg) extends CpgPass(atom): ).store()(dstGraph) } 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( + 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) 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