|  | @@ -10,46 +10,89 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #domain keyfile certfile cafile fullchain
 | 
	
		
			
				|  |  |  strongswan_deploy() {
 | 
	
		
			
				|  |  | -  _cdomain="$1"
 | 
	
		
			
				|  |  | -  _ckey="$2"
 | 
	
		
			
				|  |  | -  _ccert="$3"
 | 
	
		
			
				|  |  | -  _cca="$4"
 | 
	
		
			
				|  |  | -  _cfullchain="$5"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  _cdomain="${1}"
 | 
	
		
			
				|  |  | +  _ckey="${2}"
 | 
	
		
			
				|  |  | +  _ccert="${3}"
 | 
	
		
			
				|  |  | +  _cca="${4}"
 | 
	
		
			
				|  |  | +  _cfullchain="${5}"
 | 
	
		
			
				|  |  |    _info "Using strongswan"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  if [ -x /usr/sbin/ipsec ]; then
 | 
	
		
			
				|  |  | -    _ipsec=/usr/sbin/ipsec
 | 
	
		
			
				|  |  | -  elif [ -x /usr/sbin/strongswan ]; then
 | 
	
		
			
				|  |  | -    _ipsec=/usr/sbin/strongswan
 | 
	
		
			
				|  |  | -  elif [ -x /usr/local/sbin/ipsec ]; then
 | 
	
		
			
				|  |  | -    _ipsec=/usr/local/sbin/ipsec
 | 
	
		
			
				|  |  | -  else
 | 
	
		
			
				|  |  | +  if _exists ipsec; then
 | 
	
		
			
				|  |  | +    _ipsec=ipsec
 | 
	
		
			
				|  |  | +  elif _exists strongswan; then
 | 
	
		
			
				|  |  | +    _ipsec=strongswan
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  if _exists swanctl; then
 | 
	
		
			
				|  |  | +    _swanctl=swanctl
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  # For legacy stroke mode
 | 
	
		
			
				|  |  | +  if [ -n "${_ipsec}" ]; then
 | 
	
		
			
				|  |  | +    _info "${_ipsec} command detected"
 | 
	
		
			
				|  |  | +    _confdir=$(${_ipsec} --confdir)
 | 
	
		
			
				|  |  | +    if [ -z "${_confdir}" ]; then
 | 
	
		
			
				|  |  | +      _err "no strongswan --confdir is detected"
 | 
	
		
			
				|  |  | +      return 1
 | 
	
		
			
				|  |  | +    fi
 | 
	
		
			
				|  |  | +    _info _confdir "${_confdir}"
 | 
	
		
			
				|  |  | +    __deploy_cert "$@" "stroke" "${_confdir}"
 | 
	
		
			
				|  |  | +    ${_ipsec} reload
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  # For modern vici mode
 | 
	
		
			
				|  |  | +  if [ -n "${_swanctl}" ]; then
 | 
	
		
			
				|  |  | +    _info "${_swanctl} command detected"
 | 
	
		
			
				|  |  | +    for _dir in /usr/local/etc/swanctl /etc/swanctl /etc/strongswan/swanctl; do
 | 
	
		
			
				|  |  | +      if [ -d ${_dir} ]; then
 | 
	
		
			
				|  |  | +        _confdir=${_dir}
 | 
	
		
			
				|  |  | +        _info _confdir "${_confdir}"
 | 
	
		
			
				|  |  | +        break
 | 
	
		
			
				|  |  | +      fi
 | 
	
		
			
				|  |  | +    done
 | 
	
		
			
				|  |  | +    if [ -z "${_confdir}" ]; then
 | 
	
		
			
				|  |  | +      _err "no swanctl config dir is found"
 | 
	
		
			
				|  |  | +      return 1
 | 
	
		
			
				|  |  | +    fi
 | 
	
		
			
				|  |  | +    __deploy_cert "$@" "vici" "${_confdir}"
 | 
	
		
			
				|  |  | +    ${_swanctl} --load-creds
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  if [ -z "${_swanctl}" ] && [ -z "${_ipsec}" ]; then
 | 
	
		
			
				|  |  |      _err "no strongswan or ipsec command is detected"
 | 
	
		
			
				|  |  | +    _err "no swanctl is detected"
 | 
	
		
			
				|  |  |      return 1
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  _info _ipsec "$_ipsec"
 | 
	
		
			
				|  |  | +####################  Private functions below ##################################
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  _confdir=$($_ipsec --confdir)
 | 
	
		
			
				|  |  | -  if [ $? -ne 0 ] || [ -z "$_confdir" ]; then
 | 
	
		
			
				|  |  | -    _err "no strongswan --confdir is detected"
 | 
	
		
			
				|  |  | +__deploy_cert() {
 | 
	
		
			
				|  |  | +  _cdomain="${1}"
 | 
	
		
			
				|  |  | +  _ckey="${2}"
 | 
	
		
			
				|  |  | +  _ccert="${3}"
 | 
	
		
			
				|  |  | +  _cca="${4}"
 | 
	
		
			
				|  |  | +  _cfullchain="${5}"
 | 
	
		
			
				|  |  | +  _swan_mode="${6}"
 | 
	
		
			
				|  |  | +  _confdir="${7}"
 | 
	
		
			
				|  |  | +  _debug _cdomain "${_cdomain}"
 | 
	
		
			
				|  |  | +  _debug _ckey "${_ckey}"
 | 
	
		
			
				|  |  | +  _debug _ccert "${_ccert}"
 | 
	
		
			
				|  |  | +  _debug _cca "${_cca}"
 | 
	
		
			
				|  |  | +  _debug _cfullchain "${_cfullchain}"
 | 
	
		
			
				|  |  | +  _debug _swan_mode "${_swan_mode}"
 | 
	
		
			
				|  |  | +  _debug _confdir "${_confdir}"
 | 
	
		
			
				|  |  | +  if [ "${_swan_mode}" = "vici" ]; then
 | 
	
		
			
				|  |  | +    _dir_private="private"
 | 
	
		
			
				|  |  | +    _dir_cert="x509"
 | 
	
		
			
				|  |  | +    _dir_ca="x509ca"
 | 
	
		
			
				|  |  | +  elif [ "${_swan_mode}" = "stroke" ]; then
 | 
	
		
			
				|  |  | +    _dir_private="ipsec.d/private"
 | 
	
		
			
				|  |  | +    _dir_cert="ipsec.d/certs"
 | 
	
		
			
				|  |  | +    _dir_ca="ipsec.d/cacerts"
 | 
	
		
			
				|  |  | +  else
 | 
	
		
			
				|  |  | +    _err "unknown StrongSwan mode ${_swan_mode}"
 | 
	
		
			
				|  |  |      return 1
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  _info _confdir "$_confdir"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  _debug _cdomain "$_cdomain"
 | 
	
		
			
				|  |  | -  _debug _ckey "$_ckey"
 | 
	
		
			
				|  |  | -  _debug _ccert "$_ccert"
 | 
	
		
			
				|  |  | -  _debug _cca "$_cca"
 | 
	
		
			
				|  |  | -  _debug _cfullchain "$_cfullchain"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  cat "$_ckey" >"${_confdir}/ipsec.d/private/$(basename "$_ckey")"
 | 
	
		
			
				|  |  | -  cat "$_ccert" >"${_confdir}/ipsec.d/certs/$(basename "$_ccert")"
 | 
	
		
			
				|  |  | -  cat "$_cca" >"${_confdir}/ipsec.d/cacerts/$(basename "$_cca")"
 | 
	
		
			
				|  |  | -  cat "$_cfullchain" >"${_confdir}/ipsec.d/cacerts/$(basename "$_cfullchain")"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  $_ipsec reload
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  cat "${_ckey}" >"${_confdir}/${_dir_private}/$(basename "${_ckey}")"
 | 
	
		
			
				|  |  | +  cat "${_ccert}" >"${_confdir}/${_dir_cert}/$(basename "${_ccert}")"
 | 
	
		
			
				|  |  | +  cat "${_cca}" >"${_confdir}/${_dir_ca}/$(basename "${_cca}")"
 | 
	
		
			
				|  |  | +  if [ "${_swan_mode}" = "stroke" ]; then
 | 
	
		
			
				|  |  | +    cat "${_cfullchain}" >"${_confdir}/${_dir_ca}/$(basename "${_cfullchain}")"
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  |  }
 |