71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/sh
 | ||
| #
 | ||
| # Purpose {{{
 | ||
| # This script will :
 | ||
| #   1. If non gpg-key is in cache.
 | ||
| #     a. Run a terminal with a tmux splits (at least a split to enter gpg passphrase).
 | ||
| #     b. Wait until timeout.
 | ||
| #     c. Check every second if a key is now cached.
 | ||
| #     d. Kill dedicated terminal emulator window.
 | ||
| #   2. (When) a gpg-key is finally cached, simply call the "real" rofi-pass.
 | ||
| #
 | ||
| # 2023-01-12
 | ||
| # }}}
 | ||
| 
 | ||
| # GPG command to check cache {{{
 | ||
| # 0 : No key in cache
 | ||
| # 1 : At leaste one key in cache
 | ||
| # }}}
 | ||
| gpg_agent_info=$(gpg-connect-agent 'keyinfo --list' /bye 2>/dev/null | awk 'BEGIN{CACHED=0} /^S/ {if($7==1){CACHED=1}} END{if($0!=""){print CACHED} else {print "none"}}')
 | ||
| # Terminal emulator and window title
 | ||
| TERM_TITLE="Authentication with tmux"
 | ||
| 
 | ||
| TIMEOUT=60
 | ||
| TIME=1
 | ||
| 
 | ||
| # If gpg-agent doesn't have any key in cache
 | ||
| if [ "${gpg_agent_info}" -eq 0 ]; then
 | ||
| 	## Start a terminal emulator
 | ||
| 	## Create new tmux splits to ask for gpg passphrase
 | ||
| 	"${TERM_EMULATOR}" --title "${TERM_TITLE}" -e bash -c 'tmux source-file "${HOME}"/.tmux/splitAUTHENTICATION && tmux attach-session' &
 | ||
| 
 | ||
| 	# Minimum time to enter my passphrases
 | ||
| 	sleep 5
 | ||
| 
 | ||
| 	# Wait until TIMEOUT
 | ||
| 	while [ "${TIME}" -lt "${TIMEOUT}" ]; do
 | ||
| 		gpg_agent_info=$(gpg-connect-agent 'keyinfo --list' /bye 2>/dev/null | awk 'BEGIN{CACHED=0} /^S/ {if($7==1){CACHED=1}} END{if($0!=""){print CACHED} else {print "none"}}')
 | ||
| 
 | ||
| 		## If a gpg key is in cache {{{
 | ||
| 		if [ "${gpg_agent_info}" -eq 1 ]; then
 | ||
| 			echo "While loop − GPG in cache"
 | ||
| 			### Leave the loop
 | ||
| 			break
 | ||
| 		## }}}
 | ||
| 		## Still no key {{{
 | ||
| 		else
 | ||
| 			## Wait a second
 | ||
| 			TIME=$((TIME + 1))
 | ||
| 			sleep 1
 | ||
| 		fi
 | ||
| 		## }}}
 | ||
| 	done
 | ||
| 
 | ||
| 	### Kill any remaining window
 | ||
| 	kill $(pgrep --newest --full "${TERM_TITLE}") 2>/dev/null
 | ||
| 
 | ||
| 	## If a gpg key is finally in cache
 | ||
| 	if [ "${gpg_agent_info}" -eq 1 ]; then
 | ||
| 		# Then, call real rofi-pass
 | ||
| 		"${HOME}"/repos/rofi-pass/rofi-pass
 | ||
| 	else
 | ||
| 		exit 1
 | ||
| 	fi
 | ||
| 
 | ||
| # If gpg-agent already have a key in cache {{{
 | ||
| else
 | ||
| 	# Then, call real rofi-pass
 | ||
| 	"${HOME}"/repos/rofi-pass/rofi-pass
 | ||
| fi
 | ||
| # }}}
 |