#!/bin/bash # common.sh - common functions for OPS app # get_auth_string() function get_auth_string() { if ! session_verify "${cookies[sh_session]}"; then exit 0 fi local user="$(session_get_username ${cookies[sh_session]})" local token="$(cat secret/authTokens.dat | grep -P "^$user:" | sed -s "s/$user://")" if [[ "$token" == 'null' ]]; then exit 1 fi echo "Authorization: Bearer $token" } function get_refresh_token() { if ! session_verify "${cookies[sh_session]}"; then exit 0 fi local user="$(session_get_username ${cookies[sh_session]})" echo "$(cat secret/refreshTokens.dat | grep -P "^$user:" | sed -s "s/$user://")" } # check_if_user_exists(file) function check_if_user_exists() { if ! session_verify "${cookies[sh_session]}"; then exit 0 fi local user=$(session_get_username ${cookies[sh_session]}) [[ $1 == "refreshToken" ]] && [[ $(cat secret/refreshTokens.dat | grep -P "^$user:") != "" ]] && return 1 [[ $1 == "authToken" ]] && [[ $(cat secret/authTokens.dat | grep -P "^$user:") != "" ]] && return 1 return 0 } # add_account_refreshtoken(refreshtoken) function add_account_refreshtoken() { if ! session_verify "${cookies[sh_session]}"; then exit 0 fi username="$(session_get_username ${cookies[sh_session]})" if ! check_if_user_exists refreshToken; then sed -E -i '/^'"$username"':/d' secret/refreshTokens.dat fi echo "$username:$1" >> secret/refreshTokens.dat } # add_account_authtoken(authtoken) function add_account_authtoken() { if ! session_verify "${cookies[sh_session]}"; then exit 0 fi username="$(session_get_username ${cookies[sh_session]})" token="$(sed 's/Bearer //g' <<< "$@")" if ! check_if_user_exists authToken; then sed -E -i '/^'"$username"':/d' secret/authTokens.dat fi echo "$username:$token" >> secret/authTokens.dat } # update_account_authtoken(username) function update_account_authtoken() { local a=$(cat secret/refreshTokens.dat | grep -P "^$1\:") local token=$(awk -F: '{print $2}' <<< $a); local auth='' while true; do if [[ "$auth" == '' ]]; then auth=$(curl -s -X POST -H "Content-type: application/json" --data '{"phoneOS": "Android", "refreshToken": "'"$token"'"}' https://api-inmobile-pl.easypack24.net/v1/authenticate | jq -r .authToken | sed -s 's/Bearer //g') sleep 1 else break fi done sed -E -i 's/^'"$1"':.*/'"$1:$auth"'/g' secret/authTokens.dat } # check_mail(mail) function check_mail() { if [[ $(cat secret/mail.dat | grep ":$1:") == '' ]]; then return 0 else return 1 fi } #get_account_mail(username) function get_account_mail() { [[ $1 == '' ]] && return cat secret/mail.dat | grep "^$1:" | awk -F: '{print $2}' } #account_verified(username) function account_verified() { [[ $1 == '' ]] && return if [[ "$(cat secret/mail.dat | grep -P "^$1:" | awk -F: '{print $4}')" != "yes" ]]; then return 0 else return 1 fi } #account_gen_reset_code(username, force) function account_gen_reset_code() { [[ "$1" == '' ]] && return if ! account_verified "$1"; then local data="$(cat secret/mail.dat | grep -P "^$1:")" local user="$1" local mail="$(awk -F: '{print $2}' <<< "$data")" local old_code="$(awk -F: '{print $3}' <<< "$data")" local timestamp="$(awk -F: '{print $5}' <<< "$data")" local new_timestamp="$(date "+%s")" local new_code="$RANDOM" if [[ $(date "+%s") -gt $((timestamp+3600)) || $2 == true ]]; then sed -i "s/$user:$mail:$old_code:yes:$timestamp/$user:$mail:$new_code:yes:$new_timestamp/" secret/mail.dat account_get_reset_code "$user" return 0 else return 2 fi else return 1 fi } #account_get_reset_code(username) function account_get_reset_code() { local data="$(cat secret/mail.dat | grep -P "^$1:")" local code="$(awk -F: '{print $3}' <<< "$data")" echo -n "$code"$(date "+%d%m%y") | sha1sum | awk '{print $1}' | cut -c 1-10 } #reset_pwd(username, hash, password) function reset_pwd() { [[ "$1" == '' || "$2" == '' || "$3" == '' ]] && return local user="$1" local hash="$2" local pass="$3" if [[ "$(account_get_reset_code "$user")" == "$hash" ]]; then delete_account "$user" register "$user" "$pass" # prevents resetting the password with the same hash twice account_gen_reset_code "$user" true >> /dev/null return 0 else return 1 fi }