#!/bin/bash
# net/tool/apache - Apache Deployment Support
set -e
######
# Native Dependencies
net_tool_apache_client_packages=( )
net_tool_apache_server_packages=( apache2 )
######
# Library Configuration
# net_tool_apache_config_init() - Defines, documents, and initializes
# library settings.
net_tool_apache_config_init() {
	script_setting_vars www_confdir main_conf tmpl tmpl_conf
}
# net_tool_apache_config_check() - Initializes remaining library settings
# and validates their values.
net_tool_apache_config_check() {
	[ -f "$main_conf" ] || warn "$main_conf: does not exist"
	[ -f "$tmpl_conf" ] || warn "$tmpl_conf: does not exist"
}
######
# Apache Configuration CLI
# apache_config_dispatch() - Dispatches apache configuration commands.
apache_config_dispatch() { lib_cmd_dispatch apache_config "$@"; }
# apache_config_usage() - Prints configuration command usage.
apache_config_usage() {
	cat <<USAGE
...
Apache2 Configuration Commands:
	view				Views the server configuration
	check				Verifies server configuration
USAGE
}
# apache_config_view() - Prints the current server configuration.
apache_config_view() { run_sudo apachectl -S; }
# apache_config_check() - Checks the current server configuration for errors.
apache_config_check() { run_sudo apachectl configtest; }
######
# Apache Server CLI
# apache_server_dispatch() - Dispatches apache server commands.
apache_server_dispatch() { lib_cmd_dispatch apache_server "$@"; }
# apache_server_usage() - Prints server management command usage.
apache_server_usage() {
	cat <<USAGE
...
Apache2 Server Commands:
	start				Starts server
	stop				Stops server
	restart				Restarts server
	reload				Reloads server configuration
USAGE
}
# apache_server_start() - Starts the apache server.
apache_server_start() { apache_server_run start; }
# apache_server_stop() - Stops the apache server.
apache_server_stop() { apache_server_run stop false; }
# apache_server_rsstart() - Restarts the apache server.
apache_server_restart() { apache_server_run restart; }
# apache_server_reload() - Reloads the apache server configuration.
apache_server_reload() { apache_server_run reload; }
apache_server_run() {
	local cmd=$1
	local check=${2:-true}
	! $check || apache_config_check
	run_sudo service apache2 "$1"
}
######
# Apache Site CLI
# apache_site_dispatch() - Dispatches apache site commands.
apache_site_dispatch() { lib_cmd_dispatch apache_site "$@"; }
# apache_site_usage() - Prints site management command usage.
apache_site_usage() {
	cat <<USAGE
...
Apache2 Site Commands:
	new <name> [<domain>]		Creates a new site
USAGE
}
# apache_site_new() - Creates a new site.
apache_site_new() {
	min_max_args 1 2 "$@"
	local site=$1
	local sdomain=${2:-$domain}
	[ "$site" ] || error "usage: $script <vhost>"
	[ "$PWD" = "$www_confdir" ] || warn "$PWD != $www_confdir"
	local site_conf
	site_conf="$www_confdir/$site.conf"
	[ ! -f "$site_conf" ] || error "$site_conf: exists"
	local vhost
	vhost="$site.$sdomain"
	host "$vhost" || error "$vhost: unable to resolve name"
	[ -f "$tmpl_conf" ] || error "$tmpl_conf: does not exist"
	# change everything but the SSL cert
	run sed \
		-e "s,$tmpl,$site,g" \
		-e "s,live/$site,live/$tmpl," \
		$tmpl_conf >$site_conf
	# include from main configuration file
	if ! $pretend && ! grep "Include $site_conf" $main_conf; then
		echo "Include $site_conf" >>$main_conf
	fi
	# create logs
	run_mkdir "../logs/$site"
	apache_config_check
	apache_server_reload
	cert="/etc/letsencrypt/live/$vhost/fullchain.pem"
	if [ ! -d "/etc/letsencrypt/live/$vhost" ]; then
		run_sudo letsencrypt -d "$vhost" || true
		[ -f "$cert" ] || \
			error "letsencrypt failed to obtain a certificate"
	else
		echo "$cert: exists"
	fi
	run sed -i -e "s,live/$tmpl,live/$site," $site_conf
	apache_server_reload
}
 
Generated on Tue Jul  4 17:00:53 PDT 2017 by mcsh d14 v0.21.0.