#!/bin/sh

# UTF8

# Этот скрипт выполняет перерегистрацию данных авторизации
# сервера - запрашиваетт новый статический пароль -
# на менеджере (FRN System Manager), например, при получении
# от него от менеджера ошибки "неверный пароль"
# Смотри также
# http://alterfrn.ucoz.ru/index/standalone_frn_server/0-24#s_1_17
#
# This script reregisters server account - requests the new
# static password - with FRN System Manager, for example,
# after server got error "WRONG PASSWORD" from FRNSysman
# See also 
# http://alterfrn.ucoz.ru/index/standalone_frn_server/0-24#s_1_17


# Индекс FRN-менеджера, который вернул ошибку "Неверный пароль",
#       в конфигурационном файле сервера
# Index in server's configuration file of the FRNSysman
#       which returned WRONG PASSWORD error
#    0  = [Manager]
#    1  = [Manager1]
#    2  = [Manager2]
midx=$1


# Адрес FRN-менеджера, который вернул ошибку "Неверный пароль";
#    Значение параметра ManagerAddress (s.2.2)
# Address of the FRNSysman which returned WRONG PASSWORD error.
# It is the value of the ManagerAddress (s.2.2) parameter
maddr=$2


# Порт FRN-менеджера, который вернул ошибку "Неверный пароль";
#    Значение параметра ManagerPort (s.2.3)
# Port of the FRNSysman which returned WRONG PASSWORD error
# It is the value of the ManagerPort (s.2.3) parameter
mport=$3


# Адрес электропочты из данных авторизации
#	значение параметрат ManagerAuthEMail (s.2.4)
# E-Mail address from account for manager
# It is the value of the ManagerAuthEMail (s.2.4) parameter
xemail=$4


# Время в секундах, в течении которого не нужно выполнять повторных
#     попыток получения нового статического пароля, а следует
#     ждать нового пароля по почте на адрес из переменной ${xemail}
# Interval in seconds do not repeat attempts to get new static password
#     and do wait for it via email at address from variable ${xemail}
waittime="1200"

# рабочий каталог сервера AlterFRN
# working directory of server AlterFRN
wdir="/FRNs"


# имя файла журнала для процедуры перерегистрации
# the log file name for reregistration procedure
logfile="${wdir}/invalid_password.log"


# текущие дата и врема
# current date and time
dtx=$( date "+%F %T %s" )


# дата и время для журнала
# date and time for the log file
dt=$( echo "${dtx}" | awk '{ print $1 " " $2}' )

# unix время для отслеживания защитного интервала
# unix time to watch for the guard interval
epoch=$( echo "${dtx}" | awk '{ print $3}' )


# регистрируем в журнале факт запуска скрипта со всеми параметрами
# log execution of the script with all parameters
echo "" >> ${logfile}
echo "${dt}: EXEC: $0 $*" >> ${logfile}


# имя файла для фиксации времени конретного 
#   запроса на новый статический пароль
# filename to remember time of the certain request
#   for the new static password
jobfile="${wdir}/JOB_${xemail}_${maddr}.dat"

# проверка наличия файла со временем
# check of existence of file with time
if [ ! -f ${jobfile} ] ; then
    touch ${jobfile}
    chmod 666 ${jobfile}
fi

# читаем время последнего запроса из файла
# read time of the last request
epochlast=$( cat ${jobfile} )

# если нет времени, то считаем, что это было очень давно
# if no time then consider it happend very long time ago
if [ -z "${epochlast}" ] ; then
  epochlast="0"
fi

# сравниваем текущее время со временем последнего запроса
# compare current time with the last request's time
diff=$( expr ${epoch} - ${epochlast} )
if [ $diff -lt $waittime ] ; then
    # последний запрос проводился в пределах защитного интервала
    # the last request was made in quard time
    diff=$( expr ${waittime} - ${diff})
    echo "${dt}: it is guard time: ${diff} seconds left" >> ${logfile}
    exit 0
fi

# со времени последнего запроса прошло достаточно времени для повтора
# It took enough time to make the [new] attempt to request password


# имя конфигурационного файла для FRN-клиента,
# который будет выполнять запрос
# config file name for the FRNclient to reregister account
cfgname="${wdir}/CLI_${xemail}_${maddr}.cfg"

# проверяем наличие такого файла 
# check the existence of FRNClient's config file
if [ ! -f ${cfgname} ] ; then
    # нет файла конфигурации - нет нового статического пароля
    # no config file - no new static password
    echo "${dt}: client config file not found: ${cfgname}" >> ${logfile}
    exit 0
fi

# Запросим новый пароль используя FRN-клиент.
# Request the new static password (reregister auth data) using FRNClient.
${wdir}/FRNClientConsole register ${cfgname} >> ${logfile}
result=$?

# проверяем результаты выполнения FRN-клиента
# check result of registration by FRNClient
if [ ${result} -ne 0 ] ; then
    echo "${dt}: FRN client returned ${result}" >> ${logfile}
    exit 0
fi

# FRN-клиент успешно запросил новый статический пароль
# FRN client successfully requested the new static password


# запомним время этого запроса как последнего
# remember time of this request as last attempt time
tmpf="$$.tmp"
echo "${epoch}" >> $tmpf
chmod 666 $tmpf
mv $tmpf $jobfile

# теперь выходим, а ждать почту с новым паролем будет сборщик почты
# exit now, but email collector will wait the answer with new static password

exit 0
