506 lines
14 KiB
Text
506 lines
14 KiB
Text
|
#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 <data> 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 <data> 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"
|
||
|
}
|