From 53c29160e41c015f5900947e4d5d707f0b35523a Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Wed, 30 Oct 2024 16:32:06 +0100 Subject: [PATCH] add bitwarden cli completion --- dot_zsh/completion/_bw | 506 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 506 insertions(+) create mode 100644 dot_zsh/completion/_bw diff --git a/dot_zsh/completion/_bw b/dot_zsh/completion/_bw new file mode 100644 index 0000000..0b96ce5 --- /dev/null +++ b/dot_zsh/completion/_bw @@ -0,0 +1,506 @@ +#compdef _bw bw + +function _bw { + local -a commands + + _arguments -C \ + '--pretty[Format output. JSON is tabbed with two spaces.]' \ + '--raw[Return raw output instead of a descriptive message.]' \ + '--response[Return a JSON formatted version of response output.]' \ + '--cleanexit[Exit with a success exit code (0) unless an error is thrown.]' \ + '--quiet[Don'"'"'t return anything to stdout.]' \ + '--nointeraction[Do not prompt for interactive user input.]' \ + '--session[Pass session key instead of reading from env.]' \ + '(-v --version)'{-v,--version}'[output the version number]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "login:Log into a user account." + "logout:Log out of the current user account." + "lock:Lock the vault and destroy active session keys." + "unlock:Unlock the vault and return a new session key." + "sync:Pull the latest vault data from server." + "generate:Generate a password/passphrase." + "encode:Base 64 encode stdin." + "config:Configure CLI settings." + "update:Check for updates." + "completion:Generate shell completions." + "status:Show server, last sync, user information, and vault status." + "list:List an array of objects from the vault." + "get:Get an object from the vault." + "create:Create an object in the vault." + "edit:Edit an object from the vault." + "delete:Delete an object from the vault." + "restore:Restores an object from the trash." + "move:Move an item to an organization." + "confirm:Confirm an object to the organization." + "import:Import vault data from a file." + "export:Export vault data to a CSV or JSON file." + "share:--DEPRECATED-- Move an item to an organization." + "send:Work with Bitwarden sends. A Send can be quickly created using this command or subcommands can be used to fine-tune the Send" + "receive:Access a Bitwarden Send from a url" + "device-approval:Manage device approval requests sent to organizations that use SSO with trusted devices." + "serve:Start a RESTful API webserver." + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + login) + _bw_login + ;; + logout) + _bw_logout + ;; + lock) + _bw_lock + ;; + unlock) + _bw_unlock + ;; + sync) + _bw_sync + ;; + generate) + _bw_generate + ;; + encode) + _bw_encode + ;; + config) + _bw_config + ;; + update) + _bw_update + ;; + completion) + _bw_completion + ;; + status) + _bw_status + ;; + list) + _bw_list + ;; + get) + _bw_get + ;; + create) + _bw_create + ;; + edit) + _bw_edit + ;; + delete) + _bw_delete + ;; + restore) + _bw_restore + ;; + move) + _bw_move + ;; + confirm) + _bw_confirm + ;; + import) + _bw_import + ;; + export) + _bw_export + ;; + share) + _bw_share + ;; + send) + _bw_send + ;; + receive) + _bw_receive + ;; + device-approval) + _bw_device-approval + ;; + serve) + _bw_serve + ;; + esac +} + +function _bw_login { + _arguments -C \ + '--method[Two-step login method.]' \ + '--code[Two-step login code.]' \ + '--sso[Log in with Single-Sign On.]' \ + '--apikey[Log in with an Api Key.]' \ + '--passwordenv[Environment variable storing your password]' \ + '--passwordfile[Path to a file containing your password as its first line]' \ + '--check[Check login status.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_logout { + +} + +function _bw_lock { + +} + +function _bw_unlock { + _arguments -C \ + '--check[Check lock status.]' \ + '--passwordenv[Environment variable storing your password]' \ + '--passwordfile[Path to a file containing your password as its first line]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_sync { + _arguments -C \ + '(-f --force)'{-f,--force}'[Force a full sync.]' \ + '--last[Get the last sync date.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_generate { + _arguments -C \ + '(-u --uppercase)'{-u,--uppercase}'[Include uppercase characters.]' \ + '(-l --lowercase)'{-l,--lowercase}'[Include lowercase characters.]' \ + '(-n --number)'{-n,--number}'[Include numeric characters.]' \ + '(-s --special)'{-s,--special}'[Include special characters.]' \ + '(-p --passphrase)'{-p,--passphrase}'[Generate a passphrase.]' \ + '--length[Length of the password.]' \ + '--words[Number of words.]' \ + '--minNumber[Minimum number of numeric characters.]' \ + '--minSpecial[Minimum number of special characters.]' \ + '--separator[Word separator.]' \ + '(-c --capitalize)'{-c,--capitalize}'[Title case passphrase.]' \ + '--includeNumber[Passphrase includes number.]' \ + '--ambiguous[Avoid ambiguous characters.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_encode { + +} + +function _bw_config { + _arguments -C \ + '--web-vault[Provides a custom web vault URL that differs from the base URL.]' \ + '--api[Provides a custom API URL that differs from the base URL.]' \ + '--identity[Provides a custom identity URL that differs from the base URL.]' \ + '--icons[Provides a custom icons service URL that differs from the base URL.]' \ + '--notifications[Provides a custom notifications URL that differs from the base URL.]' \ + '--events[Provides a custom events URL that differs from the base URL.]' \ + '--key-connector[Provides the URL for your Key Connector server.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_update { + +} + +function _bw_completion { + _arguments -C \ + '--shell[Shell to generate completions for.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_status { + +} + +function _bw_list { + _arguments -C \ + '--search[Perform a search on the listed objects.]' \ + '--url[Filter items of type login with a url-match search.]' \ + '--folderid[Filter items by folder id.]' \ + '--collectionid[Filter items by collection id.]' \ + '--organizationid[Filter items or collections by organization id.]' \ + '--trash[Filter items that are deleted and in the trash.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_get { + _arguments -C \ + '--itemid[Attachment'"'"'s item id.]' \ + '--output[Output directory or filename for attachment.]' \ + '--organizationid[Organization id for an organization object.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_create { + _arguments -C \ + '--file[Path to file for attachment.]' \ + '--itemid[Attachment'"'"'s item id.]' \ + '--organizationid[Organization id for an organization object.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_edit { + _arguments -C \ + '--organizationid[Organization id for an organization object.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_delete { + _arguments -C \ + '--itemid[Attachment'"'"'s item id.]' \ + '--organizationid[Organization id for an organization object.]' \ + '(-p --permanent)'{-p,--permanent}'[Permanently deletes the item instead of soft-deleting it (item only).]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_restore { + +} + +function _bw_move { + +} + +function _bw_confirm { + _arguments -C \ + '--organizationid[Organization id for an organization object.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_import { + _arguments -C \ + '--formats[List formats]' \ + '--organizationid[ID of the organization to import to.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_export { + _arguments -C \ + '--output[Output directory or filename.]' \ + '--format[Export file format.]' \ + '--password[Use password to encrypt instead of your Bitwarden account encryption key. Only applies to the encrypted_json format.]' \ + '--organizationid[Organization id for an organization.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_share { + +} + +function _bw_send { + local -a commands + + _arguments -C \ + '(-f --file)'{-f,--file}'[Specifies that is a filepath]' \ + '(-d --deleteInDays)'{-d,--deleteInDays}'[The number of days in the future to set deletion date, defaults to 7]' \ + '(-a --maxAccessCount)'{-a,--maxAccessCount}'[The amount of max possible accesses.]' \ + '--hidden[Hide in web by default. Valid only if --file is not set.]' \ + '(-n --name)'{-n,--name}'[The name of the Send. Defaults to a guid for text Sends and the filename for files.]' \ + '--notes[Notes to add to the Send.]' \ + '--fullObject[Specifies that the full Send object should be returned rather than just the access url.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "list:List all the Sends owned by you" + "template:Get json templates for send objects" + "get:Get Sends owned by you." + "receive:Access a Bitwarden Send from a url" + "create:create a Send" + "edit:edit a Send" + "remove-password:removes the saved password from a Send." + "delete:delete a Send" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + list) + _bw_send_list + ;; + template) + _bw_send_template + ;; + get) + _bw_send_get + ;; + receive) + _bw_send_receive + ;; + create) + _bw_send_create + ;; + edit) + _bw_send_edit + ;; + remove-password) + _bw_send_remove-password + ;; + delete) + _bw_send_delete + ;; + esac +} + +function _bw_send_list { + +} + +function _bw_send_template { + +} + +function _bw_send_get { + _arguments -C \ + '--output[Output directory or filename for attachment.]' \ + '--text[Specifies to return the text content of a Send]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_send_receive { + _arguments -C \ + '--password[Password needed to access the Send.]' \ + '--passwordenv[Environment variable storing the Send'"'"'s password]' \ + '--passwordfile[Path to a file containing the Sends password as its first line]' \ + '--obj[Return the Send'"'"'s json object rather than the Send's content]' \ + '--output[Specify a file path to save a File-type Send to]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_send_create { + _arguments -C \ + '--file[file to Send. Can also be specified in parent'"'"'s JSON.]' \ + '--text[text to Send. Can also be specified in parent'"'"'s JSON.]' \ + '--hidden[text hidden flag. Valid only with the --text option.]' \ + '--password[optional password to access this Send. Can also be specified in JSON]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_send_edit { + _arguments -C \ + '--itemid[Overrides the itemId provided in [encodedJson]]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_send_remove-password { + +} + +function _bw_send_delete { + +} + +function _bw_receive { + _arguments -C \ + '--password[Password needed to access the Send.]' \ + '--passwordenv[Environment variable storing the Send'"'"'s password]' \ + '--passwordfile[Path to a file containing the Sends password as its first line]' \ + '--obj[Return the Send'"'"'s json object rather than the Send's content]' \ + '--output[Specify a file path to save a File-type Send to]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_device-approval { + local -a commands + + case $state in + cmnds) + commands=( + "list:List all pending requests for an organization" + "approve:Approve a pending request" + "approve-all:Approve all pending requests for an organization" + "deny:Deny a pending request" + "deny-all:Deny all pending requests for an organization" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + list) + _bw_device-approval_list + ;; + approve) + _bw_device-approval_approve + ;; + approve-all) + _bw_device-approval_approve-all + ;; + deny) + _bw_device-approval_deny + ;; + deny-all) + _bw_device-approval_deny-all + ;; + esac +} + +function _bw_device-approval_list { + _arguments -C \ + '--organizationid[The organization id (required)]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_device-approval_approve { + _arguments -C \ + '--organizationid[The organization id (required)]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_device-approval_approve-all { + _arguments -C \ + '--organizationid[The organization id (required)]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_device-approval_deny { + _arguments -C \ + '--organizationid[The organization id (required)]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_device-approval_deny-all { + _arguments -C \ + '--organizationid[The organization id (required)]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} + +function _bw_serve { + _arguments -C \ + '--hostname[The hostname to bind your API webserver to.]' \ + '--port[The port to run your API webserver on.]' \ + '--disable-origin-protection[If set, allows requests with origin header. Warning, this option exists for backwards compatibility reasons and exposes your environment to known CSRF attacks.]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + "*::arg:->args" +} \ No newline at end of file