enigma-bbs/docs/admin/oputil.md

8.2 KiB

layout title
page oputil

The oputil CLI

ENiGMA½ comes with oputil.js henceforth known as oputil, a command line interface (CLI) tool for sysops to perform general system and user administration. You likely used oputil to do the initial ENiGMA configuration.

Let's look the main help output as per this writing:

usage: optutil.js [--version] [--help]
                  <command> [<args>]

global args:
  -c, --config PATH         specify config path (./config/)
  -n, --no-prompt           assume defaults/don't prompt for input where possible

commands:
  user                      user utilities
  config                    config file management
  fb                        file base management
  mb                        message base management

Commands break up operations by groups:

Command Description
user User management
config System configuration and maintenance
fb File base configuration and management
mb Message base configuration and management

Global arguments apply to most commands and actions:

  • --config: Specify configuration directory if it is not the default of ./config/.
  • --no-prompt: Assume defaults and do not prompt when posisible.

Type ./oputil.js <command> --help for additional help on a particular command. The following sections will describe them.

User

The user command covers various user operations.

usage: optutil.js user <action> [<args>]

actions:
  pw USERNAME PASSWORD         set password to PASSWORD for USERNAME
  rm USERNAME                  permanently removes USERNAME user from system
  activate USERNAME            sets USERNAME's status to active
  deactivate USERNAME          sets USERNAME's status to inactive
  disable USERNAME             sets USERNAME's status to disabled
  lock USERNAME                sets USERNAME's status to locked
  group USERNAME [+|-]GROUP    adds (+) or removes (-) user from GROUP
Action Description Examples Aliases
pw Set password ./oputil.js user pw joeuser s3cr37 pass, passwd, password
rm Removes user ./oputil.js user del joeuser remove, del, delete
activate Activates user ./oputil.js user activate joeuser N/A
deactivate Deactivates user ./oputil.js user deactivate joeuser N/A
disable Disables user (user will not be able to login) ./oputil.js user disable joeuser N/A
lock Locks the user account (prevents logins) ./oputil.js user lock joeuser N/A
group Modifies users group membership Add to group: ./oputil.js user group joeuser +derp
Remove from group: ./oputil.js user group joeuser -derp
N/A

Configuration

The config command allows sysops to perform various system configuration and maintenance tasks.

usage: optutil.js config <action> [<args>]

actions:
  new                      generate a new/initial configuration
  import-areas PATH        import areas using fidonet *.NA or AREAS.BBS file from PATH

import-areas args:
  --conf CONF_TAG          specify conference tag in which to import areas
  --network NETWORK        specify network name/key to associate FTN areas
  --uplinks UL1,UL2,...    specify one or more comma separated uplinks
  --type TYPE              specifies area import type. valid options are "bbs" and "na"
Action Description Examples
new Generates a new/initial configuration ./oputil.js config new (follow the prompts)
import-areas Imports areas using a FidoNet style *.NA or AREAS.BBS formatted file ./oputil.js config import-areas /some/path/l33tnet.na

When using the import-areas action, you will be prompted for any missing additional arguments described in "import-areas args".

File Base Management

The fb command provides a powerful file base management interface.

usage: oputil.js fb <action> [<args>]

actions:
  scan AREA_TAG[@STORAGE_TAG]  scan specified area
                               may also contain optional GLOB as last parameter,
                               for examle: scan some_area *.zip

  info CRITERIA                display information about areas and/or files
                               where CRITERIA is one of the following:
                               AREA_TAG|SHA|FILE_ID|FILENAME_WC
                               SHA may be a full or partial SHA-256

  mv SRC [SRC...] DST          move entry(s) from SRC to DST
                               SRC: FILENAME_WC|SHA|FILE_ID|AREA_TAG[@STORAGE_TAG]
                               DST: AREA_TAG[@STORAGE_TAG]

  rm SRC [SRC...]              remove entry(s) from the system matching SRC
                               SRC: FILENAME_WC|SHA|FILE_ID|AREA_TAG[@STORAGE_TAG]

scan args:
  --tags TAG1,TAG2,...         specify tag(s) to assign to discovered entries

  --desc-file [PATH]           prefer file descriptions from DESCRIPT.ION file over
                               other sources such as FILE_ID.DIZ.
                               if PATH is specified, use DESCRIPT.ION at PATH instead
                               of looking in specific storage locations
  --update                     attempt to update information for existing entries
  --quick                      perform quick scan

info args:
  --show-desc                  display short description, if any

remove args:
  --phys-file                  also remove underlying physical file

general information:
  AREA_TAG[@STORAGE_TAG]       can specify an area tag and optionally, a storage specific tag
                               example: retro@bbs
  
  FILENAME_WC                  filename with * and ? wildcard support. may match 0:n entries
  SHA                          full or partial SHA-256
  FILE_ID                      a file identifier. see file.sqlite3

Scan File Area

The scan action can (re)scan a file area for new entries as well as update (--update) existing entry records (description, etc.). When scanning, a valid area tag must be specified. Optionally, storage tag may also be supplied in order to scan a specific filesystem location using the @the_storage_tag syntax. If a GLOB is supplied as the last argument, only file entries with filenames matching will be processed.

Examples

Performing a quick scan of a specific area's storage location ("retro_warez", "retro_warez_games) matching only *.zip extensions:

$ ./oputil.js fb scan --quick retro_warez@retro_warez_games *.zip`

Update all entries in the "artscene" area supplying the file tags "artscene", and "textmode".

$ ./oputil.js fb scan --update --quick --tags artscene,textmode artscene`

Scan "oldschoolbbs" area using the description file at "/path/to/DESCRIPT.ION":

$ ./oputil.js fb scan --desc-file /path/to/DESCRIPT.ION oldschoolbbs

Retrieve Information

The info action can retrieve information about an area or file entry(s).

Examples

Information about a particular area:

$ ./oputil.js fb info retro_pc
areaTag: retro_pc
name: Retro PC
desc: Oldschool / retro PC
storageTag: retro_pc_tdc_1990 => /file_base/dos/tdc/1990
storageTag: retro_pc_tdc_1991 => /file_base/dos/tdc/1991
storageTag: retro_pc_tdc_1992 => /file_base/dos/tdc/1992
storageTag: retro_pc_tdc_1993 => /file_base/dos/tdc/1993

Perhaps we want to fetch some information about a file in which we know piece of the filename:

$ ./oputil.js fb info "impulse*"
file_id: 143
sha_256: 547299301254ccd73eba4c0ec9cd6ab8c5929fbb655e72c4cc842f11332792d4
area_tag: impulse_project
storage_tag: impulse_project
path: /file_base/impulse_project/impulseproject01.tar.gz
hashTags: impulse.project,8bit.music,cid
uploaded: 2018-03-10T11:36:41-07:00
dl_count: 23
archive_type: application/gzip
byte_size: 114313
est_release_year: 2015
file_crc32: fc6655d
file_md5: 3455f74bbbf9539e69bd38f45e039a4e
file_sha1: 558fab3b49a8ac302486e023a3c2a86bd4e4b948