generated from pavel.muhortov/template-bash
	improved execution logic
This commit is contained in:
		
							parent
							
								
									f5800dcc7e
								
							
						
					
					
						commit
						4e6d369329
					
				| 
						 | 
					@ -44,7 +44,7 @@ addtologs() {
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
execquite() {
 | 
					execquite() {
 | 
				
			||||||
  addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
 | 
					  addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
 | 
				
			||||||
  exit
 | 
					  exit "${1}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ execquite() {
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
execerror() {
 | 
					execerror() {
 | 
				
			||||||
  addtologs "error: $1"
 | 
					  addtologs "error: $1"
 | 
				
			||||||
  execquite
 | 
					  execquite 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -115,8 +115,14 @@ checkroot() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
createuser() {
 | 
					createuser() {
 | 
				
			||||||
 | 
					  if ! id -u "${clientname}" >/dev/null 2>&1; then
 | 
				
			||||||
    useradd "${clientname}" --shell /sbin/nologin
 | 
					    useradd "${clientname}" --shell /sbin/nologin
 | 
				
			||||||
 | 
					    addtologs "created Linux user '${clientname}'"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} Linux user exists, create skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  printf "%s\n" "${clientname}:${clientpass}" | chpasswd
 | 
					  printf "%s\n" "${clientname}:${clientpass}" | chpasswd
 | 
				
			||||||
 | 
					  addtologs "changed '${clientname}' user password"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -133,11 +139,18 @@ createuser() {
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
# shellcheck disable=SC2016
 | 
					# shellcheck disable=SC2016
 | 
				
			||||||
createcert() {
 | 
					createcert() {
 | 
				
			||||||
 | 
					  if ! grep -w "${clientname}" ${easyrsaidx} | grep "^V" > /dev/null 2>&1; then
 | 
				
			||||||
 | 
					    (
 | 
				
			||||||
      cd "${easyrsadir}" || execerror ""
 | 
					      cd "${easyrsadir}" || execerror ""
 | 
				
			||||||
      sed -i -e '$aset_var EASYRSA_REQ_CN         '"${clientname}"'' "${easyrsavar}"
 | 
					      sed -i -e '$aset_var EASYRSA_REQ_CN         '"${clientname}"'' "${easyrsavar}"
 | 
				
			||||||
      # ${easyrsaexe} --passout=pass:"${clientpass}" --passin=pass:${easyrsacap} build-client-full "${clientname}"
 | 
					      # ${easyrsaexe} --passout=pass:"${clientpass}" --passin=pass:${easyrsacap} build-client-full "${clientname}"
 | 
				
			||||||
      ${easyrsaexe} --passin=pass:"${easyrsacap}" build-client-full "${clientname}" nopass
 | 
					      ${easyrsaexe} --passin=pass:"${easyrsacap}" build-client-full "${clientname}" nopass
 | 
				
			||||||
      sed -i '/EASYRSA_REQ_CN/d' "${easyrsavar}"
 | 
					      sed -i '/EASYRSA_REQ_CN/d' "${easyrsavar}"
 | 
				
			||||||
 | 
					    ) > /dev/null 2>&1
 | 
				
			||||||
 | 
					    addtologs "created ${clientname} easyrsa certificate"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} certificate exists, create skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -159,6 +172,7 @@ createovpn() {
 | 
				
			||||||
    printf "%s\n" "<key>" "$(cat "${easyrsadir}/pki/private/${clientname}.key")" "</key>"
 | 
					    printf "%s\n" "<key>" "$(cat "${easyrsadir}/pki/private/${clientname}.key")" "</key>"
 | 
				
			||||||
    printf "%s\n" "<tls-auth>" "$(cat "${easyrsadir}/pki/private/ta.key")" "</tls-auth>"
 | 
					    printf "%s\n" "<tls-auth>" "$(cat "${easyrsadir}/pki/private/ta.key")" "</tls-auth>"
 | 
				
			||||||
  } >> "${ovpncfgdir}/${clientname}.ovpn"
 | 
					  } >> "${ovpncfgdir}/${clientname}.ovpn"
 | 
				
			||||||
 | 
					  addtologs "created ${clientname} ovpn config file"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -179,6 +193,7 @@ createtars() {
 | 
				
			||||||
  } >> "${ovpncfgdir}/vpn.txt"
 | 
					  } >> "${ovpncfgdir}/vpn.txt"
 | 
				
			||||||
  cd "${ovpncfgdir}" || execerror ""
 | 
					  cd "${ovpncfgdir}" || execerror ""
 | 
				
			||||||
  tar cf "${clientname}.tar" --remove-files vpn.cnf vpn.txt
 | 
					  tar cf "${clientname}.tar" --remove-files vpn.cnf vpn.txt
 | 
				
			||||||
 | 
					  addtologs "created ${clientname} tar with config file"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -194,7 +209,6 @@ createtars() {
 | 
				
			||||||
createinfo() {
 | 
					createinfo() {
 | 
				
			||||||
  cd "${easyrsadir}" || execerror ""
 | 
					  cd "${easyrsadir}" || execerror ""
 | 
				
			||||||
  validuntil=$(${easyrsaexe} show-cert "${clientname}" | grep "Not After" | cut -d: -f2-)
 | 
					  validuntil=$(${easyrsaexe} show-cert "${clientname}" | grep "Not After" | cut -d: -f2-)
 | 
				
			||||||
 | 
					 | 
				
			||||||
  faqprofile=$(printf "%s\n" \
 | 
					  faqprofile=$(printf "%s\n" \
 | 
				
			||||||
    "OpenVPN Connect client:" \
 | 
					    "OpenVPN Connect client:" \
 | 
				
			||||||
    "https://openvpn.net/client/" \
 | 
					    "https://openvpn.net/client/" \
 | 
				
			||||||
| 
						 | 
					@ -207,8 +221,8 @@ createinfo() {
 | 
				
			||||||
    "User Password: \`${clientpass}\`" \
 | 
					    "User Password: \`${clientpass}\`" \
 | 
				
			||||||
    "Time Expired: ${validuntil}"
 | 
					    "Time Expired: ${validuntil}"
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
 | 
					 | 
				
			||||||
  printf "%s\n" "${faqprofile}" > "${ovpncfgdir}/${clientname}.info"
 | 
					  printf "%s\n" "${faqprofile}" > "${ovpncfgdir}/${clientname}.info"
 | 
				
			||||||
 | 
					  addtologs "created ${clientname} info file"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -237,9 +251,8 @@ startsendmail() {
 | 
				
			||||||
    --stls "True" \
 | 
					    --stls "True" \
 | 
				
			||||||
    --subj "${subj}" \
 | 
					    --subj "${subj}" \
 | 
				
			||||||
    --text "$(printf "%s\n" "${faqprofile}" | sed 's|`||g')" \
 | 
					    --text "$(printf "%s\n" "${faqprofile}" | sed 's|`||g')" \
 | 
				
			||||||
    --file "${ovpncfgdir}/${clientname}.ovpn,${ovpncfgdir}/${clientname}.tar" \
 | 
					    --file "${ovpncfgdir}/${clientname}.ovpn,${ovpncfgdir}/${clientname}.tar"
 | 
				
			||||||
    >> /dev/null 2>&1 &
 | 
					  ) > /dev/null 2>&1
 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
  addtologs "sent mail with subject '${subj}' to ${dest}"
 | 
					  addtologs "sent mail with subject '${subj}' to ${dest}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -268,12 +281,11 @@ startsendtlgm() {
 | 
				
			||||||
      API_URL="${API_URL}&message_thread_id=${THRD_ID}"
 | 
					      API_URL="${API_URL}&message_thread_id=${THRD_ID}"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    curl -s -o /dev/null \
 | 
					    curl "${API_URL}" \
 | 
				
			||||||
         -F "media=[{\"type\": \"document\", \"media\": \"attach://ovpn\", \"caption\": \"${faqprofile}\", \"parse_mode\": \"Markdown\"}, {\"type\": \"document\", \"media\": \"attach://tars\" }]" \
 | 
					         -F "media=[{\"type\": \"document\", \"media\": \"attach://ovpn\", \"caption\": \"${faqprofile}\", \"parse_mode\": \"Markdown\"}, {\"type\": \"document\", \"media\": \"attach://tars\" }]" \
 | 
				
			||||||
         -F "ovpn=@${ovpncfgdir}/${clientname}.ovpn" \
 | 
					         -F "ovpn=@${ovpncfgdir}/${clientname}.ovpn" \
 | 
				
			||||||
         -F "tars=@${ovpncfgdir}/${clientname}.tar" \
 | 
					         -F "tars=@${ovpncfgdir}/${clientname}.tar"
 | 
				
			||||||
        "${API_URL}"
 | 
					  ) > /dev/null 2>&1
 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
  addtologs "sent telegram media with ${clientname}.ovpn client profile to ${CHAT_ID}"
 | 
					  addtologs "sent telegram media with ${clientname}.ovpn client profile to ${CHAT_ID}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -285,7 +297,14 @@ startsendtlgm() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
deleteuser() {
 | 
					deleteuser() {
 | 
				
			||||||
 | 
					  if id -u "${clientname}" > /dev/null 2>&1; then
 | 
				
			||||||
 | 
					    (
 | 
				
			||||||
      userdel -f -r "${clientname}"
 | 
					      userdel -f -r "${clientname}"
 | 
				
			||||||
 | 
					    ) > /dev/null 2>&1
 | 
				
			||||||
 | 
					    addtologs "deleted Linux user '${clientname}'"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} Linux user does not exist, delete skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -300,9 +319,16 @@ deleteuser() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
deletecert() {
 | 
					deletecert() {
 | 
				
			||||||
 | 
					  if grep -w "${clientname}" ${easyrsaidx} > /dev/null 2>&1; then
 | 
				
			||||||
 | 
					    (
 | 
				
			||||||
      cd "${easyrsadir}" || execerror
 | 
					      cd "${easyrsadir}" || execerror
 | 
				
			||||||
      ${easyrsaexe} --batch --passin=pass:"${easyrsacap}" revoke "${clientname}"
 | 
					      ${easyrsaexe} --batch --passin=pass:"${easyrsacap}" revoke "${clientname}"
 | 
				
			||||||
      ${easyrsaexe} --batch --passin=pass:"${easyrsacap}" gen-crl
 | 
					      ${easyrsaexe} --batch --passin=pass:"${easyrsacap}" gen-crl
 | 
				
			||||||
 | 
					    ) > /dev/null 2>&1
 | 
				
			||||||
 | 
					    addtologs "revoked ${clientname} easyrsa certificate"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} certificate does not exist, revoke skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -314,7 +340,12 @@ deletecert() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
deleteovpn() {
 | 
					deleteovpn() {
 | 
				
			||||||
 | 
					  if [ -e "${ovpncfgdir}/${clientname}.ovpn" ]; then
 | 
				
			||||||
    rm -f "${ovpncfgdir}/${clientname}.ovpn"
 | 
					    rm -f "${ovpncfgdir}/${clientname}.ovpn"
 | 
				
			||||||
 | 
					    addtologs "deleted ${clientname} ovpn config file"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} ovpn config does not exist, delete skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -326,7 +357,12 @@ deleteovpn() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
deletetars() {
 | 
					deletetars() {
 | 
				
			||||||
 | 
					  if [ -e "${ovpncfgdir}/${clientname}.tar" ]; then
 | 
				
			||||||
    rm -f "${ovpncfgdir}/${clientname}.tar"
 | 
					    rm -f "${ovpncfgdir}/${clientname}.tar"
 | 
				
			||||||
 | 
					    addtologs "deleted ${clientname} tar with config"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} tar does not exist, delete skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
| 
						 | 
					@ -338,7 +374,12 @@ deletetars() {
 | 
				
			||||||
#   None
 | 
					#   None
 | 
				
			||||||
#######################################
 | 
					#######################################
 | 
				
			||||||
deleteinfo() {
 | 
					deleteinfo() {
 | 
				
			||||||
 | 
					  if [ -e "${ovpncfgdir}/${clientname}.info" ]; then
 | 
				
			||||||
    rm -f "${ovpncfgdir}/${clientname}.info"
 | 
					    rm -f "${ovpncfgdir}/${clientname}.info"
 | 
				
			||||||
 | 
					    addtologs "deleted ${clientname} info file"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    addtologs "${clientname} info file does not exist, delete skipped"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -373,36 +414,24 @@ if checkroot; then
 | 
				
			||||||
  if [ "${clienttodo}" == "add" ] && \
 | 
					  if [ "${clienttodo}" == "add" ] && \
 | 
				
			||||||
     [ -n "${clientname}" ] && \
 | 
					     [ -n "${clientname}" ] && \
 | 
				
			||||||
     [ "${#clientpass}" -ge 8 ]; then
 | 
					     [ "${#clientpass}" -ge 8 ]; then
 | 
				
			||||||
    if id -u "${clientname}" >/dev/null 2>&1 || \
 | 
					    createuser
 | 
				
			||||||
       grep -w "${clientname}" ${easyrsaidx} || \
 | 
					    createcert
 | 
				
			||||||
       [ -e "${ovpncfgdir}/${clientname}.ovpn" ]; then
 | 
					    createovpn
 | 
				
			||||||
      execerror "linux user or certificate or ovpn config exist, exit"
 | 
					    createtars
 | 
				
			||||||
    else
 | 
					    createinfo
 | 
				
			||||||
      createuser && addtologs "created Linux user '${clientname}'"
 | 
					 | 
				
			||||||
      createcert && addtologs "created certificate for ${clientname}"
 | 
					 | 
				
			||||||
      createovpn && addtologs "created ovpn config file for ${clientname}"
 | 
					 | 
				
			||||||
      createtars && addtologs "created tar with config file for ${clientname}"
 | 
					 | 
				
			||||||
      createinfo && addtologs "created info file for ${clientname}"
 | 
					 | 
				
			||||||
    startsendmail
 | 
					    startsendmail
 | 
				
			||||||
    startsendtlgm
 | 
					    startsendtlgm
 | 
				
			||||||
    fi
 | 
					  elif [ "${clienttodo}" == "del" ] && \
 | 
				
			||||||
  elif [ "${clienttodo}" == "del" ] && [ -n "${clientname}" ]; then
 | 
					       [ -n "${clientname}" ]; then
 | 
				
			||||||
    if id -u "${clientname}" >/dev/null 2>&1 || \
 | 
					 | 
				
			||||||
       grep -w "${clientname}" ${easyrsaidx} || \
 | 
					 | 
				
			||||||
       [ -e "${ovpncfgdir}/${clientname}.ovpn" ]; then
 | 
					 | 
				
			||||||
    deleteuser
 | 
					    deleteuser
 | 
				
			||||||
      addtologs "deleted Linux user '${clientname}'"
 | 
					    deletecert
 | 
				
			||||||
      deletecert && addtologs "deleted certificate for ${clientname}"
 | 
					    deleteovpn
 | 
				
			||||||
      deleteovpn && addtologs "deleted ovpn config file for ${clientname}"
 | 
					    deletetars
 | 
				
			||||||
      deletetars && addtologs "deleted tar with config file for ${clientname}"
 | 
					    deleteinfo
 | 
				
			||||||
      deleteinfo && addtologs "deleted info file for ${clientname}"
 | 
					 | 
				
			||||||
    if [ "${resetforce}" -eq 1 ];then
 | 
					    if [ "${resetforce}" -eq 1 ];then
 | 
				
			||||||
      addtologs "restarting openvpn@server..."
 | 
					      addtologs "restarting openvpn@server..."
 | 
				
			||||||
      systemctl restart openvpn@server
 | 
					      systemctl restart openvpn@server
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      execerror "linux user and certificate and ovpn config not exist, exit"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    printf "%s\n" "Usage example: $0 'add' 'username(surname)' 'password(not less 8 symbols)'"
 | 
					    printf "%s\n" "Usage example: $0 'add' 'username(surname)' 'password(not less 8 symbols)'"
 | 
				
			||||||
    printf "%s\n" "Usage example: $0 'add' 'username(surname)' 'password(not less 8 symbols)' 'additional client description'"
 | 
					    printf "%s\n" "Usage example: $0 'add' 'username(surname)' 'password(not less 8 symbols)' 'additional client description'"
 | 
				
			||||||
| 
						 | 
					@ -412,4 +441,4 @@ if checkroot; then
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
  execerror "Restart this as root!"
 | 
					  execerror "Restart this as root!"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
execquite
 | 
					execquite 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user