package main import ( "fmt" "os" ) const version = "0.1.0" const usage = `PassAGE - A modern password manager using AGE encryption Usage: passage init [--path=subfolder] Initialize new password storage with a master password. Prompts for master password (used to encrypt/decrypt all passwords). passage [ls] [subfolder] List passwords. passage find pass-names... List passwords that match pass-names. passage [show] [--clip[=line-number]] pass-name Show existing password and optionally put it on the clipboard. passage grep [GREPOPTIONS] search-string Search for password files containing search-string when decrypted. passage insert [--multiline] [--force] pass-name Insert new password. Optionally, the entry may be multiline. passage edit pass-name Insert a new password or edit an existing password using ${EDITOR:-vi}. passage generate [--no-symbols] [--clip] [--in-place | --force] pass-name [pass-length] Generate a new password of pass-length (or 25 if unspecified). passage rm [--recursive] [--force] pass-name Remove existing password or directory, optionally forcefully. passage mv [--force] old-path new-path Renames or moves old-path to new-path, optionally forcefully. passage cp [--force] old-path new-path Copies old-path to new-path, optionally forcefully. passage backup [--output=file.tar.gz] Create a backup of the password store with integrity verification. passage restore [--force] [--skip-verify] backup-file.tar.gz Restore a backup of the password store with integrity verification. passage git git-command-args... If the password store is a git repository, execute a git command. passage help Show this text. passage version Show version information. Environment variables: PASSAGE_DIR Path to the password store (default: ~/.passage-store) PASSAGE_CLIP_TIME Time in seconds to keep password in clipboard (default: 10) PASSAGE_GENERATED_LENGTH Default length for generated passwords (default: 25) ` func main() { if len(os.Args) < 2 { cmdShow([]string{}) return } command := os.Args[1] args := os.Args[2:] switch command { case "init": cmdInit(args) case "help", "--help", "-h": fmt.Print(usage) case "version", "--version", "-v": fmt.Printf("PassAGE version %s\n", version) case "show", "ls", "list": cmdShow(args) case "find", "search": cmdFind(args) case "grep": cmdGrep(args) case "insert", "add": cmdInsert(args) case "edit": cmdEdit(args) case "generate": cmdGenerate(args) case "delete", "rm", "remove": cmdDelete(args) case "rename", "mv": cmdMove(args) case "copy", "cp": cmdCopy(args) case "backup": cmdBackup(args) case "restore": cmdRestore(args) case "git": cmdGit(args) default: // Try as show command cmdShow(os.Args[1:]) } }