341 lines
8.2 KiB
Bash
341 lines
8.2 KiB
Bash
#!/bin/bash
|
|
# file: gsl__srv_manager
|
|
# Folder: /var/lib/gsl/scripts
|
|
# By echolib (XMPP: im@echolib.re)
|
|
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
# Manage server options
|
|
#----------------------------------------------------------------------
|
|
#======================================================================
|
|
# www|wip (ARGUMENT)
|
|
# $1: process www/wip
|
|
# $2: sync/add/remove
|
|
# $3: (file)/all
|
|
#======================================================================
|
|
srv__OPTIONS() {
|
|
case "$2" in
|
|
sync) sync__OPTIONS $1 ;;
|
|
add) true ;;
|
|
remove) true ;;
|
|
*) gsl__invalid_option "$2" "add|remove|sync"
|
|
esac
|
|
|
|
case "$3" in
|
|
*".gsl")
|
|
if__file "$3" post
|
|
gsl_post="$3"
|
|
post_only="$3"
|
|
;;
|
|
|
|
all)
|
|
echo "! You're about to $2 all $1 articles"
|
|
read -rp "- Continue (Y|*) ? " www_confirm
|
|
case "$www_confirm" in
|
|
yes|YES|Y) gsl_all="$3" ;;
|
|
*) echo "# Abandon"; exit ;;
|
|
esac
|
|
;;
|
|
|
|
"")
|
|
gsl__invalid_option "$3" "all|(file)"
|
|
;;
|
|
esac
|
|
|
|
# wip add [OPT]: A shortcut of make -F
|
|
case "$1" in
|
|
wip)
|
|
case "$2" in
|
|
add)
|
|
if [[ "$post_only" ]];then
|
|
gsl make -F "$3"
|
|
exit
|
|
|
|
elif [[ "$gsl_all" ]];then
|
|
gsl make -F
|
|
exit
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
[[ "$gsl_post" ]] || log_info_all=" ALL"
|
|
|
|
log__process_begin "Server ($1 online)${log_info_all}"
|
|
posts__loop "$1" "$2"
|
|
|
|
[[ "$1" == "www" && "$www_new" ]] \
|
|
&& create__RSS_feed \
|
|
&& stats__datas # Statoolinfos
|
|
|
|
# For logs ; set post or unset if all
|
|
[[ $log_info_all ]] && unset gsl_post
|
|
[[ $post_only ]] && gsl_post="$post_only"
|
|
|
|
log__process_end "Server ($1 online)${log_info_all}"
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# Set Post/Page file for www+wip from page type and slug
|
|
# Find server post/page file and log
|
|
#======================================================================
|
|
srv__files() {
|
|
gsl_srv_wip="$site_server/$site_ndd/wip"
|
|
gsl_srv_www="$site_server/$site_ndd/www"
|
|
|
|
case "$1" in
|
|
datas)
|
|
unset srv_uri
|
|
case "$article_Type" in
|
|
post)
|
|
gsl_srv_post_wip="$gsl_srv_wip/$article_Slug/index.html"
|
|
gsl_srv_post_www="$gsl_srv_www/$article_Slug/index.html"
|
|
gsl_slug_file="$article_Slug/index.html"
|
|
gsl_slug_dir_wip=${gsl_srv_post_wip%\/*}
|
|
gsl_slug_dir_www=${gsl_srv_post_www%\/*}
|
|
|
|
# Count sub directories
|
|
sub_uri="${article_Slug//[^\/]}"
|
|
srv_uri+=`printf '%0.s../' $(seq 0 ${#sub_uri})`
|
|
;;
|
|
|
|
page)
|
|
gsl_srv_post_wip="$gsl_srv_wip/$article_Slug.html"
|
|
gsl_srv_post_www="$gsl_srv_www/$article_Slug.html"
|
|
gsl_slug_file="$article_Slug.html"
|
|
|
|
srv_uri='./'
|
|
;;
|
|
|
|
*)
|
|
return
|
|
;;
|
|
esac
|
|
|
|
# wip file ?
|
|
if [[ -f "$gsl_srv_post_wip" ]];then
|
|
[[ "$article_Status_wip" == "$article_Status_chk" ]] \
|
|
&& wip_status="(current)" \
|
|
|| wip_status="(old)"
|
|
|
|
gsl_srv_wip_file=true
|
|
|
|
else
|
|
unset gsl_srv_wip_file
|
|
fi
|
|
|
|
# www file ?
|
|
if [[ -f "$gsl_srv_post_www" ]];then
|
|
[[ "$article_Status_www" == "$article_Status_chk" ]] \
|
|
&& www_status="(current)" \
|
|
|| www_status="(old)"
|
|
|
|
gsl_srv_www_file=true
|
|
|
|
else
|
|
unset gsl_srv_www_file
|
|
fi
|
|
;;
|
|
|
|
logs)
|
|
# WIP file
|
|
if [[ $gsl_srv_wip_file ]];then
|
|
gsl__logs_print -i -srv -wip \
|
|
"HTML $article_Type Found $wip_status" \
|
|
"$gsl_srv_post_wip"
|
|
|
|
else
|
|
gsl__logs_print -w -srv -wip \
|
|
"HTML $article_Type not created yet" \
|
|
"$gsl_srv_post_wip"
|
|
fi
|
|
|
|
# WWW file
|
|
if [[ $gsl_srv_www_file ]];then
|
|
gsl__logs_print -i -srv -www \
|
|
"HTML $article_Type Found $www_status" \
|
|
"$gsl_srv_post_www"
|
|
else
|
|
gsl__logs_print -w -srv -www \
|
|
"HTML $article_Type not created yet" \
|
|
"$gsl_srv_post_www"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
# Manage wip option (Only remove, as add is same as make)
|
|
#----------------------------------------------------------------------
|
|
#======================================================================
|
|
# wip: remove online
|
|
#======================================================================
|
|
WIP__remove() {
|
|
if [[ -f "$gsl_srv_post_wip" ]];then
|
|
rm -f "$gsl_srv_post_wip" && \
|
|
gsl__logs_print -w -srv wip \
|
|
"Article deleted ; no more preview online" \
|
|
"$gsl_srv_post_wip"
|
|
|
|
find "$gsl_srv_wip" -type d -empty -delete && \
|
|
gsl__logs_print -w -srv wip \
|
|
"Cleaned empty directories" \
|
|
"$gsl_srv_wip"
|
|
|
|
DB__set_status "wip-del"
|
|
fi
|
|
return
|
|
}
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
# Manage www options
|
|
#----------------------------------------------------------------------
|
|
#======================================================================
|
|
# www OPTIONS
|
|
# $1: add/remove
|
|
#======================================================================
|
|
WWW__OPTIONS() {
|
|
case "$1" in
|
|
add) WWW__online ;;
|
|
remove) WWW__remove ;;
|
|
esac
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# www remove online
|
|
#======================================================================
|
|
WWW__remove() {
|
|
if [[ -f "$gsl_srv_post_www" ]];then
|
|
rm -f "$gsl_srv_post_www" && \
|
|
gsl__logs_print -w -srv www \
|
|
"Article deleted ; no more online" \
|
|
"$gsl_srv_post_www"
|
|
|
|
find "$gsl_srv_www" -type d -empty -delete && \
|
|
gsl__logs_print -w -srv www \
|
|
"Cleaned empty directories" \
|
|
"$gsl_srv_www"
|
|
|
|
DB__set_status "www-del"
|
|
www_new=true
|
|
fi
|
|
return
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# www: Valid online
|
|
#======================================================================
|
|
WWW__online() {
|
|
|
|
# Add wip article to www server
|
|
WWW__add() {
|
|
[[ "$article_Type" == "post" ]] \
|
|
&& mkdir -p "$gsl_slug_dir_www"
|
|
|
|
rsync -a "$gsl_srv_post_wip" "$gsl_srv_post_www" && \
|
|
gsl__logs_print -i -srv www \
|
|
"Article validated online" \
|
|
"$gsl_srv_post_www" && \
|
|
DB__set_status "www"
|
|
www_new=true
|
|
}
|
|
|
|
if ! [[ $article_Status_chk ]];then
|
|
gsl__logs_print -e -srv www \
|
|
"Article not yet checked" \
|
|
"$PWD/$gsl_post"
|
|
return
|
|
|
|
elif (( $article_Status_chk != $article_Status_wip ));then
|
|
gsl__logs_print -e -srv www \
|
|
"Article not yet converted with make" \
|
|
"$gsl_srv_post_wip"
|
|
return
|
|
|
|
else
|
|
if [[ ! -f "$gsl_srv_post_www" ]];then
|
|
WWW__add
|
|
|
|
else
|
|
if [[ "$gsl_all" ]];then
|
|
WWW__add
|
|
|
|
elif (( $article_Status_chk != $article_Status_www ));then
|
|
WWW__add
|
|
|
|
else
|
|
gsl__logs_print -w -srv www \
|
|
"Article already online" \
|
|
"$gsl_srv_post_www"
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
# Manage sync options
|
|
#----------------------------------------------------------------------
|
|
#======================================================================
|
|
# Get arguments from COMMAND (sync)
|
|
# $2: process (wip|www|"")
|
|
#======================================================================
|
|
sync__OPTIONS() {
|
|
gsl_srv_wip="$site_server/$site_ndd/wip"
|
|
gsl_srv_www="$site_server/$site_ndd/www"
|
|
|
|
case "$1" in
|
|
""|www|wip)
|
|
! [[ "$1" ]] \
|
|
&& srv_proc="wip+www" \
|
|
|| srv_proc="$1"
|
|
|
|
log__process_begin "Sync $srv_proc"
|
|
case "$1" in
|
|
"")
|
|
sync__srv "$srv_proc" "$gsl_srv_wip"
|
|
sync__srv "$srv_proc" "$gsl_srv_www"
|
|
;;
|
|
www)
|
|
sync__srv "$srv_proc" "$gsl_srv_www"
|
|
;;
|
|
wip)
|
|
sync__srv "$srv_proc" "$gsl_srv_wip"
|
|
;;
|
|
esac
|
|
log__process_end "Sync $srv_proc"
|
|
;;
|
|
|
|
*)
|
|
gsl__invalid_option "$2" "www|wip"
|
|
;;
|
|
esac
|
|
exit
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# Sync Files from Templates to webserver
|
|
# $1: process (wip|www|wip+www)
|
|
# $2: Folder
|
|
#======================================================================
|
|
sync__srv() {
|
|
# Sync Files and Folders
|
|
mkdir -p "$2"
|
|
rsync -a --delete "$gsl_dir_domain_tpl" "$2"
|
|
rsync -a --delete "$gsl_dir_domain_files" "$2"
|
|
rsync -a --delete "$gsl_dir_domain_images" "$2"
|
|
rsync -a --delete "$gsl_dir_domain_listings" "$2"
|
|
|
|
gsl__logs_print -i -srv $1 \
|
|
"Sync: $gsl_dir_domain/" \
|
|
"$2/"
|
|
}
|