summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGheritarish <ilissiae@gmail.com>2022-11-07 19:53:36 +0100
committerGitHub <noreply@github.com>2022-11-07 19:53:36 +0100
commit6df14641ac48b380c56e1c72aa86b57861fbfb70 (patch)
tree09ee6c3e60a2bca323d323e7056f8bd5201e1b37
parent0145d744a9c4c11f00992f7f3ad9555bc8ac6177 (diff)
downloadzsh-6df14641ac48b380c56e1c72aa86b57861fbfb70.tar.gz
zsh-6df14641ac48b380c56e1c72aa86b57861fbfb70.tar.bz2
zsh-6df14641ac48b380c56e1c72aa86b57861fbfb70.zip
feat(1password): add username copy to `opswd` (#10812)
-rw-r--r--plugins/1password/README.md16
-rw-r--r--plugins/1password/opswd18
2 files changed, 24 insertions, 10 deletions
diff --git a/plugins/1password/README.md b/plugins/1password/README.md
index f6854da53..ace6da8e1 100644
--- a/plugins/1password/README.md
+++ b/plugins/1password/README.md
@@ -14,16 +14,18 @@ clipboard.
## `opswd`
The `opswd` command is a wrapper around the `op` command. It takes a service
-name as an argument and copies the password for that service to the clipboard.
+name as an argument and copies the username, then the password for that service
+to the clipboard, after confirmation on the user part.
-If the service also contains a TOTP, it is copied to the clipboard after 10 seconds.
-Finally, after 20 seconds, the clipboard is cleared.
+If the service also contains a TOTP, it is copied to the clipboard after confirmation
+on the user part. Finally, after 20 seconds, the clipboard is cleared.
-The function has completion support, so you can use tab completion to select
-which service you want to get.
+For example, `opswd github.com` will put your GitHub username into your clipboard. Then,
+it will ask for confirmation to continue, and copy the password to your clipboard. Finally,
+if a TOTP is available, it will be copied to the clipboard after your confirmation.
-For example, `opswd github.com` will put your GitHub password into your clipboard, and if
-a TOTP is available, it will be copied to the clipboard after 10 seconds.
+This function has completion support, so you can use tab completion to select which
+service you want to get.
> NOTE: you need to be signed in for `opswd` to work. If you are using biometric unlock,
> 1Password CLI will automatically prompt you to sign in. See:
diff --git a/plugins/1password/opswd b/plugins/1password/opswd
index 57672807e..0f667d2ff 100644
--- a/plugins/1password/opswd
+++ b/plugins/1password/opswd
@@ -14,6 +14,17 @@ function opswd() {
# If not logged in, print error and return
op user list > /dev/null || return
+ local username
+ # Copy the username to the clipboard
+ if ! username=$(op item get "$service" --fields username 2>/dev/null); then
+ echo "error: could not obtain username for $service"
+ return 1
+ fi
+
+ echo -n "$username" | clipcopy
+ echo "✔ username for service $service copied to the clipboard. Press Enter to continue"
+ read
+
local password
# Copy the password to the clipboard
if ! password=$(op item get "$service" --fields password 2>/dev/null); then
@@ -22,12 +33,13 @@ function opswd() {
fi
echo -n "$password" | clipcopy
- echo "✔ password for $service copied to clipboard"
+ echo "✔ password for $service copied to clipboard. Press Enter to continue"
+ read
- # If there's a one time password, copy it to the clipboard after 10 seconds
+ # If there's a one time password, copy it to the clipboard
local totp
if totp=$(op item get --otp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
- sleep 10 && echo -n "$totp" | clipcopy
+ echo -n "$totp" | clipcopy
echo "✔ TOTP for $service copied to clipboard"
fi