diff --git a/README.md b/README.md index 2e54ddc..0c78493 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,14 @@ A file called `openapi.generated.json` would be created with the endpoints infor ATOM_TOOLS_OPENAPI_FILENAME=openapi.json atom usages --extract-endpoints -o app.atom --slice-outfile usages.json -l ruby . ``` +Container-based invocation: + +```shell +docker run --rm -v /tmp:/tmp -e ATOM_TOOLS_OPENAPI_FILENAME=openapi.json -v $(pwd):/app:rw -t ghcr.io/appthreat/atom atom usages --extract-endpoints -l ruby -o /app/app.atom -s /app/usages.slices.json /app +# podman run --rm -v /tmp:/tmp -e ATOM_TOOLS_OPENAPI_FILENAME=openapi.json -v $(pwd):/app:rw -t ghcr.io/appthreat/atom atom usages --extract-endpoints -l ruby -o /app/app.atom -s /app/usages.slices.json /app +``` + + ### Export atom to graphml or dot format It is possible to export each method along with data dependencies in an atom to graphml or dot format. Simply pass `--export` to enable this feature. diff --git a/src/main/scala/io/appthreat/atom/Atom.scala b/src/main/scala/io/appthreat/atom/Atom.scala index 19cff27..94476dc 100644 --- a/src/main/scala/io/appthreat/atom/Atom.scala +++ b/src/main/scala/io/appthreat/atom/Atom.scala @@ -366,10 +366,14 @@ object Atom: val openapiFileName = sys.env.getOrElse("ATOM_TOOLS_OPENAPI_FILENAME", "openapi.generated.json") val openapiFormat = sys.env.getOrElse("ATOM_TOOLS_OPENAPI_FORMAT", "openapi3.1.0") + val atomToolsWorkDir = + sys.env.getOrElse("ATOM_TOOLS_WORK_DIR", config.inputPath.parent.pathAsString) + println(s"atom-tools convert -i ${config.outputSliceFile} -t ${config.language} -f ${openapiFormat} -o ${config + .inputPath.pathAsString}${java.io.File.separator}${openapiFileName}") val result = ExternalCommand.run( - s"atom-tools convert -i ${config.outputSliceFile} -t ${config.language} -f ${openapiFormat} -q -o ${config + s"atom-tools convert -i ${config.outputSliceFile} -t ${config.language} -f ${openapiFormat} -o ${config .inputPath.pathAsString}${java.io.File.separator}${openapiFileName}", - "." + atomToolsWorkDir ) result match case Success(_) => @@ -378,6 +382,7 @@ object Atom: println( s"Failed to run atom-tools. Use the atom container image or perform 'pip install atom-tools' and re-run this command. Exception: ${exception.getMessage}" ) + end if case _: ReachablesConfig => saveSlice(config.outputSliceFile, sliceCpg(ag).map(_.toJson)) case x: AtomParseDepsConfig =>