336 lines
7.9 KiB
Bash
336 lines
7.9 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
|
|
|
|
|
|
#======================================================================
|
|
# w<< (ARGUMENT)
|
|
# $1: process
|
|
# $2: 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"
|
|
case "$1" in
|
|
wip)
|
|
gsl make "$3"
|
|
exit
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
all)
|
|
case "$1" in
|
|
www)
|
|
echo "! You're about to put online all wip articles"
|
|
read -rp "- Continue (YES|*)" www_confirm
|
|
case "www_confirm" in
|
|
YES) gsl_www="$3" ;;
|
|
*) echo "# Abandon"; exit ;;
|
|
esac
|
|
;;
|
|
|
|
wip)
|
|
gsl make
|
|
exit
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
"")
|
|
gsl__invalid_option "$3" "all|file"
|
|
;;
|
|
esac
|
|
|
|
www_process=true
|
|
|
|
[[ "$gsl_post" ]] || log_info_all=" ALL"
|
|
|
|
log__process_begin "Server ($1 online)${log_info_all}"
|
|
posts__loop "$1" "$2"
|
|
|
|
# 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}"
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# wip: remove online
|
|
#======================================================================
|
|
WIP__remove() {
|
|
case "$1" in
|
|
remove)
|
|
if [[ -f "$gsl_srv_post_wip" ]];then
|
|
rm -f "$gsl_srv_post_wip" && \
|
|
gsl__logs_print -w -srv wip \
|
|
"Article deleted ; no more 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
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# www: Valid online
|
|
#======================================================================
|
|
WWW__validate() {
|
|
case "$1" in
|
|
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"
|
|
fi
|
|
return
|
|
;;
|
|
esac
|
|
|
|
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
|
|
|
|
elif (( $article_Status_chk == $article_Status_www )) && \
|
|
[[ -f "$gsl_srv_post_www" ]];then
|
|
gsl__logs_print -w -srv www \
|
|
"Article already online" \
|
|
"$gsl_srv_post_www"
|
|
return
|
|
|
|
else
|
|
if (( $article_Status_chk == $article_Status_wip ));then
|
|
[[ "$article_Slug" =~ "/" ]] \
|
|
&& 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"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# 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/"
|
|
}
|
|
|
|
|
|
#======================================================================
|
|
# 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
|
|
}
|
|
|
|
#======================================================================
|
|
# Remove WIP page
|
|
# If error from check and exists
|
|
#======================================================================
|
|
wip__remove() {
|
|
! [[ -f "$gsl_srv_post_wip" ]] && return
|
|
|
|
log_Type="in $article_Slug"
|
|
|
|
# Remove from old slug, if new article Type set
|
|
[[ "$old_Type" ]] \
|
|
&& article_Type="$old_Type" \
|
|
&& article_Slug="$old_Slug" \
|
|
&& log_Type="from old $old_Type"
|
|
|
|
rm -f "$gsl_srv_post_wip" && \
|
|
gsl__logs_print -w -S -wip \
|
|
"Article deleted ; no more preview" \
|
|
"$gsl_srv_post_wip"
|
|
|
|
find "$gsl_srv_wip" -type d -empty -delete && \
|
|
gsl__logs_print -w -S -wip \
|
|
"Cleaned empty directories" \
|
|
"$gsl_srv_wip"
|
|
|
|
gsl__logs_print -w -R -wip \
|
|
"Found $1 $log_Type" \
|
|
"$gsl_srv_post_wip"
|
|
|
|
if [[ "$old_Type" ]];then
|
|
unset old_Type old_Slug log_Type
|
|
|
|
[[ -f "$gsl_file_db_post" ]] \
|
|
&& source "$gsl_file_db_post"
|
|
fi
|
|
}
|