mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 21:31:19 +08:00 
			
		
		
		
	refactor(1password): extract opswd function
				
					
				
			This commit is contained in:
		
							parent
							
								
									4dce175e0e
								
							
						
					
					
						commit
						a64d940377
					
				@ -1,46 +1,9 @@
 | 
			
		||||
if (( ${+commands[op]} )); then
 | 
			
		||||
  eval "$(op completion zsh)"
 | 
			
		||||
  compdef _op op
 | 
			
		||||
fi
 | 
			
		||||
# Do nothing if op is not installed
 | 
			
		||||
(( ${+commands[op]} )) || return
 | 
			
		||||
 | 
			
		||||
# opswd puts the password of the named service into the clipboard. If there's a
 | 
			
		||||
# one time password, it will be copied into the clipboard after 10 seconds. The
 | 
			
		||||
# clipboard is cleared after another 20 seconds.
 | 
			
		||||
function opswd() {
 | 
			
		||||
  if [[ $# -lt 1 ]]; then
 | 
			
		||||
    echo "Usage: opswd <service>"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
# Load op completion
 | 
			
		||||
eval "$(op completion zsh)"
 | 
			
		||||
compdef _op op
 | 
			
		||||
 | 
			
		||||
  local service=$1
 | 
			
		||||
 | 
			
		||||
  # If not logged in, print error and return
 | 
			
		||||
  op list users > /dev/null || return
 | 
			
		||||
 | 
			
		||||
  local password
 | 
			
		||||
  # Copy the password to the clipboard
 | 
			
		||||
  if ! password=$(op get item "$service" --fields password 2>/dev/null); then
 | 
			
		||||
    echo "error: could not obtain password for $service"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo -n "$password" | clipcopy
 | 
			
		||||
  echo "✔ password for $service copied to clipboard"
 | 
			
		||||
 | 
			
		||||
  # If there's a one time password, copy it to the clipboard after 5 seconds
 | 
			
		||||
  local totp
 | 
			
		||||
  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
 | 
			
		||||
    sleep 10 && echo -n "$totp" | clipcopy
 | 
			
		||||
    echo "✔ TOTP for $service copied to clipboard"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _opswd() {
 | 
			
		||||
  local -a services
 | 
			
		||||
  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
 | 
			
		||||
  [[ -z "$services" ]] || compadd -a -- services
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
compdef _opswd opswd
 | 
			
		||||
# Load opswd function
 | 
			
		||||
autoload -Uz opswd
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								plugins/1password/_opswd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								plugins/1password/_opswd
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
#compdef opswd
 | 
			
		||||
 | 
			
		||||
function _opswd() {
 | 
			
		||||
  local -a services
 | 
			
		||||
  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
 | 
			
		||||
  [[ -z "$services" ]] || compadd -a -- services
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_opswd "$@"
 | 
			
		||||
							
								
								
									
										37
									
								
								plugins/1password/opswd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								plugins/1password/opswd
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
#autoload
 | 
			
		||||
 | 
			
		||||
# opswd puts the password of the named service into the clipboard. If there's a
 | 
			
		||||
# one time password, it will be copied into the clipboard after 10 seconds. The
 | 
			
		||||
# clipboard is cleared after another 20 seconds.
 | 
			
		||||
function opswd() {
 | 
			
		||||
  if [[ $# -lt 1 ]]; then
 | 
			
		||||
    echo "Usage: opswd <service>"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  local service=$1
 | 
			
		||||
 | 
			
		||||
  # If not logged in, print error and return
 | 
			
		||||
  op list users > /dev/null || return
 | 
			
		||||
 | 
			
		||||
  local password
 | 
			
		||||
  # Copy the password to the clipboard
 | 
			
		||||
  if ! password=$(op get item "$service" --fields password 2>/dev/null); then
 | 
			
		||||
    echo "error: could not obtain password for $service"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo -n "$password" | clipcopy
 | 
			
		||||
  echo "✔ password for $service copied to clipboard"
 | 
			
		||||
 | 
			
		||||
  # If there's a one time password, copy it to the clipboard after 5 seconds
 | 
			
		||||
  local totp
 | 
			
		||||
  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
 | 
			
		||||
    sleep 10 && echo -n "$totp" | clipcopy
 | 
			
		||||
    echo "✔ TOTP for $service copied to clipboard"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opswd "$@"
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user