Browse Source

Add deploy hook for ZNC

pull/965/head
Alexandre Oliveira 7 years ago
parent
commit
863d6ac507
  1. 151
      deploy/znc.sh

151
deploy/znc.sh

@ -0,0 +1,151 @@
#!/usr/bin/env sh
# Deploy Let's Encrypt certs to ZNC
#
# Any non-zero returns means something wrong has occurred
#
# If you want to use a custom directory and/or user and group owners, you may set the following variables:
#
# $ZNC_DIR_OWNERSHIP - user and group owners for a directory (e.g. export ZNC_DIR_OWNERSHIP="user:group")
# $ZNC_DIR - ZNC config directory (e.g. export ZNC_DIR="/home/znc/.znc"), more info (check Misc):
# https://wiki.znc.in/Configuration#File_locations
_ZNC_DIR="/var/lib/znc/.znc"
_ZNC_DIR_OWNERSHIP="znc:znc"
######## Public functions #####################
#domain keyfile certfile cafile fullchain
znc_deploy() {
_cdomain="$1"
_ckey="$2"
_ccert="$3"
_cca="$4"
# shellcheck disable=SC2034
_cfullchain="$5"
# Workaround for SC2153. Check if ZNC_DIR_OWNERSHIP is set to zero,
# then fallback to _ZNC_DIR_OWNERSHIP.
if [ -z "$ZNC_DIR_OWNERSHIP" ]; then
ZNC_DIR_OWNERSHIP="$_ZNC_DIR_OWNERSHIP"
fi
# Allow users to override the default ownership for the ZNC config directory
if [ -n "$ZNC_DIR_OWNERSHIP" ]; then
_ZNC_DIR_OWNERSHIP="$ZNC_DIR_OWNERSHIP"
_info "ZNC config directory ownership set to: $_ZNC_DIR_OWNERSHIP"
fi
# Retrieve the owner user from a "user:group" string
# shellcheck disable=SC2034
_ZNC_USER="$(_getfield "$_ZNC_DIR_OWNERSHIP" 1 ":")"
if [ $? != 0 ] || [ -z "$_ZNC_USER" ]; then
_err "Error trying to parse user from ownership string."
return $?
fi
# Retrieve the directory owner group from a "user:group" string
# shellcheck disable=SC2034
_ZNC_GROUP="$(_getfield "$_ZNC_DIR_OWNERSHIP" 2 ":")"
if [ $? != 0 ] || [ -z "$_ZNC_GROUP" ]; then
_err "Error trying to parse group from ownership string."
return $?
fi
# Workaround for SC2153. Check if ZNC_DIR is set to zero,
# then fallback to _ZNC_DIR.
if [ -z "$ZNC_DIR" ]; then
ZNC_DIR="$_ZNC_DIR"
fi
# Allow users to override the default ZNC config directory
if [ -n "$ZNC_DIR" ]; then
_ZNC_DIR="$ZNC_DIR"
_info "ZNC config path set to: $_ZNC_DIR"
fi
# Check if the current user is not root before proceeding.
_curr_user="$(id -u)"
if [ "$_curr_user" != "0" ]; then
# Check if acme.sh is running as the owner of the ZNC config directory
# This is required to not use chown and change the certificates permissions
_curr_user="$(id -u -n)"
if [ "$_curr_user" != "$_ZNC_USER" ]; then
_err "acme.sh must be run by the ZNC user."
_err "Please run acme.sh as '$_ZNC_USER'."
return 1
fi
# Check if the current user is a member of the owner group of the config directory
# This is required to not use chown and change the certificates permissions
# shellcheck disable=SC2034
if ! id -Gn "$_curr_user" | grep -cw "$_ZNC_GROUP"; then
_err "The current user is not a member of the '$_ZNC_GROUP' group."
return 2
fi
# Check if we can get the owners of the specified config directory
_dir_ownership="$(_stat "$_ZNC_DIR")"
if [ $? != 0 ]; then
_err "Error getting ownership of $_ZNC_DIR"
return 3
fi
# Check if the specified config directory is owned by the specified user and the specified group
if [ "$_dir_ownership" != "$_ZNC_DIR_OWNERSHIP" ]; then
_err "The specified ZNC config directory isn't owned by user '$_ZNC_USER' and group '$_ZNC_GROUP'."
_err "Please specify the correct directory or correct directory ownership."
return 4
fi
fi
# Save ZNC user and config directory to domain.conf
_savedomainconf ZNC_DIR "$_ZNC_DIR"
_savedomainconf ZNC_DIR_OWNERSHIP "$_ZNC_DIR_OWNERSHIP"
# ZNC certificate file location
_znc_cert="$_ZNC_DIR/znc.pem"
# Please read https://wiki.znc.in/Signed_SSL_certificate
_info "Generating ZNC certificate file for $_cdomain"
cat "$_ckey" >"$_znc_cert"
if [ $? != 0 ]; then
_err "Error generating ZNC certificate file (private key error)."
return 5
fi
cat "$_ccert" >>"$_znc_cert"
if [ $? != 0 ]; then
_err "Error generating ZNC certificate file (certificate error)."
return 6
fi
cat "$_cca" >>"$_znc_cert"
if [ $? != 0 ]; then
_err "Error generating ZNC certificate file (CA certificate error)."
return 7
fi
# If running as root, check if certificate file owner is ZNC
_cert_ownership="$(_stat "$_znc_cert")"
if [ $? != 0 ]; then
_err "Error getting ownership of: $_znc_cert"
return 8
fi
# Check if the certificate is owned by the ZNC user and group.
# If not, fix it.
if [ "$_cert_ownership" != "$_ZNC_DIR_OWNERSHIP" ]; then
chown $_ZNC_DIR_OWNERSHIP $_znc_cert
if [ $? != 0 ]; then
_err "Error changing ownership of: $_znc_cert"
return 9
fi
_info "Changed ownership of '$_znc_cert' to '$_ZNC_DIR_OWNERSHIP'"
fi
_info "Successfully generated ZNC certificate file at: $_znc_cert"
return 0
}
Loading…
Cancel
Save