enigma-bbs/docs/archive.md

3.2 KiB

File Archives & Archivers

ENiGMA½ can detect and process various archive formats such as zip and arj for a variety of tasks from file upload processing to EchoMail bundle compress/decompression. The archives section of config.hjson is used to override defaults, add new handlers, and so on.

Archivers

Archivers are manged via the archives:archivers configuration block of config.hjson. Each entry in this section defines an external archiver that can be referenced in other sections of config.hjson as and in code. Entries define how to compress, decompress (a full archive), list, and extract (specific files from an archive).

Predefined Archivers

The following archivers are pre-configured in ENiGMA½ as of this writing. Remember that you can override settings or add new handlers!

ZZip

  • Formats: .7z, .bzip2, .zip, .gzip/.gz, and more
  • Key: 7Zip
  • Homepage/package: 7-zip.org. Generally obtained from a p7zip package in *nix environments. See http://p7zip.sourceforge.net/ for details.

Lha

Arj

  • Formats: .arj
  • Key: Arj
  • Homepage/package: arj on most *nix environments.

Archiver Configuration

Archiver entries in config.hjson are mostly self explanatory with the exception of list commands that require some additional information. The args member for an entry is an array of arguments to pass to cmd. Some variables are available to args that will be expanded by the system:

  • {archivePath} (all): Path to the archive
  • {fileList} (compress, extract): List of file(s) to compress or extract
  • {extractPath} (decompress, extract): Path to extract to

For list commands, the entryMatch key must be provided. This key should provide a regular expression that matches two sub groups: One for uncompressed file byte sizes (sub group 1) and the other for file names (sub group 2). An optional entryGroupOrder can be supplied to change the default sub group order.

Example Archiver Configuration

7Zip: {
	compress: {
		cmd: 7za,
		args: [ "a", "-tzip", "{archivePath}", "{fileList}" ]
	}
	decompress: {
		cmd: 7za,
		args: [ "e", "-o{extractPath}", "{archivePath}" ]
	}
	list: {
		cmd: 7za,
		args: [ "l", "{archivePath}" ]
		entryMatch: "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\s[0-9]{2}:[0-9]{2}:[0-9]{2}\\s[A-Za-z\\.]{5}\\s+([0-9]+)\\s+[0-9]+\\s+([^\\r\\n]+)$",
	}
	extract: {
		cmd: 7za,
		args [ "e", "-o{extractPath}", "{archivePath}", "{fileList}" ]
	}
}

Archive Formats

Archive formats can be defined such that ENiGMA½ can detect them by signature or extension, then utilize the correct archiver to process them. Formats are defined in the archives:formats key in config.hjson. Many differnet types come pre-configured (see core/config.js).

Example Archive Format Configuration

zip: {
	sig: "504b0304" /* byte signature in HEX */
	offset: 0
	exts: [ "zip" ]
	handler: 7Zip /* points to a defined archiver */
	desc: "ZIP Archive"
}