#! /bin/bash
#------------------------------------------------------------------------------
#see licence at the end
MoeVersion="0.1.0 - 19 sept 2015 rev 1.0 Last Update : `stat -c %z $0 | cut -d"." -f1`"
Date=`date +%y_%m_%e_%H_%M_%S`
CurrentUser=`whoami`
AllParameters="$*"
#------------------------------------------------------------------------------
#StartConfig
#------------------------------------------------------------------------------
#Adapt following values to your context
#
#MoeMode : see --help"
#MoeMode="remote"
MoeMode="test"
MoeSiteMode="maintenance"
#Other parameters you may look for :
#
#moe background tasks parameters
#-------------------------------
MoeDir="/usr/local/etc/moe"
MoeConfig="$MoeDir/moe.conf"
MoeSpool="$MoeDir/moe_spool"
MoeData="$MoeDir/moe_data"
MoeCodes="$MoeData/codes.data"
MoeDatabases="$MoeData/databases.data"
MoeAdminCodes="$MoeData/admin.data"
MoeLogFile="$MoeDir/moe.log"
MoeReport="$MoeDir/moe.report"
MoeModeFile="$MoeDir/moe.mode"
MoeSiteModeFile="$MoeDir/moe_site.mode"
MoeContact="Pour contacter le support technique de SISalp, merci d'indiquer code et nom de base eventuel sur la page http://sisalp.fr/index.php/contact"
#Site parameters which are useless here
#--------------------------------------
HttpUser="www-data"
TopImage="images/background.gif"
TopLogo="images/top_background.jpg"
TapeImage="images/tape.png"
DiskImage="images/disk.png"
ServiceImage="images/disk.png"
SiteCss="moe.css"
SiteUrl="."
SiteAbout="http://sisalp.fr/index.php/post/Hebergement-OpenERP-et-Tryton-par-SISalp-Le-panneau-d-administration-du-serveur-VDS"
SiteSupport="http://sisalp.fr/index.php/contact"
PageTop="]]>"
PageBack1=""
PageBack2="$PageBack1
"
SiteImages="images"
ImageSource="http://download.sisalp.net/moe/images/"
MoeDownloadSource="http://download.sisalp.net/moe/moe"
#------------------------------------------------------------------------------
#EndConfig
#------------------------------------------------------------------------------
if [ -f $MoeModeFile ] ; then
MoeMode=`cat $MoeModeFile`
fi
if [ -f $MoeSiteModeFile ] ; then
MoeSiteMode=`cat $MoeSiteModeFile`
fi
NbServicesPerVserver=`cat $MoeConfig | grep "^NbServicesPerVserver:" | cut -f2`
NbDatabasePerService=`cat $MoeConfig | grep "^NbDatabasePerService:" | cut -f2`
Pace=`cat $MoeConfig | grep "^Pace:" | cut -f2`
LocalReferenceData=`cat $MoeConfig | grep "^LocalReferenceData:" | cut -f2`
#------------------------------------------------------------------------------
#Fonctions
#------------------------------------------------------------------------------
LOG_MESSAGE ()
#------------------------------------------------------------------------------
{
case "$1" in
-short)
shift
echo -n "$*" >> $MoeLogFile
echo "return" > /tmp/moe.log.return
chmod 777 /tmp/moe.log.return
;;
*)
if [ -f /tmp/moe.log.return ] ; then
rm /tmp/moe.log.return
echo "" >> $MoeLogFile
fi
echo "$HOSTNAME|moe|`date +%A_%x-%H:%M:%S:%3N`|INFO |$CurrentUser|$$|$*" >> $MoeLogFile
;;
esac
}
#LOG_MESSAGE $LINENO -g ZONE_TO_SERVICE service $Service database $Database templatefile $TemplateFile
#-------------------------------------------------------------------------
NEW_PASSWORD ()
#-------------------------------------------------------------------------
{
if [ -z "$1" ] ; then
pw_nb_digits=12
else
pw_nb_digits="$*"
fi
pw_letters=(a b c d e f g h i j k m n o p q r s t u v w x y z A B C D E F G H I J K L M N P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 )
pw_range="${#pw_letters[*]}"
NEW_PWD=""
for nb_digit in $pw_nb_digits ; do
if [ ! -z "$NEW_PWD" ] ; then NEW_PWD="${NEW_PWD}""_" ; fi
for (( pw_digit = 1 ; pw_digit <= $nb_digit ; pw_digit++ )) ; do
pw_index="$(($RANDOM%$pw_range))"
NEW_PWD="${NEW_PWD}""${pw_letters[$pw_index]}"
done
done
echo "${NEW_PWD}"
}
#------------------------------------------------------------------------------
EXECUTE_COMMAND ()
#------------------------------------------------------------------------------
{
LOG_MESSAGE $LINENO "EXECUTE_COMMAND $*"
Target="$1"
shift
case "$MoeMode" in
local)
$*
;;
remote)
SshCommand=`cat $MoeConfig | grep "^mooc_server:$Target:" | cut -f4`
if [ -z "$SshCommand" ] ; then
LOG_MESSAGE $LINENO "SSH command in not found for mooc_server:$Target: in $MoeConfig"
else
LOG_MESSAGE $LINENO "SSH command ssh $SshCommand command $*"
ssh $SshCommand "$*"
fi
;;
test)
SshCommand=`cat $MoeConfig | grep "^mooc_server:$Target:" | cut -f4`
LOG_MESSAGE $LINENO "Test mode: the following command is not executed on $Target : [ssh $SshCommand ] $*"
;;
esac
}
#------------------------------------------------------------------------------
NEW_BASE_CODE ()
#------------------------------------------------------------------------------
{
personnalkey=`NEW_PASSWORD 2 3`
#check code is unique
while cat $MoeDatabases | grep -qi "m$personnalkey" ; do
LOG_MESSAGE $LINENO "NEW_BASE_CODE: bad luck, the database code m$personnalkey is in use, shoot again"
personnalkey=`NEW_PASSWORD 2 3`
done
echo "m$personnalkey"
}
#------------------------------------------------------------------------------
NEW_USER_CODE ()
#------------------------------------------------------------------------------
{
personnalkey=`NEW_PASSWORD 2 3`
echo "code_$personnalkey"
echo "$1 code_$personnalkey" >> $MoeCodes
}
#------------------------------------------------------------------------------
GET_CODE ()
#------------------------------------------------------------------------------
{
if cat $MoeCodes | grep -iq "^$1" ; then
cat $MoeCodes | grep -i "^$1" | tail -n 1 | cut -f2
else
NEW_USER_CODE $1
fi
}
#------------------------------------------------------------------------------
LOOP_FOREVER ()
#------------------------------------------------------------------------------
{
LOG_MESSAGE $LINENO "Starting execution loop forever, use $0 --stop to break this loop"
while [ ! -f /tmp/moe.loop_control.status ] ; do
ToDo=`ls $MoeSpool`
if [ -z "$ToDo" ] ; then
LOG_MESSAGE -short "."
sleep $Pace
else
$0 --execute
sleep 2
fi
done
rm -f /tmp/moe.loop_control.status
LOG_MESSAGE $LINENO "Execution loop is stopped, use /usr/local/bin/moe --background to create this loop"
}
#------------------------------------------------------------------------------
NOT_LOOPING_ONLY ()
#------------------------------------------------------------------------------
{
runningprocesses=`/bin/ps axo pid,cmd`
if echo "$runningprocesses" | grep "$0" | grep -q "loop_forever" ; then
LOG_MESSAGE -short ":"
exit 0
fi
}
#------------------------------------------------------------------------------
STOP_LOOP ()
#------------------------------------------------------------------------------
{
runningprocesses=`/bin/ps axo pid,cmd`
if echo "$runningprocesses" | grep "$0" | grep -q "loop_forever" ; then
echo "please stop looping" > /tmp/moe.loop_control.status
LOG_MESSAGE $LINENO "Process loop is invited to stop"
fi
}
#------------------------------------------------------------------------------
CORRECT_CODE_ONLY ()
#------------------------------------------------------------------------------
{
given_mail="$1"
given_code="$2"
if [ -z "$given_code" ] ; then
RETURN_MESSAGE "Vous devez indiquer votre code personnel"
exit 0
fi
registered_code=`cat $MoeCodes | grep -i "^$given_mail" | tail -n 1 | cut -f2`
allowed_codes=`cat $MoeAdminCodes | grep "^allowed_code:" | cut -f2 | xargs | sed s/' '/'|'/g`
if [ -z "$allowed_codes" ] ; then
allowed_codes=`NEW_PASSWORD 64 64`
fi
if [ -z "$registered_code" ] ; then
RETURN_MESSAGE "Vous avez commis une erreur en indiquant votre mail ou votre code personnel. L'action demandée ne va pas être effectuée."
LOG_MESSAGE $LINENO "Access denied $Mail $Code E-mail not found"
exit 0
fi
case "$given_code" in
$allowed_codes)
given_code="$registered_code"
;;
esac
case "$registered_code" in
revoked)
RETURN_MESSAGE "Vous utilisez une adresse mail qui n'est plus autorisée. Contactez le support pour plus d'explications"
exit 0
;;
esac
case "$given_code" in
$registered_code)
;;
*)
RETURN_MESSAGE "Vous avez commis une erreur en indiquant votre mail ou votre code personnel. L'action demandée ne va pas être effectuée."
LOG_MESSAGE $LINENO "Access denied $Mail $Code Code is incorrect"
exit 0
;;
esac
}
#------------------------------------------------------------------------------
REVOKE_MAIL ()
#------------------------------------------------------------------------------
{
echo "$1 revoked" >> $MoeCodes
}
#------------------------------------------------------------------------------
UNREVOKE_MAIL ()
#------------------------------------------------------------------------------
{
unrevoked=`cat $MoeCodes | grep -v "^$1 revoked"`
echo "$unrevoked" > $MoeCodes
}
#------------------------------------------------------------------------------
ACTION ()
#------------------------------------------------------------------------------
{
ActionTemplate="#! /bin/bash
/usr/local/bin/moe --action $*
rm \$0
exit 0"
echo "$ActionTemplate" > $MoeSpool/action.${Code}$1.sh
chmod 755 $MoeSpool/action.${Code}$1.sh
LOG_MESSAGE $LINENO "action $1 $2 $3 is waiting in spool"
}
#------------------------------------------------------------------------------
RETURN_MESSAGE ()
#------------------------------------------------------------------------------
{
echo "
$*
"
}
#------------------------------------------------------------------------------
STATISTICS ()
#------------------------------------------------------------------------------
{
DatabasesList=`cat $MoeDatabases | grep -v "#"`
if [ -z "$MoocList" ] ; then
MoocList=`cat $MoeConfig | grep ^mooc_server: | cut -d: -f2 | xargs`
fi
TotalDatabases=0
TotalUnassigned=0
TotalAssigned=0
for mooc_server in $MoocList ; do
TotalServerDatabases=0
TotalServerUnassigned=0
TotalServerAssigned=0
for ((indexservice=1;indexservice<=$NbServicesPerVserver;indexservice=indexservice+1)) ; do
contract=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f2`
service="srv$indexservice-$contract"
NbDatabases=`echo "$DatabasesList" | cut -f3 | grep "$service" | wc -l`
NbUnassigned=`echo "$DatabasesList" | grep "^UNASSIGNED" | cut -f3 | grep "$service" | wc -l`
NbAssigned=`echo "$DatabasesList" | grep -v "^UNASSIGNED" | cut -f3 | grep "$service" | wc -l`
echo "Le service $service supporte $NbDatabases bases de données dont $NbAssigned utilisées et $NbUnassigned non attribuées"
TotalServerDatabases=`echo "$TotalServerDatabases + $NbDatabases" | bc`
TotalServerUnassigned=`echo "$TotalServerUnassigned + $NbUnassigned" | bc`
TotalServerAssigned=`echo "$TotalServerAssigned + $NbAssigned" | bc`
done
TotalDatabases=`echo "$TotalDatabases + $TotalServerDatabases" | bc`
TotalUnassigned=`echo "$TotalUnassigned + $TotalServerUnassigned" | bc`
TotalAssigned=`echo "$TotalAssigned + $TotalServerAssigned" | bc`
echo "--------------------------------------------------------------------------------------------"
echo "Le VDS $mooc_server supporte $TotalServerDatabases bases de données dont $TotalServerAssigned utilisées et $TotalServerUnassigned non attribuées"
echo ""
done
echo "==========================================================================================="
echo "Total hebergement de $TotalDatabases bases de donnees dont $TotalAssigned utilisees et $TotalUnassigned non attribuees"
echo ""
}
#------------------------------------------------------------------------------
NEW_DATABASE ()
#------------------------------------------------------------------------------
{
case "$Mail" in
UNASSIGNED)
databasetocreate="yes"
;;
*)
if cat $MoeDatabases | grep -qi "^$Mail" ; then
databasetocreate="no"
else
if cat $MoeDatabases | grep -q "^UNASSIGNED" ; then
databasetocreate="assign"
else
databasetocreate="yes"
fi
fi
;;
esac
DatabasesList=`cat $MoeDatabases | grep -v "#"`
case "${databasetocreate}" in
yes)
ServicesList=""
MoocList=`cat $MoeConfig | grep ^mooc_server: | cut -d: -f2 | xargs`
databasecreated=""
for mooc_server in $MoocList ; do
for ((indexservice=1;indexservice<=$NbServicesPerVserver;indexservice=indexservice+1)) ; do
contract=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f2`
service="srv$indexservice-$contract"
serverurl=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f5`
NbDatabases=`echo "$DatabasesList" | cut -f3 | grep "$service" | wc -l`
if [ $NbDatabases -lt $NbDatabasePerService ] ; then
MoocServer="$mooc_server"
DatabaseService="$service"
DatabaseNumber=`echo "$NbDatabases + 1" | bc`
DatabaseName=`NEW_BASE_CODE`
DatabaseUrl="srv$indexservice.$serverurl"
echo "$Mail $MoocServer $DatabaseService $DatabaseName $DatabaseUrl" >> $MoeDatabases
LOG_MESSAGE $LINENO "Create a new database $Mail $MoocServer $DatabaseService $DatabaseName"
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -restore -force $DatabaseService $DatabaseName $LocalReferenceData
#EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -save -no-history $DatabaseService $DatabaseName
databasecreated="done"
break
fi
done
case "$databasecreated" in
done)
break
;;
esac
done
case "$databasecreated" in
done)
;;
*)
LOG_MESSAGE $LINENO "Cannot find a free position for database request from $Mail"
case "$Mail" in
UNASSIGNED)
;;
*)
# créer une nouvelle demande dans le spool
$0 --database_ids $Mail $Code
;;
esac
;;
esac
;;
assign)
AssignedDatabase=`cat $MoeDatabases | grep -m 1 "^UNASSIGNED" | cut -f4`
DatabaseLine=`cat $MoeDatabases | grep " $AssignedDatabase " | tail -n 1`
MoocServer=`echo "$DatabaseLine" | cut -f2`
DatabaseService=`echo "$DatabaseLine" | cut -f3`
DatabaseName=`echo "$DatabaseLine" | cut -f4`
DatabaseUrl=`echo "$DatabaseLine" | cut -f5`
NewMoeDatabases=`cat $MoeDatabases | grep -v " $AssignedDatabase "`
mv $MoeDatabases $MoeDatabases.save
echo "$NewMoeDatabases" > $MoeDatabases
echo "$Mail $MoocServer $DatabaseService $DatabaseName $DatabaseUrl" >> $MoeDatabases
;;
no)
;;
esac
}
#------------------------------------------------------------------------------
DROP_DATABASE ()
#------------------------------------------------------------------------------
{
case "$Mail" in
*@*|UNASSIGNED)
if [ -z "$Service" ] ; then
DatabasesList=`cat $MoeDatabases | grep -v "#" | grep -i "^$Mail "`
else
DatabasesList=`cat $MoeDatabases | grep -v "#" | grep -i "^$Mail " | grep " $Service "`
fi
cp --backup=numbered $MoeDatabases $MoeDatabases.save
old_IFS=$IFS
IFS=$'\n'
for DatabaseLine in $DatabasesList ; do
IFS=$old_IFS
MoocServer=`echo "$DatabaseLine" | cut -f2`
DatabaseService=`echo "$DatabaseLine" | cut -f3`
DatabaseName=`echo "$DatabaseLine" | cut -f4`
DatabaseUrl=`echo "$DatabaseLine" | cut -f5`
NewMoeDatabases=`cat $MoeDatabases | grep -v " $DatabaseName "`
echo "$NewMoeDatabases" > $MoeDatabases
echo "#$Mail $MoocServer $DatabaseService $DatabaseName $DatabaseUrl" >> $MoeDatabases
chmod 777 $MoeDatabases
chmod 777 $MoeDatabases.save
LOG_MESSAGE $LINENO "Drop database $Mail $MoocServer $DatabaseService $DatabaseName"
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -drop -db $DatabaseService $DatabaseName
IFS=$'\n'
done
IFS=$old_IFS
;;
esac
}
#------------------------------------------------------------------------------
CHECK_DATABASE ()
#------------------------------------------------------------------------------
{
if [ -z "$MoocList" ] ; then
MoocList=`cat $MoeConfig | grep ^mooc_server: | cut -d: -f2 | xargs`
fi
TotalErrorCount=0
for mooc_server in $MoocList ; do
ErrorCount=0
for ((indexservice=1;indexservice<=$NbServicesPerVserver;indexservice=indexservice+1)) ; do
contract=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f2`
service="srv$indexservice-$contract"
DatabasesList=`cat $MoeDatabases | grep -v "#" | grep " $mooc_server " | grep " $service " | cut -f4 | xargs`
ExistingList=`EXECUTE_COMMAND $mooc_server /usr/local/bin/xoe --database -list -db $service`
for database in $DatabasesList ; do
if echo "$ExistingList" | grep -q " $database " ; then
echo "Server $mooc_server Service $service : la base $database est declaree et existe" >> $MoeReport
else
ErrorCount=`echo "$ErrorCount + 1" | bc`
echo "Server $mooc_server Service $service : la base $database est declaree et doit etre creee" >> $MoeReport
case "$Repair" in
yes)
echo "EXECUTE_COMMAND $mooc_server /usr/local/bin/xoe --database -restore -force $service $database $LocalReferenceData" >> $MoeReport
EXECUTE_COMMAND $mooc_server /usr/local/bin/xoe --database -restore -force $service $database $LocalReferenceData
;;
esac
fi
done
done
echo "--------------------------------------------------------------------------------------------" >> $MoeReport
echo "Nombre d'anomalies detectees sur $mooc_server : $ErrorCount" >> $MoeReport
echo "" >> $MoeReport
TotalErrorCount=`echo "$TotalErrorCount + $ErrorCount" | bc`
done
echo "==========================================================================================" >> $MoeReport
echo "Nombre Total d'anomalies detectees : $TotalErrorCount" >> $MoeReport
echo "" >> $MoeReport
}
#------------------------------------------------------------------------------
DECLARE_DATABASE ()
#------------------------------------------------------------------------------
{
if [ -z "$MoocList" ] ; then
MoocList=`cat $MoeConfig | grep ^mooc_server: | cut -d: -f2 | xargs`
fi
TotalErrorCount=0
for mooc_server in $MoocList ; do
ErrorCount=0
for ((indexservice=1;indexservice<=$NbServicesPerVserver;indexservice=indexservice+1)) ; do
contract=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f2`
service="srv$indexservice-$contract"
DatabasesList=`cat $MoeDatabases | grep -v "#" | grep " $mooc_server " | grep " $service " | cut -f4 | xargs`
ExistingList=`EXECUTE_COMMAND $mooc_server /usr/local/bin/xoe --database -list -db $service`
ExistingNames=`echo "$ExistingNames" | cut -d"|" -f1 `
for database in $ExistingNames ; do
if echo "$DatabaseList" | grep -q " $database " ; then
echo "Server $mooc_server Service $service : la base $database est declaree" >> $MoeReport
else
ErrorCount=`echo "$ErrorCount + 1" | bc`
echo "Server $mooc_server Service $service : la base $database existe et doit etre declaree" >> $MoeReport
case "$Repair" in
yes)
serverurl=`cat $MoeConfig | grep ^mooc_server:$mooc_server: | cut -f5`
DatabaseUrl="srv$indexservice.$serverurl"
echo "UNASSIGNED $mooc_server $service $database $DatabaseUrl" >> $MoeReport
echo "UNASSIGNED $mooc_server $service $database $DatabaseUrl" >> $MoeDatabases
;;
esac
fi
done
done
echo "--------------------------------------------------------------------------------------------" >> $MoeReport
echo "Nombre d'anomalies detectees sur $mooc_server : $ErrorCount" >> $MoeReport
echo "" >> $MoeReport
TotalErrorCount=`echo "$TotalErrorCount + $ErrorCount" | bc`
done
echo "==========================================================================================" >> $MoeReport
echo "Nombre Total d'anomalies detectees : $TotalErrorCount" >> $MoeReport
echo "" >> $MoeReport
}
#------------------------------------------------------------------------------
PARSING_DATABASE_LINE ()
#------------------------------------------------------------------------------
{
DatabaseLine=`cat $MoeDatabases | grep -i "^$Mail" | tail -n 1`
MoocServer=`echo "$DatabaseLine" | cut -f2`
DatabaseService=`echo "$DatabaseLine" | cut -f3`
DatabaseName=`echo "$DatabaseLine" | cut -f4`
DatabaseUrl=`echo "$DatabaseLine" | cut -f5`
}
#------------------------------------------------------------------------------
SEND_MAIL ()
#------------------------------------------------------------------------------
{
message_type="$1"
shift
case "$message_type" in
-error)
errortext="$*"
SenderMail=`cat $MoeConfig | grep ^mail:sender: | cut -f2-`
case "$MoeMode" in
local|remote|suspend)
ToMail=" -b `cat $MoeConfig | grep ^mail:admin: | cut -f2-` $Mail"
MailFlag=""
;;
test|redirect)
ToMail=`cat $MoeConfig | grep ^mail:test: | cut -f2-`
MailFlag="- Redirected from $Mail"
;;
esac
MessageSubject="[Mooc_ERP] Votre requete ne peut aboutir"
MessageText="Bonjour,
Vous avez soumis une demande sur le serveur du Mooc ERP.
Cependant, le serveur a rejete votre demande pour la raison suivante :
$errortext
$MoeContact
Nous vous souhaitons pleine reussite dans votre apprentissage.
"
echo "$MessageText" | mail -a "From: $SenderMail" -s "$MessageSubject $MailFlag" $ToMail
;;
-template)
templatename="$1"
SenderMail=`cat $MoeConfig | grep ^mail:sender: | cut -f2-`
case "$MoeMode" in
local|remote|suspend)
ToMail=" -b `cat $MoeConfig | grep ^mail:admin: | cut -f2-` $Mail"
MailFlag=""
;;
test|redirect)
ToMail=`cat $MoeConfig | grep ^mail:test: | cut -f2-`
MailFlag="- Redirected from $Mail"
;;
esac
mooc_url="mooc url $MoocServer"
login_url="$DatabaseUrl/web/login?db=$DatabaseName"
case "$templatename" in
send_code)
MessageSubject="[Mooc_ERP] Votre code personnel"
MessageText="Bonjour,
Vous avez soumis une demande de code personnel sur le serveur du Mooc ERP. Ce code personnel vous a ete attribue.
Votre adresse mail utilisee pour votre identification : $Mail
Votre code personnel : $Code
Ce code va vous permettre de creer votre espace personnel pour effectuer les exercices d'application du Mooc ERP en vous rendant sur la page :
http://mooc.odoo-online.fr
$MoeContact
Nous vous souhaitons pleine reussite dans votre apprentissage.
"
;;
revoke)
MessageSubject="[Mooc_ERP] Revocation de votre adresse mail"
MessageText="Bonjour,
Vous avez soumis une demande de bannissement d'une adresse mail sur le serveur du Mooc ERP.
L'adresse mail suivante ne sera plus jamais utilisee : $Mail
Si cette adresse mail etait utilisee sans votre consentement, nous vous prions de nous excuser pour la gene occasionnee.
Si vous recevez encore des messages de notre part, merci de contacter service.client@sisalp.fr.
$MoeContact
Nous vous souhaitons pleine reussite dans votre apprentissage.
"
;;
unrevoke)
MessageSubject="[Mooc_ERP] Revalidation de votre adresse mail"
MessageText="Bonjour,
Vous avez soumis une demande de revalidation d'une adresse mail dont vous aviez demande le bannissement sur le serveur du Mooc ERP.
Il semble que cette demande de bannissement etait due a une erreur ou a ete effectuee a votre insu. Elle a ete revalidee.
L'adresse mail suivante peut de nouveau etre utilisee : $Mail
$MoeContact
Nous vous souhaitons pleine reussite dans votre apprentissage.
"
;;
database_ids)
MessageSubject="[Mooc_ERP] Acces a votre espace personnel"
MessageText="Bonjour,
Vous avez soumis une demande de mise a dispostion d'un espace personnel sur le serveur du Mooc ERP. Cet espace personnel a ete cree.
Votre page de connexion personnelle : http://$login_url
Le nom de votre espace personnel (nom de la base de donnees) : $DatabaseName
Si le lien ci-dessus n'est pas actif, copiez le dans votre navigateur.
Si vous partagez votre poste avec d'autres utilisateurs, vous pouvez passer d'un espace personnel à l'autre sur la page
http://$DatabaseUrl/web/database/selector
en y indiquant le nom de votre base de donnees.
Les identifiants de connexion a votre espace personnel vous sont indiques dans le cours. La connexion en tant qu'administrateur de la base de donnees se fait en indiquant
- Courriel : admin
- Mot de passe : admin
$MoeContact
Nous vous souhaitons pleine reussite dans votre apprentissage.
"
;;
database_save)
MessageSubject="[Mooc_ERP] Sauvegarde de votre espace personnel"
MessageText="Bonjour,
Vous avez soumis une demande de sauvegarde de votre espace personnel sur le serveur du Mooc ERP. Cette sauvegarde a ete effectuee.
$MoeContact
Nous vous souhaitons pleine réussite dans votre apprentissage.
"
;;
database_restore)
MessageSubject="[Mooc_ERP] Restauration de votre espace personnel"
MessageText="Bonjour,
Vous avez soumis une demande de restauration de votre personnel sur le serveur du Mooc ERP. Cette restauration a ete effectuee.
$MoeContact
Nous vous souhaitons pleine réussite dans votre apprentissage.
"
;;
database_reset)
MessageSubject="[Mooc_ERP] Reinitialisation de votre espace personnel"
MessageText="Bonjour,
Vous avez soumis une demande de reinitialisation de votre espace personnel sur le serveur du Mooc ERP. Cette reinitialisation a ete effectuee.
$MoeContact
Nous vous souhaitons pleine réussite dans votre apprentissage.
"
;;
esac
echo "$MessageText" | mail -a "From: $SenderMail" -s "$MessageSubject $MailFlag" $ToMail
;;
esac
LOG_MESSAGE $LINENO "send mail $message_type $templatename code $Code db $DatabaseName to $Mail"
}
#------------------------------------------------------------------------------
DATABASE_EXISTS_ONLY ()
#------------------------------------------------------------------------------
{
if ! cat $MoeDatabases | grep -qi "^$Mail" ; then
LOG_MESSAGE "$LINENO Database of mail $Mail is not found"
SEND_MAIL -error "Vous devez d'abord creer votre base de donnees d'entrainement en demandant vos identifiants de connexion"
exit 0
fi
}
#------------------------------------------------------------------------------
SAVE_DATABASE ()
#------------------------------------------------------------------------------
{
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -save -no-history $DatabaseService $DatabaseName
}
#------------------------------------------------------------------------------
RESTORE_DATABASE ()
#------------------------------------------------------------------------------
{
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --restart $DatabaseService
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -restore -force $DatabaseService $DatabaseName $LocalReferenceData
}
#------------------------------------------------------------------------------
RESET_DATABASE ()
#------------------------------------------------------------------------------
{
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --restart $DatabaseService
EXECUTE_COMMAND $MoocServer /usr/local/bin/xoe --database -restore -force $DatabaseService $DatabaseName $LocalReferenceData
}
#------------------------------------------------------------------------------
CHECK_PERMISSIONS ()
#------------------------------------------------------------------------------
{
for directory in $MoeDir $MoeSpool $MoeData ; do
if [ ! -d $directory ] ; then
mkdir $directory
chmod 777 $directory
fi
done
for datafile in $MoeConfig $MoeCodes $MoeDatabases $MoeAdminCodes $MoeLogFile ; do
if [ ! -e $datafile ] ; then
echo "#$HOSTNAME|moe|`date +%A_%x-%H:%M:%S:%3N`|INFO |$CurrentUser|$$|$* initialization of $datafile" >> $datafile
chmod 777 $datafile
LOG_MESSAGE $LINENO "File $datafile is initialized"
fi
done
}
#------------------------------------------------------------------------------
#
Option="$1"
shift
ActionParameters="$*"
CHECK_PERMISSIONS
#LOG_MESSAGE $LINENO "$Option $*"
case "$Option" in
--code)
Mail="$1"
Code=`GET_CODE $Mail`
CORRECT_CODE_ONLY $Mail $Code
ACTION -send_code $Mail $Code
RETURN_MESSAGE "Vous allez recevoir votre code personnel par mail à l'adresse $Mail"
;;
#------------------------------------------------------------------------------
--revoke)
Mail="$1"
Code="$2"
CORRECT_CODE_ONLY $Mail $Code
ACTION -revoke $Mail $Code
RETURN_MESSAGE "Vous allez recevoir une derniere confirmation de votre action par mail à l'adresse $Mail"
;;
#------------------------------------------------------------------------------
--unrevoke)
Mail="$1"
Code="$2"
ACTION -unrevoke $Mail $Code
RETURN_MESSAGE "Vous allez recevoir une confirmation de votre action par mail à l'adresse $Mail"
;;
#------------------------------------------------------------------------------
--database_create)
DatabaseNumber="$1"
Code="z_admin"
ACTION -database_create $DatabaseNumber
RETURN_MESSAGE "$DatabaseNumber bases de donnees non assignees vont être creees"
;;
#------------------------------------------------------------------------------
--database_drop)
Mail="$1"
Service="$2"
Code="z_admin"
ACTION -database_drop $Mail $Service
RETURN_MESSAGE "Les bases de donnees non assignees vont être supprimees"
;;
#------------------------------------------------------------------------------
--database_check)
Parameters="$*"
Code="z_admin"
ACTION -database_check $Parameters
RETURN_MESSAGE "Les bases de donnees déclarées non créées vont être créées"
;;
#------------------------------------------------------------------------------
--database_declare)
Parameters="$*"
Code="z_admin"
ACTION -database_declare $Parameters
RETURN_MESSAGE "Les bases de donnees crées non déclarées vont être déclarées"
;;
#------------------------------------------------------------------------------
--database_ids)
Mail="$1"
Code="$2"
CORRECT_CODE_ONLY $Mail $Code
ACTION -database_ids $Mail $Code
RETURN_MESSAGE "Vous allez recevoir vos identifiants de connexion à votre base de données d'entrainement par mail à l'adresse $Mail"
;;
#------------------------------------------------------------------------------
--database_save)
Mail="$1"
Code="$2"
CORRECT_CODE_ONLY $Mail $Code
ACTION -database_save $Mail $Code
RETURN_MESSAGE "Vous allez recevoir une confirmation par mail à l'adresse $Mail quand l'opération de sauvegarde sera terminée"
;;
#------------------------------------------------------------------------------
--database_restore)
Mail="$1"
Code="$2"
CORRECT_CODE_ONLY $Mail $Code
ACTION -database_restore $Mail $Code
RETURN_MESSAGE "Vous allez recevoir une confirmation par mail à l'adresse $Mail quand l'opération de restauration sera terminée"
;;
#------------------------------------------------------------------------------
--database_reset)
Mail="$1"
Code="$2"
CORRECT_CODE_ONLY $Mail $Code
ACTION -database_reset $Mail $Code
RETURN_MESSAGE "Vous allez recevoir une confirmation par mail à l'adresse $Mail quand l'opération de ré-initialisation sera terminée"
;;
#------------------------------------------------------------------------------
--execute)
case "$MoeMode" in
local|remote|test|redirect)
for action in `ls $MoeSpool` ; do
$MoeSpool/$action
done
;;
*|suspend)
LOG_MESSAGE $LINENO "Mode is suspend, spooled actions are not executed"
;;
esac
;;
#------------------------------------------------------------------------------
--background)
NOT_LOOPING_ONLY
nohup $0 --loop_forever >> $MoeLogFile 2>&1 &
;;
#------------------------------------------------------------------------------
--loop_forever)
LOOP_FOREVER
;;
#------------------------------------------------------------------------------
--spool)
ls -lh $MoeSpool
;;
#------------------------------------------------------------------------------
--stop)
STOP_LOOP
;;
#------------------------------------------------------------------------------
--action)
Command="$1"
Mail="$2"
Code="$3"
case "$Command" in
-send_code)
SEND_MAIL -template send_code
;;
-revoke)
SEND_MAIL -template revoke
REVOKE_MAIL $Mail
;;
-unrevoke)
SEND_MAIL -template unrevoke
UNREVOKE_MAIL $Mail
;;
-database_create)
Mail="UNASSIGNED"
NumberToCreate="$2"
case "$2" in
[1-9]*)
for (( indexdatabase = 1 ; indexdatabase <= $NumberToCreate ; indexdatabase++ )) ; do
NEW_DATABASE
done
;;
esac
;;
-database_drop)
Service="$3"
#drop database corresponding to mail and service, all services if service is not indicated.
DROP_DATABASE
;;
-database_check)
shift
Repair="no"
case "$1" in
-repair)
Repair="yes"
shift
;;
esac
MoocList="$*"
CHECK_DATABASE
;;
-database_declare)
shift
Repair="no"
case "$1" in
-repair)
Repair="yes"
shift
;;
esac
MoocList="$*"
DECLARE_DATABASE
;;
-database_ids)
NEW_DATABASE
PARSING_DATABASE_LINE
SEND_MAIL -template database_ids
;;
-database_save)
DATABASE_EXISTS_ONLY
PARSING_DATABASE_LINE
SAVE_DATABASE
SEND_MAIL -template database_save
;;
-database_restore)
DATABASE_EXISTS_ONLY
PARSING_DATABASE_LINE
RESTORE_DATABASE
SEND_MAIL -template database_restore
;;
-database_reset)
DATABASE_EXISTS_ONLY
PARSING_DATABASE_LINE
RESET_DATABASE
SEND_MAIL -template database_reset
;;
esac
;;
#------------------------------------------------------------------------------
--report)
case "$1" in
-raz)
rm $MoeReport
;;
-live)
while [ ! -f $MoeReport ] ; do
sleep 1
done
tail -f $MoeReport
;;
*)
less $MoeReport
;;
esac
;;
#------------------------------------------------------------------------------
--info)
Mail="$1"
if [ -z "$Mail" ] ; then
less $MoeCodes
else
echo "Informations sur l'utilisateur $Mail :"
cat $MoeCodes | grep -i "$Mail"
cat $MoeDatabases | grep -i "$Mail"
echo "Historique de l'utilisateur $Mail :"
$0 --log | grep -i "$Mail"
fi
;;
#------------------------------------------------------------------------------
--statistics)
STATISTICS
;;
#------------------------------------------------------------------------------
--version)
echo ""
;;
#------------------------------------------------------------------------------
--config)
case `whoami` in
root)
cat $0 | grep -m 1 -B 100 "#EndConfig" | grep -A 100 "#StartConfig"
cat $MoeConfig
cat /etc/hosts
;;
esac
;;
#------------------------------------------------------------------------------
--log)
cat -n $MoeLogFile
;;
#------------------------------------------------------------------------------
--live)
tail -f $MoeLogFile
;;
#------------------------------------------------------------------------------
--keypass)
priviledgekey=`NEW_PASSWORD 13 2`
echo "allowed_code: adm_$priviledgekey" >> $MoeAdminCodes
echo "Your new admin access is adm_$priviledgekey"
;;
#------------------------------------------------------------------------------
--mode)
case "$1" in
test|local|remote|suspend|redirect)
echo "$1" > $MoeModeFile
;;
*)
echo -n "$MoeMode"
esac
;;
#------------------------------------------------------------------------------
--site_mode)
case "$1" in
maintenance|on)
echo "$1" > $MoeSiteModeFile
;;
*)
echo -n "$MoeSiteMode"
esac
;;
#------------------------------------------------------------------------------
--help)
echo "moe : gestion des bases de données d'entrainement des utilisateurs du mooc
syntaxe :
moe --command [parameters]
command :
--help
commands activated by internet user or administrator:
====================================================
--code mail_address #get personnal id code
--database_ids mail_address code #get database connexion ids
--database_reset mail_address code #reset database
--database_restore mail_address code #restore database
--database_save mail_address code #save database
--revoke mail_address code #blacklist an email address
previous commands generates scripts in $MoeSpool which invoke the following command :
--action -command mail_address code #execute the action requested by internet user
-command is in -send_code|-database-create|-database_ids|-database_save|-database_restore|-database_reset|-revoke
All scripts of the spool are executed periodically in loop activated or re-activated by crontab
--background #check the loop is active else restart it by --loop_forever
--execute #execute all spcripts in the pool
--loop_forever #loop forever on --execute command
commands for the administrator only:
===================================
--config #prints hardcoded parameters and context files
--database_create number_of_databases #create unassigned databases
--database_drop mail_address|UNASSIGNED [service] #drop databases on a service
--database_check [-repair][mooc_list] #check declared database are created
--database_declare [-repair][mooc_list] #check existing databases are declared
--unrevoke mail_address #revalidate an email address
--info [mail_address] #print user information
--keypass #get a code to supercede any user code
--licence #print licence
--live #print last lines and follow moe log file
--log #print moe log file
--mode [mode] #set moe execution mode (see below)
--report [-raz|-live] #report of background actions
--site_mode [mode] #set moe site execution mode (see below)
--spool #list waiting scripts in spool
--statistics #print statistics
--stop #stop the background loop
--version #print moe version
command --revoke can be used by the user or the administrator with a keypass code
Allowed codes in $MoeAdminCodes are used to by-pass user authentication
Moe execution modes are used for online maintenance:
local database and service are local,
remote database and service are remote,
test commands on databases are not executed and mail is sent to alternative test mail address
suspend background actions are delayed
redirect all mail traffic is redirected to administrator's mail box
Site execution modes are used for online maintenance:
maintenance web interface is closed,
on web site is operational
if mode is not indicated, moe returns current mode
Remote requires /etc/hosts to solve host names and key previously exchanged.
Parameters are located in $MoeConfig
"
cat $MoeConfig | grep -v "#"
$0 --version
;;
#------------------------------------------------------------------------------
--licence)
echo "This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Credits
2015-today: moe is an original work from SISalp, http://sisalp.fr"
;;
#------------------------------------------------------------------------------
*)
echo "503 Option $Option is not supported by moe command"
$0 --help
;;
#------------------------------------------------------------------------------
esac
exit 0