This commit introduces the `Enchantrix` library to add support for the `.trix` encrypted file format. The main changes are: - The `matrix` format has been renamed to `tim` (Terminal Isolation Matrix). - The `.tim` format is now a specialized `.trix` file. - A new `decode` command has been added to decode `.trix` and `.tim` files. - The `collect` commands now support the `trix` and `tim` formats. - A `--password` flag has been added to the `collect` commands for encryption. - A `--i-am-in-isolation` flag has been added to the `decode` command for safely decoding `.tim` files. - The decryption functionality is currently disabled due to a bug in the `Enchantrix` library. A follow-up PR will be created to re-enable it.
137 lines
3.7 KiB
Markdown
137 lines
3.7 KiB
Markdown
# Borg
|
|
|
|
Borg is a command-line tool for collecting resources from various URIs (like Git repositories and websites) into a unified format.
|
|
|
|
## Installation
|
|
|
|
You can install Borg using `go install`:
|
|
|
|
```bash
|
|
go install github.com/Snider/Borg@latest
|
|
```
|
|
|
|
## Usage
|
|
|
|
Borg provides several subcommands for collecting different types of resources.
|
|
|
|
### `borg collect`
|
|
|
|
The `collect` command is the main entry point for collecting resources. It has several subcommands for different resource types.
|
|
|
|
#### `borg collect github repo`
|
|
|
|
This command collects a single Git repository and stores it in a DataNode.
|
|
|
|
```bash
|
|
./borg collect github repo https://github.com/Snider/Borg --output borg.dat
|
|
```
|
|
|
|
#### `borg collect github release`
|
|
|
|
This command downloads and packages the assets from a GitHub release.
|
|
|
|
```bash
|
|
./borg collect github release https://github.com/Snider/Borg/releases/latest --output borg-release.dat
|
|
```
|
|
|
|
#### `borg collect pwa`
|
|
|
|
This command collects a Progressive Web App (PWA) from a given URI.
|
|
|
|
```bash
|
|
./borg collect pwa --uri https://squoosh.app --output squoosh.dat
|
|
```
|
|
|
|
#### `borg collect website`
|
|
|
|
This command collects a single website and stores it in a DataNode.
|
|
|
|
```bash
|
|
./borg collect website https://example.com --output example.dat
|
|
```
|
|
|
|
### `borg all`
|
|
|
|
The `borg all` command collects all public repositories from a GitHub user or organization.
|
|
|
|
```bash
|
|
./borg all https://github.com/Snider --output snider.dat
|
|
```
|
|
|
|
### `borg compile`
|
|
|
|
The `borg compile` command compiles a `Borgfile` into a Terminal Isolation Matrix.
|
|
|
|
```bash
|
|
./borg compile --file Borgfile --output a.tim
|
|
```
|
|
|
|
### `borg run`
|
|
|
|
The `borg run` command executes a Terminal Isolation Matrix.
|
|
|
|
```bash
|
|
./borg run a.tim
|
|
```
|
|
|
|
### `borg serve`
|
|
|
|
The `borg serve` command serves a DataNode or Terminal Isolation Matrix using a static file server.
|
|
|
|
```bash
|
|
./borg serve my-collected-data.dat --port 8080
|
|
```
|
|
|
|
### `borg decode`
|
|
|
|
The `borg decode` command decodes a `.trix` or `.tim` file.
|
|
|
|
```bash
|
|
./borg decode my-collected-data.trix --output my-collected-data.dat
|
|
```
|
|
|
|
## Formats
|
|
|
|
Borg supports three output formats: `datanode`, `tim`, and `trix`.
|
|
|
|
### DataNode
|
|
|
|
The `datanode` format is a simple tarball containing the collected resources. This is the default format.
|
|
|
|
### Terminal Isolation Matrix (TIM)
|
|
|
|
The Terminal Isolation Matrix (`tim`) is a `runc` bundle that can be executed in an isolated environment. This is useful for analyzing potentially malicious code without affecting the host system. A `.tim` file is a specialized `.trix` file with the `tim` flag set in its header.
|
|
|
|
To create a TIM, use the `--format tim` flag with any of the `collect` subcommands.
|
|
|
|
```bash
|
|
./borg collect github repo https://github.com/Snider/Borg --output borg.tim --format tim
|
|
```
|
|
|
|
### Trix
|
|
|
|
The `trix` format is an encrypted and structured file format. It is used as the underlying format for `.tim` files, but can also be used on its own for encrypting any `DataNode`.
|
|
|
|
To create a `.trix` file, use the `--format trix` flag with any of the `collect` subcommands.
|
|
|
|
```bash
|
|
./borg collect github repo https://github.com/Snider/Borg --output borg.trix --format trix --password "my-secret-password"
|
|
```
|
|
|
|
## Encryption
|
|
|
|
Both the `tim` and `trix` formats can be encrypted with a password by using the `--password` flag.
|
|
|
|
## Decoding
|
|
|
|
To decode a `.trix` or `.tim` file, use the `decode` command. If the file is encrypted, you must provide the `--password` flag.
|
|
|
|
```bash
|
|
./borg decode borg.trix --output borg.dat --password "my-secret-password"
|
|
```
|
|
|
|
If you are decoding a `.tim` file, you must also provide the `--i-am-in-isolation` flag. This is a safety measure to prevent you from accidentally executing potentially malicious code on your host system.
|
|
|
|
```bash
|
|
./borg decode borg.tim --output borg.dat --i-am-in-isolation
|
|
```
|