diff --git a/README.md b/README.md index e8e08f8..5d4db1e 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ webserver. # Dependancies - bash - coreutils +- curl (to check Posts links response) # GSL: Installation diff --git a/usr/local/bin/gsl b/usr/local/bin/gsl index b29f54d..6795cc4 100755 --- a/usr/local/bin/gsl +++ b/usr/local/bin/gsl @@ -121,12 +121,12 @@ case "$1" in ;; check|-C) - gsl__find_domain && exit 1 + gsl__find_domain || exit 1 gsl__check_source "$gsl_dir_scripts/gsl__auth_manager" || exit 1 - gsl__authors_list check && exit 1 + gsl__authors_list check || exit 1 gsl__check_source "$gsl_dir_scripts/gsl__post_manager" || exit 1 gsl__check_source "$gsl_dir_scripts/gsl__post_checkers" || exit 1 - gsl__check_nbr_posts && exit 1 + gsl__check_nbr_posts || exit 1 gsl__check_source "$gsl_dir_scripts/gsl__db_manager" || exit 1 case "$2" in diff --git a/var/lib/gsl/README.md b/var/lib/gsl/README.md index e8e08f8..5d4db1e 100644 --- a/var/lib/gsl/README.md +++ b/var/lib/gsl/README.md @@ -8,6 +8,7 @@ webserver. # Dependancies - bash - coreutils +- curl (to check Posts links response) # GSL: Installation diff --git a/var/lib/gsl/scripts/gsl__auth_manager b/var/lib/gsl/scripts/gsl__auth_manager index 1b97c7d..9d4fdbe 100644 --- a/var/lib/gsl/scripts/gsl__auth_manager +++ b/var/lib/gsl/scripts/gsl__auth_manager @@ -11,8 +11,10 @@ gsl__authors_check() { gsl_save_dir_ndd=`grep "$gsl_find_domain" "$gsl_file_db_domains"` gsl_file_auth_ndd="$gsl_save_dir_ndd/$gsl_filename_auth" -! [[ -f "$gsl_file_auth_ndd" ]] \ - && touch "$gsl_file_auth_ndd" +[[ -f "$gsl_file_auth_ndd" ]] \ + && return + +touch "$gsl_file_auth_ndd" } #======================================================================= @@ -21,20 +23,23 @@ gsl_file_auth_ndd="$gsl_save_dir_ndd/$gsl_filename_auth" gsl__authors_list() { gsl__authors_check -[[ -z `grep '[^[:space:]]' "$gsl_file_auth_ndd"` ]] \ - && echo "! No Registred authors yet." \ - && return - +! [[ -z `grep '[^[:space:]]' "$gsl_file_auth_ndd"` ]] \ + && gsl_authors=true \ + && return + +echo "! No Registred authors yet..." + case "$1" in - check) - return - ;; + check) + [[ $gsl_authors ]] && return + return + ;; esac echo -e "\n# Authors Registred:" while read -r "line_nbr" "author" do - echo " $line_nbr: $author" + echo " $line_nbr: $author" done < <(cat -n "$gsl_file_auth_ndd") } @@ -56,13 +61,13 @@ echo -ne "# Add author(s) name : " && IFS="," read -a gsl_new_authors gsl_nbr_authors=${#gsl_new_authors[@]} for i in `seq 0 $(( gsl_nbr_authors - 1 ))` do - echo "${gsl_new_authors[i]}" >> "$gsl_file_auth_ndd" && \ - gsl__logs_print \ - "$gsl_log_i" \ - "Author" \ - "Added" \ - "${gsl_new_authors[i]} for domain $gsl_find_domain" \ - "$gsl_file_auth_ndd" + echo "${gsl_new_authors[i]}" >> "$gsl_file_auth_ndd" && \ + gsl__logs_print \ + "$gsl_log_i" \ + "Author" \ + "Added" \ + "${gsl_new_authors[i]} for domain $gsl_find_domain" \ + "$gsl_file_auth_ndd" done gsl__authors_list @@ -86,23 +91,23 @@ gsl_rm_authors=($gsl_rm_authors) gsl_nbr_authors=`cat $gsl_file_auth_ndd | wc -l` for line in ${gsl_rm_authors[@]} do - [[ $line =~ ^[0-9]+$ ]] || continue - (( $line < 1 )) && continue - (( $line > $gsl_nbr_authors )) && continue - - if [[ $rm_line ]];then - ! (( $line == 1 )) && line=$(( line - 1 )) - fi - gsl_rm_author=`awk -v n="$line" 'NR == n' "$gsl_file_auth_ndd"` - sed -i "${line}d" "$gsl_file_auth_ndd" && \ - gsl__logs_print \ - "$gsl_log_i" \ - "Author" \ - "Removed" \ - "$gsl_rm_author for domain $gsl_find_domain" \ - "$gsl_file_auth_ndd" - echo " - Removed > $gsl_rm_author <" - rm_line=true + [[ $line =~ ^[0-9]+$ ]] || continue + (( $line < 1 )) && continue + (( $line > $gsl_nbr_authors )) && continue + + if [[ $rm_line ]];then + ! (( $line == 1 )) && line=$(( line - 1 )) + fi + gsl_rm_author=`awk -v n="$line" 'NR == n' "$gsl_file_auth_ndd"` + sed -i "${line}d" "$gsl_file_auth_ndd" && \ + gsl__logs_print \ + "$gsl_log_i" \ + "Author" \ + "Removed" \ + "$gsl_rm_author for domain $gsl_find_domain" \ + "$gsl_file_auth_ndd" + echo " - Removed > $gsl_rm_author <" + rm_line=true done gsl__authors_list diff --git a/var/lib/gsl/scripts/gsl__log_manager b/var/lib/gsl/scripts/gsl__log_manager index 6a8fef8..fdcac20 100644 --- a/var/lib/gsl/scripts/gsl__log_manager +++ b/var/lib/gsl/scripts/gsl__log_manager @@ -36,17 +36,13 @@ gsl__logs_show() { [[ "$gsl_logs_err" ]] \ && gsl_logs_filter="$gsl_log_e" -[[ "$gsl_logs_last_session" ]] \ - && gsl_log_show_session="Last session" \ - || gsl_log_show_session="All" - # Last session show or not if [[ "$gsl_logs_last_session" ]];then gsl_log_start_line=` grep -n "Starting" "$gsl_file_logs" \ | tail -1 \ | awk -F: '{print $1}'` - + echo awk -v sl="$gsl_log_start_line" \ 'NR >= sl' \ "$gsl_file_logs" \ diff --git a/var/lib/gsl/scripts/gsl__post_checkers b/var/lib/gsl/scripts/gsl__post_checkers index 369c2ba..aefffe6 100644 --- a/var/lib/gsl/scripts/gsl__post_checkers +++ b/var/lib/gsl/scripts/gsl__post_checkers @@ -11,11 +11,11 @@ gsl__post_all_checkers() { clear unset gsl_check_done -echo -n ": Searching for needed Headers..." +echo -n ": Searching for NEEDED HEADERS..." gsl__post_check_needed_headers echo -ne "\r\033[2K: Searching for #1..." gsl__post_check_h1 -echo -ne "\r\033[2K: Searching for Paragraphs" +echo -ne "\r\033[2K: Searching for PARAGRAPHS" gsl__post_check_paragraphs echo -ne "\r\033[2K: Searching for Content MARKERS..." gsl__post_check_markers @@ -23,10 +23,15 @@ echo -ne "\r\033[2K: Searching for BLOCKQUOTEs..." gsl__post_check_blockquote echo -ne "\r\033[2K: Searching for ABBRs..." gsl__post_check_abbr -echo -ne "\r\033[2K: Searching for LINKs.." +echo -ne "\r\033[2K: Searching for LINKs..." gsl__post_check_links +echo -ne "\r\033[2K: Searching for FILES..." +gsl__post_check_files +echo -ne "\r\033[2K: Searching for IMAGES..." +gsl__post_check_images echo -ne "\r\033[2K" + # End of checkers : show logs for war and err [[ "$gsl_checker_war" ]] \ && gsl log -s -w @@ -319,9 +324,11 @@ gsl__post_check_abbr() { gsl_post_stat_abbr=0 while read -r "gsl_header_content_line" do + # Get & Check HEADER CONTENT gsl__get_header_fields "$gsl_marker_abbr" - gsl__check_header_fields "Post" "ABBR" "$gsl_log_act_abbr" || continue + gsl__check_header_fields "Post" "ABBR" "$gsl_log_act_abbr" \ + || continue # Check POST CONTENT [[ `gsl__get_content_line \ @@ -338,6 +345,7 @@ do "Missing Content: $gsl_post_header_field_1" \ "${PWD}/$gsl_post" gsl_checker_err=true + done < <(gsl__get_header "$gsl_marker_abbr" "$gsl_post") gsl__logs_print \ @@ -357,29 +365,28 @@ while read -r "gsl_header_content_line" do # Get & Check Header CONTENT gsl__get_header_fields "$gsl_marker_link" - gsl__check_header_fields "Post" "Link" "$gsl_log_act_link" || continue - + gsl__check_header_fields "Post" "Link" "$gsl_log_act_link" \ + || continue + # Not ALT TEXT ? - if ! [[ "$gsl_post_header_field_3" ]];then - gsl__logs_print \ - "$gsl_log_w" \ - "Post" \ - "Link" \ - "Line:$gsl_post_header_line_nbr > No ALT TEXT ?" \ - "${PWD}/$gsl_post" - gsl_checker_war=true - fi + gsl__check_header_field3 "Post" "Link" # Find if ref is in CONTENT - if [[ `gsl__get_content_finder \ - -o "$gsl_mo_link" \ - -b "$gsl_post_header_field_1" \ - -c "$gsl_mc_link" \ - -f "$gsl_post" \ - | tail -1 ` ]];then - (( gsl_post_stat_link ++ )) - continue - fi + [[ `gsl__get_content_with_markers "$gsl_mo_link" "$gsl_mc_link"` ]] \ + && gsl_post_stat_link=$(( $gsl_post_stat_link + 1 )) \ + && continue + + # Check URL + (( `curl -o /dev/null --silent --head --write-out \ + '%{http_code}' \ + "$gsl_post_header_field_2"` == 200 )) \ + && continue \ + || gsl__logs_print \ + "$gsl_log_e" \ + "Post" \ + "Link" \ + "URL offline: $gsl_post_header_field_2" \ + "${PWD}/$gsl_post" # Missing CONTENT gsl__logs_print \ @@ -389,6 +396,92 @@ do "Missing Content: [_${gsl_post_header_field_1}_]" \ "${PWD}/$gsl_post" gsl_checker_err=true - + done < <(gsl__get_header "$gsl_marker_link" "$gsl_post") } + +#======================================================================= +# Check Post for FILES HEADER + Content +#======================================================================= +gsl__post_check_files() { +gsl_post_stat_file=0 +while read -r "gsl_header_content_line" +do + + # Get & Check Header CONTENT + gsl__get_header_fields "$gsl_marker_file" + gsl__check_header_fields "Post" "File" "$gsl_log_act_file" \ + || continue + + # Not ALT TEXT ? + gsl__check_header_field3 "Post" "File" + + # Find if ref is in CONTENT + [[ `gsl__get_content_with_markers "$gsl_mo_file" "$gsl_mc_file"` ]] \ + && gsl_post_stat_file=$(( $gsl_post_stat_file + 1 )) \ + && continue + + [[ -f "$gsl_dir_domain_files/$gsl_post_header_field_2" ]] \ + && continue \ + || gsl__logs_print \ + "$gsl_log_e" \ + "Post" \ + "File" \ + "Not found: $gsl_post_header_field_2" \ + "$gsl_dir_domain_files/$gsl_post_header_field_2" + + # Missing CONTENT + gsl__logs_print \ + "$gsl_log_e" \ + "Post" \ + "File" \ + "Missing Content: <_${gsl_post_header_field_1}_>" \ + "${PWD}/$gsl_post" + gsl_checker_err=true + +done < <(gsl__get_header "$gsl_marker_file" "$gsl_post") +} + +#======================================================================= +# Check Post for IMAGES HEADER + Content +#======================================================================= +gsl__post_check_images() { +gsl_post_stat_image=0 +while read -r "gsl_header_content_line" +do + + # Get & Check Header CONTENT + gsl__get_header_fields "$gsl_marker_image" + gsl__check_header_fields "Post" "Image" "$gsl_log_act_image" \ + || continue + + # Not ALT TEXT ? + gsl__check_header_field3 "Post" "Image" + + # Find if ref is in CONTENT + [[ `gsl__get_content_line \ + "$gsl_mark_image : $gsl_post_header_field_1" \ + "$gsl_post"` ]] \ + && gsl_post_stat_image=$(( $gsl_post_stat_image + 1 )) \ + && continue + + [[ -f "$gsl_dir_domain_files/$gsl_post_header_field_2" ]] \ + && continue \ + || gsl__logs_print \ + "$gsl_log_e" \ + "Post" \ + "image" \ + "Not found: $gsl_post_header_field_2" \ + "$gsl_dir_domain_files/$gsl_post_header_field_2" + + # Missing CONTENT + gsl__logs_print \ + "$gsl_log_e" \ + "Post" \ + "Image" \ + "Missing Content: _image_ : ${gsl_post_header_field_1}" \ + "${PWD}/$gsl_post" + gsl_checker_err=true + +done < <(gsl__get_header "$gsl_marker_image" "$gsl_post") +} diff --git a/var/lib/gsl/scripts/gsl__post_manager b/var/lib/gsl/scripts/gsl__post_manager index 367a60a..daca754 100644 --- a/var/lib/gsl/scripts/gsl__post_manager +++ b/var/lib/gsl/scripts/gsl__post_manager @@ -10,8 +10,10 @@ gsl__check_nbr_posts() { gsl_nbr_posts=`ls -1 *.gsl 2>/dev/null | wc -l` -(( $gsl_nbr_posts == 0 )) \ - && echo "! No Posts found with .gsl extension" +(( $gsl_nbr_posts >= 1 )) \ + && return + +echo "! No Posts found with .gsl extension" } #======================================================================= @@ -138,6 +140,19 @@ awk -v line="$gsl_post_begin" -v s="$1" \ "$2" || return } +#======================================================================= +# Check CONTENT Post with markers... $1: Open Marker | $2: Close Marker +#======================================================================= +gsl__get_content_with_markers() { +gsl__get_content_finder \ + -o "$1" \ + -b "$gsl_post_header_field_1" \ + -c "$2" \ + -f "$gsl_post" \ + | tail -1 \ + || return +} + #======================================================================= # Get CONTENT with marks | ! find from ONE line content #======================================================================= @@ -182,11 +197,11 @@ gsl__get_line "$1$gsl_post_header_field_1" "$gsl_post"` } #======================================================================= -# Get Fields and line nbr from header from marker +# Check NEEDED Fields from HEADER #======================================================================= gsl__check_header_fields() { -if ! [[ "$gsl_post_header_field_1" ]] || \ - ! [[ "$gsl_post_header_field_2" ]];then +if ! [[ "$gsl_post_header_field_1" ]] || \ + ! [[ "$gsl_post_header_field_2" ]];then gsl__logs_print \ "$gsl_log_e" \ @@ -198,3 +213,31 @@ if ! [[ "$gsl_post_header_field_1" ]] || \ return fi } + +#======================================================================= +# Check OPTIONAL Field 3 from HEADER +#======================================================================= +gsl__check_header_field3() { +if ! [[ "$gsl_post_header_field_3" ]];then + case "$2" in + Image) + gsl__logs_print \ + "$gsl_log_e" \ + "$1" \ + "$2" \ + "Line:$gsl_post_header_line_nbr > No ALT TEXT ?" \ + "${PWD}/$gsl_post" + gsl_checker_err=true + ;; + *) + gsl__logs_print \ + "$gsl_log_w" \ + "$1" \ + "$2" \ + "Line:$gsl_post_header_line_nbr > No ALT TEXT ?" \ + "${PWD}/$gsl_post" + gsl_checker_war=true + ;; + esac +fi +} diff --git a/var/lib/gsl/scripts/gsl__tools b/var/lib/gsl/scripts/gsl__tools index e8ec396..edcba06 100644 --- a/var/lib/gsl/scripts/gsl__tools +++ b/var/lib/gsl/scripts/gsl__tools @@ -78,16 +78,36 @@ if [[ "$gsl_find_domain" ]];then <<< $gsl_find_domain` gsl_find_domain=${gsl_find_domain,,} - gsl__check_domain "$gsl_find_domain" + gsl__check_domain "$gsl_find_domain" || return fi } #======================================================================= -# Check and set domain from db +# Check and set domain from DB #======================================================================= gsl__check_domain() { gsl_this_conf_domain=`grep "$1" "$gsl_file_db_domains"` ! [[ "$gsl_this_conf_domain" ]] \ - && echo "! Domain Not found: $1" + && echo "! Domain Not found: $1" \ + && return + +gsl_dir_domain_tpl="$gsl_this_conf_domain/templates" +gsl_dir_domain_files="$gsl_this_conf_domain/files" +gsl_dir_domain_images="$gsl_this_conf_domain/images" + +for gsl_new_dir in `set -o posix ; set \ + | grep "gsl_dir_domain" \ + | awk -F= '{print $2}'` +do + if ! [[ -d "$gsl_new_dir" ]];then + mkdir -p "$gsl_new_dir" 2>/dev/null && \ + gsl__logs_print \ + "$gsl_log_i" \ + "Folder" \ + "Init..." \ + "Created" \ + "$gsl_new_dir" + fi +done }