diff --git a/.github/workflows/containers.yml b/.github/workflows/containers.yml index 4ecca8a..bf15ad3 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 dbf9baf..5a40f3f 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