From 6f0bf2b66ab507d679979c24171d0c991d085fc4 Mon Sep 17 00:00:00 2001 From: dodger Date: Tue, 15 Aug 2023 09:39:32 +0200 Subject: [PATCH] script add --- platform9and3quarters.config.tmpl | 14 ++ platform9and3quarters.sh | 377 ++++++++++++++++++++++++++++++ 2 files changed, 391 insertions(+) create mode 100644 platform9and3quarters.config.tmpl create mode 100755 platform9and3quarters.sh diff --git a/platform9and3quarters.config.tmpl b/platform9and3quarters.config.tmpl new file mode 100644 index 0000000..99bef0e --- /dev/null +++ b/platform9and3quarters.config.tmpl @@ -0,0 +1,14 @@ +SIGNURL="https://thecompany.woffu.com/api/signs" +APIURL="https://app.woffu.com" +CURLBIN="/usr/bin/curl -s" + +RANDOMIZE=500 + +USERNAME="jholgado@thecompany.net" +PASSWORD="thepassword" +CYPHEREDUSERNAME="the CYPHEREDUSERNAME" + +SMTPHOST="mta.thecompany.com" +SMTPUSER="smtp user" +SMTPPASS="smpt host" +MAILXBIN="/usr/bin/s-nail" diff --git a/platform9and3quarters.sh b/platform9and3quarters.sh new file mode 100755 index 0000000..c08786e --- /dev/null +++ b/platform9and3quarters.sh @@ -0,0 +1,377 @@ +#!/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)" + +OUTPUTFILE="$(dirname "$(readlink -f "$0")")/logs/${NOW}_outputfile_$(basename "$0" .sh).log" +CONFIGFILE="$(dirname "$(readlink -f "$0")")/$(basename "$(readlink -f "$0")" .sh).config" + +SCRIPTLOG="$(dirname "$(readlink -f "$0")")/logs/${NOW}_scriptlog_$(basename "$0" .sh).log" +SCRIPTLOGERR="$(dirname "$(readlink -f "$0")")/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 + + +declare -a MANDATORYHEADERS +MANDATORYHEADERS=( 'Accept: application/json, text/plain, */*' 'Content-Type: application/json;charset=UTF-8' ) + +declare -a SIGNINHEADERS +SIGNINHEADERS=( 'Origin: https://voxelgroup.woffu.com' 'Host: voxelgroup.woffu.com:443' 'Expect:' ) + + +############################################## +# +#/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 +# +############################################## + +