#!/bin/bash -x # ---------------------------------------------------------------------------- # title : common_functions.sh # description : functions commonly used in our scripts # author : Alberto Rodríguez # author : Jorge Holgado # date : 20190404 # version : 0.1 # bash_version : 4 # ---------------------------------------------------------------------------- # # Necessary packages: s-nail postfix (debian&ubuntu) # Setup your credentials con ${CONFIGFILE} # ${CYPHEREDUSERNAME} must be spoofed from a running session on the browser, is just for testing purpouses # BOLD="\e[1m" GREEN="\e[32m" LIGHTGREEN="${BOLD}${GREEN}" #RED="\033[1;31m" LIGHTRED="\033[1;31m" BLUE="\e[34m" LIGHTBLUE="${BOLD}${BLUE}" #YELLOW="\e[33m" #LIGHTYELLOW="${BOLD}${YELLOW}" #WHITE="\033[0;37m" RESET="\033[0;00m" ############################################## # # CONFIG # ############################################## QUIETOUTPUT=false NOW="$(date +%Y%m%d%H%M%S)" SCRIPT_PATH="$(dirname "$(readlink -f "$0")")" OUTPUTFILE="${SCRIPT_PATH}/logs/${NOW}_outputfile_$(basename "$0" .sh).log" CONFIGFILE="${SCRIPT_PATH}/$(basename "$(readlink -f "$0")" .sh).config" SCRIPTLOG="${SCRIPT_PATH}/logs/${NOW}_scriptlog_$(basename "$0" .sh).log" SCRIPTLOGERR="${SCRIPT_PATH}/logs/${NOW}_scriptlog_$(basename "$0" .sh).err" AUXFILE=$(mktemp) TMPFILE=$(mktemp) #MANDATORYHEADERS="-H \"Accept: application/json, text/plain, */*\"" #MANDATORYHEADERS="${MANDATORYHEADERS} -H \"Content-Type: application/json;charset=UTF-8\"" ## TEDDYBEAR added after sourcing config file ############################################## # #/CONFIG # ############################################## ############################################## # # FUNCTIONS # ############################################## print_codename() { echo -e "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNXXXXXNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0xl:'.. ..,cokKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXxc' .. .; ,: .; .;oOWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMXd; . ,, ,W . o0 : . l0. .: .ckWMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMM0c. :Oo N; oO kd W; do . 'dNMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMNo. ;.;0, .. ....c; ,N'.xd ,kWMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMM0, xk ; .. o, .O ,d. .lNMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMO' .lo oK. .. .: , 0; cNMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMM0' :c .l ,. .,:cloooolc:,.. . X;...d. cWMMMMMMMMMMMMMMM MMMMMMMMMMMMMk .k0. .cxKWMMMMMMMMMMMMMMMMWKxc' . ;Kc 'WMMMMMMMMMMMMMM MMMMMMMMMMMMMM0; ,o .cOWMMMMMMMMMMMMMMMMMMMMMMMMMMWOc. .d lWMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMNl cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKl :NMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMW; .xWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWk. lMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMc .kMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNO0OONMMMMMMMMk. cWMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMW' lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK'lWMW; .OMMMMMMMWl 'WMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMW. OMMMMMMMMMKxllxxlcdKMMMMMMMMMMMM; OMM0 KMMMMMMMM0 .WMMMMMMMMMMMMMMM MMMMMMMMMMMMMMW' .XMMMMMMMXc. dMMMMO .oWMMMMMMMMMWOKMMMx 'NMMMMMMMMMX. ,MMMMMMMMMMMMMMM MMMMMMMMMMMMMMl .XMMMMMMMd lMMMMMM0 .KMMMMMMMMMMocxx..lNMMMMMMMMMMMN. oMMMMMMMMMMMMMM MMMMMMMMMMMMMX OMMMMMMMd NMMMMMMM. KMMMMMMMMMMMMMN kMMMMMMMMMMM0 XMMMMMMMMMMMMM MMMMMMMMMMMMM: ;MMMMMMMW .MMMMMMMM; .MMMMMM0. .WMMM, .MMMMMMMMMMMM: :MMMMMMMMMMMMM MMMMMMMMMMMMW KMMMMMMMO .MMMMMMMM: 0MMMMMx ;oMMMM. dMMMMMMMMMMMMX WMMMMMMMMMMMM MMMMMMMMMMMMO .MMMMMMMM0 .MMMMMMMM: cMMMMMMxo0WW0, :0MMMMMMMMMMMMMM. OMMMMMMMMMMMM MMMMMMMMMMMMd ;MMMMMMMMW WMMMMMMM' ,MMMMMMMMN0O0XMMMMMMMMMMMMMMMMM: dMMMMMMMMMMMM MMMMMMMMMMMMo :MMMMMMMMMk xMMMMMMN ,MMNccccccccccccccccOMMMMMMMMMMc dMMMMMMMMMMMM MMMMMMMMMMMMx ,MMMMMMMMMMO. KMMMMN,. :MMMMMMMMMMMMXlMMMMMMMMMMMMMMMM; dMMMMMMMMMMMM MMMMMMMMMMMMK .MMMMMMMMMMMMk;. ,clloXc kMMMMMMMMMMMO MMMMMMMMMMMMMMMM. 0MMMMMMMMMMMM MMMMMMMMMMMMM. OMMMMMMMMMMMMMMMNNNMMMM: .WMMMMMMMMMMo MMMMMMMMMMMMMMM0 .MMMMMMMMMMMMM MMMMMMMMMMMMMo .MMMMMMMMMMMWNWMMMMMMMM, kMMMMMMMMMNlo MMMMMMMMMMMMMMM' lMMMMMMMMMMMMM MMMMMMMMMMMMMW. oMMMMMMMM0. :MMMMMMM. oMMMMMMMMMKoWO MMMMMMMMMMMMMMd .WMMMMMMMMMMMMM MMMMMMMMMMMMMMk OMMMMMMMc NMMMMMd xMMMMMMMMMkxMMO MMMMMMMMMMMMMO OMMMMMMMMMMMMMM MMMMMMMMMMMMMMMl xMMMMMMX. ,oXMMMMMd cNMMMMMMMMMk,:::' ::dMMMMMMMMMk lMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMc ; lMMMMMMWx:codxdl;:xWMMMMMMMMMMMMMMMMO MMMMMMMMMMMl . cMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMo ll. .KMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMKOk: dOKMMMMMMK. .;;c oMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMk ;. c :XMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNNNNNNWMMMMN: ,.. kMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMN; c. c :0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK: , l ;NMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMO. ..c. .oXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXd. .c.:, .OMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMk. ; k. . .lOWMMMMMMMMMMMMMMMMMMMMMMMMWOl. ..: o .kMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMO; . c ;.. .;okKNMMMMMMMMMMMMWKko;. ...: o. ;0MMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMNx, ..:. : . . ...''''... ...o. ..: 'dNMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWk:. .; k.:., , ;..;'. ;,; .; .:kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOo;... ; c,, l.,,;..: . .;lONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX0xol:;;,,;;,;:lox0XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM " } usage() { print_codename echo echo -e "$0 ${LIGHTBLUE}signin|signout|status${RESET}" echo -e "\tsignin|signout|status is MANDATORY" } printmsg() { echo -e "$*" } output_log() { if [[ "${QUIETOUTPUT}" == true ]]; then printmsg "$*" >> "${OUTPUTFILE}" else printmsg "$*" | tee -a "${OUTPUTFILE}" fi } abort_message() { printmsg "ERROR: $*" exit 1 } # debug_me uses variable ${DEBUGME} debug_me() { if [[ "${DEBUGME}" && ${DEBUGME} -eq 0 ]] ; then echo -e "${LIGHTBLUE}DEBUG: ${RESET}$*" fi } # build_headers has a optional parameter to build "sign_in" headers # build_headers [extended] build_headers() { local EXTENDED=$1 if [[ "${EXTENDED,,}" = "extended" ]] ; then for ((x=0; x<${#SIGNINHEADERS[@]}; x++)) ; do #printf "%s" "-H "${SIGNINHEADERS[${x}]}" " echo -e "-H '${SIGNINHEADERS[${x}]}' \\" done fi for ((x=0; x<${#MANDATORYHEADERS[@]}; x++)) ; do #printf "%s" "-H "${MANDATORYHEADERS[${x}]}" " echo -e "-H '${MANDATORYHEADERS[${x}]}' \\" done } do_login() { local POSTDATA="grant_type=password&username=${USERNAME}&password=${PASSWORD}" local AUXURL="${APIURL}/Token" echo -e "${CURLBIN} $(build_headers) -d '${POSTDATA}' \\ ${AUXURL}" >"${AUXFILE}" #cat ${AUXFILE} TEDDYBEAR="$(bash "${AUXFILE}" | jq . | grep -E "access_token" | awk '{print $2}' | awk -F\" '{print $2}')" if [[ "${TEDDYBEAR}" =~ .*${CYPHEREDUSERNAME}.* ]] ; then TEDDYBEAR="Authorization: Bearer ${TEDDYBEAR}" return 0 else output_log "Not able to login, exitting" mail_report abort_message "Not able to login, exitting" fi } get_userid() { local AUXURL="${APIURL}/api/users" echo -e "${CURLBIN} $(build_headers) ${AUXURL}" >"${AUXFILE}" USERID="$(bash "${AUXFILE}" | jq . | grep -E "\"UserId\"" | awk '{print $2}' | sed 's/,$//g')" if [[ "${USERID}" =~ ^[0-9]{1,}$ ]] ; then return 0 else output_log "Not able obtain user id" mail_report abort_message "Not able obtain user id" fi } # will return 0 if signed, 1 if unsigned get_status() { local STATUS="" echo -e "${CURLBIN} $(build_headers) ${SIGNURL}" >"${AUXFILE}" STATUS=$(bash "${AUXFILE}" | jq . | grep -E "SignIn" | tail -1 | awk '{print $2}') # if there's no signIn this day, the app return an empty JSON # As a patch, try to signin forced... if [[ "${STATUS}" =~ ^true,$ ]] ; then return 0 elif [[ "${STATUS}" =~ ^false,$ || "${STATUS}" = "" ]] ; then return 1 else output_log "Something wrong on get_status()" mail_report abort_message "Something wrong on get_status()" fi } toggle_status() { # the content-length is the length of the string '{"UserId":58470,"TimezoneOffset":-120}' #SIGNINHEADERS=${SIGNINHEADERS}' -H "content-length: 38"' local POSTDATA="{\"UserId\":${USERID},\"TimezoneOffset\":-120}" CONTENTLENGTH=$(echo ${POSTDATA}|wc -c) ((CONTENTLENGTH--)) echo -e "${CURLBIN} $(build_headers extended) -H 'content-length: ${CONTENTLENGTH}' \\ -d '${POSTDATA}' \\ ${SIGNURL}" >"${AUXFILE}" #cat ${AUXFILE} bash "${AUXFILE}" | jq . >"${TMPFILE}" RES=$? return ${RES} } randomize_time() { SLEEPTIME=$(( RANDOM % RANDOMIZE )) printmsg "${LIGHTBLUE}Sleeping ${SLEEPTIME}${RESET}" sleep ${SLEEPTIME} } mail_report() { ${MAILXBIN} -s "$(basename "$0") report ${NOW}" \ -S ssl-verify=ignore -S smtp-auth=login \ -S smtp="smtp://${SMTPHOST}:25" \ -S from="${USERNAME}" \ -S smtp-auth-user="${SMTPUSER}" \ -S smtp-auth-password="${SMTPPASS}" \ -S ssl-verify=ignore \ -a "${SCRIPTLOG}" \ -a "${SCRIPTLOGERR}" \ "${USERNAME}" < "${OUTPUTFILE}" } ############################################## # #/FUNCTIONS # ############################################## ############################################## # # MAIN # ############################################## [[ ! -d $(dirname "${OUTPUTFILE}") ]] && mkdir -p "$(dirname "${OUTPUTFILE}")" # DETECTING if the script is run by cron if [[ "$(tty)" = "not a tty" ]] ; then set -x exec > "${SCRIPTLOG}" exec 2> "${SCRIPTLOGERR}" else touch "${SCRIPTLOG}" touch "${SCRIPTLOGERR}" fi if [[ -f ${CONFIGFILE} ]] ; then . "${CONFIGFILE}" else output_log "Configfile ${CONFIGFILE} not found" mail_report abort_message "Configfile ${CONFIGFILE} not found" fi THEACTION="$1" if [[ ! "${THEACTION,,}" =~ ^signin|signout|status$ ]] ; then usage exit 0 fi MAYTHEFORCEBEWITHYOU="$2" if [[ "${MAYTHEFORCEBEWITHYOU}" = "Imonewiththeforce" ]] ; then RANDOMIZE=1 fi do_login MANDATORYHEADERS[${#MANDATORYHEADERS[@]}]="${TEDDYBEAR}" get_userid get_status RES=$? ACTUALSTATUS=${RES} if [[ "${THEACTION,,}" = "status" ]] ; then if [[ ${ACTUALSTATUS} -eq 0 ]] ; then printmsg "${LIGHTGREEN}Signed In${RESET}" else printmsg "${LIGHTRED}Signed Out${RESET}" fi exit 0 fi # ACTUALSTATUS=0 Signed In if [[ "${THEACTION,,}" = "signin" && ${ACTUALSTATUS} -eq 0 ]] || [[ "${THEACTION,,}" = "signout" && ${ACTUALSTATUS} -eq 1 ]] ; then output_log "Already ${THEACTION}" mail_report abort_message "Already ${THEACTION}" else randomize_time toggle_status RES=$? fi if [[ ${RES} -eq 0 ]] ; then printmsg "${LIGHTGREEN}Successfully changed status${RESET}" output_log "Successfully changed status" mail_report else output_log "FAILED to changed status" mail_report abort_message "FAILED to changed status" fi rm -fv "${OUTPUTFILE}" ############################################## # #/MAIN # ##############################################