| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-31 05:42:43 +03:00
										 |  |  | source lib/util | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-31 02:48:21 +03:00
										 |  |  | usage() { | 
					
						
							|  |  |  | 	while read -r line; do printf '%s\n' "$line"; done <<- EOF | 
					
						
							|  |  |  | 		Usage: le [options] <-d domain> [-d domain] ... | 
					
						
							|  |  |  | 		   Options: | 
					
						
							|  |  |  | 		      -c <dir>        # Configuration directory. Default: \$HOME/.acme | 
					
						
							|  |  |  | 		      -t <sec>        # How many seconds till exipration to consider as soon. Default: 259200 (3 days) | 
					
						
							|  |  |  | 		                      # Can be specified multiple time for multi-domain certs. | 
					
						
							|  |  |  | 		      -h              # Show this message. | 
					
						
							|  |  |  | 	EOF | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | main() { | 
					
						
							|  |  |  | 	declare cfg_dir | 
					
						
							|  |  |  | 	declare -a domains le_args | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	while (( $# )); do | 
					
						
							|  |  |  | 		case $1 in | 
					
						
							|  |  |  | 			-c) | 
					
						
							|  |  |  | 				cfg_dir=$2 | 
					
						
							|  |  |  | 				shift;; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			-t) | 
					
						
							|  |  |  | 				checkend_seconds=$2 | 
					
						
							|  |  |  | 				shift;; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-31 02:48:21 +03:00
										 |  |  | 			-h) | 
					
						
							|  |  |  | 				usage | 
					
						
							|  |  |  | 				return 0;; | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			--) | 
					
						
							|  |  |  | 				shift | 
					
						
							|  |  |  | 				break;; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			*) break;; | 
					
						
							|  |  |  | 		esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		shift | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	set_default cfg_dir "$HOME/.acme" | 
					
						
							|  |  |  | 	set_default checkend_seconds 259200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	certname=$1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ! [[ "$certname" ]]; then | 
					
						
							|  |  |  | 		err "Please tell me what to do!" | 
					
						
							|  |  |  | 		return 1 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-27 13:36:04 +03:00
										 |  |  | 	if [[ -f "$cfg_dir/domains/$certname/renew.fail" ]]; then | 
					
						
							|  |  |  | 		err "Fail flag exists: $cfg_dir/domains/$certname/renew.fail, not attempting renew." | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | 	if ! openssl x509 -checkend "$checkend_seconds" < "$cfg_dir/domains/$certname/certificate.pem"; then | 
					
						
							|  |  |  | 		if ! (( "${#domains[@]}" )); then | 
					
						
							|  |  |  | 			if [[ -f "$cfg_dir/domains/$certname/renew.cfg" ]]; then | 
					
						
							|  |  |  | 				source "$cfg_dir/domains/$certname/renew.cfg" | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				domains=( "$certname" ) | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for d in "${domains[@]}"; do | 
					
						
							| 
									
										
										
										
											2018-08-31 06:01:54 +03:00
										 |  |  | 			le_args+=( "$d" ) | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | 		done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-31 06:02:37 +03:00
										 |  |  | 		le issue "${le_args[@]}" | 
					
						
							| 
									
										
										
										
											2016-05-31 02:39:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (( $? )); then | 
					
						
							| 
									
										
										
										
											2016-05-27 13:36:04 +03:00
										 |  |  | 			> "$cfg_dir/domains/$certname/renew.fail" | 
					
						
							|  |  |  | 		fi | 
					
						
							| 
									
										
										
										
											2016-05-27 13:26:08 +03:00
										 |  |  | 	fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main "$@" |