diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..1a17041
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,26 @@
+################################
+# Makefile
+################################
+
+SOURCE=schedule
+VERSION=2.0
+EOLE_VERSION=2.7
+EOLE_RELEASE=2.7.1
+PKGAPPS=web
+
+################################
+# Début de zone à ne pas éditer
+################################
+
+include eole.mk
+include apps.mk
+
+################################
+# Fin de zone à ne pas éditer
+################################
+
+# Makefile rules dedicated to application
+# if exists
+ifneq (, $(strip $(wildcard $(SOURCE).mk)))
+include $(SOURCE).mk
+endif
diff --git a/apps.mk b/apps.mk
new file mode 100644
index 0000000..1efe7df
--- /dev/null
+++ b/apps.mk
@@ -0,0 +1,64 @@
+#
+# NE PAS EDITER CE FICHIER
+#
+# Voir Makefile
+
+
+##########################
+# Application web envole #
+##########################
+ifneq (, $(filter oui web, $(PKGAPPS)))
+#
+# Sanity check
+#
+ifeq (, $(filter-out X.X, $(strip $(VERSION))))
+$(error $$(VERSION) variable has incorrect value '$(VERSION)')
+endif
+
+# Where to store web application files
+WEB_PATH := $(DESTDIR)/var/www/html
+
+# Envole
+sharenvole_PROG_DIR := $(DESTDIR)/usr/share/envole/$(SOURCE)
+
+src_$(SOURCE)-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)
+src_plugins-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/plugin
+src_lang-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/lang
+
+endif
+
+##########################
+# Application EOLE flask #
+##########################
+ifneq (, $(filter flask, $(PKGAPPS)))
+#
+# Sanity check
+#
+ifeq (, $(filter-out XXX, $(strip $(FLASK_MODULE))))
+$(error $$(FLASK_MODULE) variable has incorrect value '$(FLASK_MODULE)')
+endif
+
+ifeq (, $(strip $(wildcard src/$(FLASK_MODULE).conf)))
+$(error missing eoleflask configuration file 'src/$(FLASK_MODULE).conf')
+endif
+
+# Everything is related to mount point
+APPS_MOUNT_POINT := $(shell sed -ne 's|^"MOUNT_POINT"[[:space:]]*:[[:space:]]*"/\([^"]*\)",|\1|p' \
+ src/$(FLASK_MODULE).conf)
+
+ifeq (, $(strip $(APPS_MOUNT_POINT)))
+$(error no "MOUNT_POINT" in eoleflask configuration file 'src/$(FLASK_MODULE).conf')
+endif
+
+# eole-flask configuration
+src_DATA_DIR := $(DESTDIR)/etc/eole/flask/available
+
+# Where to store flask application files
+FLASK_PATH := $(eole_DIR)/flask/$(APPS_MOUNT_POINT)
+
+# static files
+src_$(FLASK_MODULE)_static_REC_DIR := $(FLASK_PATH)/static
+src_$(FLASK_MODULE)_templates_REC_DIR := $(FLASK_PATH)/templates
+src_$(FLASK_MODULE)_instance_REC_DIR := $(FLASK_PATH)/resources
+
+endif
diff --git a/dicos/25_schedule.xml b/dicos/25_schedule.xml
index 6231424..2dc1095 100644
--- a/dicos/25_schedule.xml
+++ b/dicos/25_schedule.xml
@@ -6,14 +6,14 @@
- schedule-apps
+
schedule
-
-
+
+
@@ -22,9 +22,6 @@
oui
-
- ApiKeyschedule
-
@@ -48,7 +45,6 @@
non
schedule
schedule
- schedule_api_key
@@ -69,8 +65,6 @@
schedule_dbpass
schedule_allow_hosts
-
-
diff --git a/eole.mk b/eole.mk
new file mode 100644
index 0000000..9730365
--- /dev/null
+++ b/eole.mk
@@ -0,0 +1,231 @@
+#
+# NE PAS EDITER CE FICHIER
+#
+# Utiliser .mk à inclure à la fin de Makefile
+
+#################
+# Sanity checks #
+#################
+
+ifeq (, $(DESTDIR))
+$(warning $$(DESTDIR) is empty, installation will be done in /)
+endif
+
+ifeq (, $(filter-out XXX-XXX, $(strip $(SOURCE))))
+$(error $$(SOURCE) variable has incorrect value '$(SOURCE)')
+endif
+
+ifeq (, $(filter-out 2.X, $(strip $(EOLE_VERSION))))
+$(error $$(EOLE_VERSION) variable has incorrect value '$(EOLE_VERSION)')
+endif
+
+ifeq (, $(filter-out 2.X.Y, $(strip $(EOLE_RELEASE))))
+$(error $$(EOLE_RELEASE) variable has incorrect value '$(EOLE_RELEASE)')
+endif
+
+#########################
+# Variables definitions #
+#########################
+
+INSTALL := install
+INSTALL_DATA := install -m 644
+INSTALL_PROGRAM := install -m 755
+INSTALL_DIRECTORY := install -m 755 -d
+INSTALL_RECURSIVE := cp -dr --no-preserve=ownership
+
+# Standard path
+bin_PROG_DIR := $(DESTDIR)/usr/bin
+sbin_PROG_DIR := $(DESTDIR)/usr/sbin
+man8_DATA_DIR := $(DESTDIR)/usr/share/man/fr.UTF-8/man8
+
+# Base
+eole_DIR := $(DESTDIR)/usr/share/eole
+
+ifeq ($(strip $(EOLE_VERSION)), 2.3)
+diagnose_PROG_DIR := $(eole_DIR)/diagnose/module
+else
+diagnose_PROG_DIR := $(eole_DIR)/diagnose/
+endif
+
+# Creole
+creole_DIR := $(eole_DIR)/creole
+dicos_DATA_DIR := $(creole_DIR)/dicos
+tmpl_DATA_DIR := $(creole_DIR)/distrib
+preservice_PROG_DIR := $(eole_DIR)/preservice
+pretemplate_PROG_DIR := $(eole_DIR)/pretemplate
+posttemplate_PROG_DIR := $(eole_DIR)/posttemplate
+postservice_PROG_DIR := $(eole_DIR)/postservice
+ifeq ($(strip $(EOLE_VERSION)), 2.3)
+firewall_DATA_DIR := $(eole_DIR)/firewall
+endif
+bacula_restore_DATA_DIR := $(eole_DIR)/bacula/restore
+bareos_restore_DATA_DIR := $(eole_DIR)/bareos/restore
+bacula_fichier_DATA_DIR := $(DESTDIR)/etc/bacula/baculafichiers.d
+bareos_fichier_DATA_DIR := $(DESTDIR)/etc/bareos/bareosfichiers.d
+ifeq ($(strip $(EOLE_VERSION)), 2.3)
+schedule_pre_PROG_DIR := $(eole_DIR)/schedule/pre
+schedule_post_PROG_DIR := $(eole_DIR)/schedule/post
+else
+schedule_scripts_PROG_DIR := $(eole_DIR)/schedule/scripts
+endif
+extra_REC_DIR := $(creole_DIR)/extra
+
+# Zéphir
+zephir_DATA_DIR := $(DESTDIR)/usr/share/zephir
+zephir_configs_DATA_DIR := $(zephir_DATA_DIR)/monitor/configs
+zephir_srv_DATA_DIR := $(zephir_configs_DATA_DIR)/services
+zephir_scripts_PROG_DIR := $(zephir_DATA_DIR)/scripts
+
+# SSO
+sso_DATA_DIR := $(DESTDIR)/usr/share/sso
+sso_filtres_DATA_DIR := $(sso_DATA_DIR)/app_filters
+sso_user-info_DATA_DIR := $(sso_DATA_DIR)/user_infos
+
+# EAD
+ead_DATA_DIR := $(DESTDIR)/usr/share/ead2/backend/config
+ead_actions_DATA_DIR := $(ead_DATA_DIR)/actions
+ead_perms_DATA_DIR := $(ead_DATA_DIR)/perms
+ead_roles_DATA_DIR := $(ead_DATA_DIR)/roles
+
+# Program libraries goes under /usr/lib//
+lib_$(SOURCE)_DATA_DIR := $(DESTDIR)/usr/lib/$(SOURCE)
+
+# Scripts Eole
+scripts_PROG_DIR := $(eole_DIR)/sbin
+lib_eole_DATA_DIR := $(DESTDIR)/usr/lib/eole
+
+# LDAP
+ldap_passwords_DATA_DIR := $(eole_DIR)/annuaire/password_files
+
+# LXC
+lxc_DATA_DIR := $(eole_DIR)/lxc
+lxc_fstab_DATA_DIR := $(lxc_DATA_DIR)/fstab
+lxc_hosts_DATA_DIR := $(lxc_DATA_DIR)/hosts
+
+# SQL
+sql_DATA_DIR := $(eole_DIR)/mysql/$(SOURCE)
+sql_gen_DATA_DIR := $(sql_DATA_DIR)/gen
+sql_updates_DATA_DIR := $(sql_DATA_DIR)/updates
+
+sql_conf_gen_DATA_DIR := $(eole_DIR)/applications/gen
+sql_conf_passwords_DATA_DIR := $(eole_DIR)/applications/passwords
+sql_conf_updates_DATA_DIR := $(eole_DIR)/applications/updates/$(SOURCE)
+
+# EoleDB sql directory
+db_DIR := $(eole_DIR)/db
+db_gen_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/gen
+db_updates_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/updates
+
+# Certifs
+certs_DATA_DIR := $(eole_DIR)/certs
+
+# Logrotate
+logrotate_DATA_DIR := $(DESTDIR)/etc/logrotate.d
+
+# Cron
+cron_PROG_DIR := $(DESTDIR)/etc/cron.daily
+
+# Python modules
+ifneq ($(DESTDIR),)
+PYTHON_OPTS := --root $(DESTDIR)
+endif
+
+# Translation
+TRANSLATION_SRC := translation
+TRANSLATION_DEST := $(DESTDIR)/usr/share/locale
+PO_FILES = $(wildcard $(TRANSLATION_SRC)/*/*.po)
+MO_FOLDERS = $(addprefix $(TRANSLATION_DEST), $(addsuffix LC_MESSAGES,$(subst $(TRANSLATION_SRC),,$(dir $(PO_FILES)))))
+
+#############################################
+# Common directories and files installation #
+#############################################
+
+all:
+
+$(MO_FOLDERS):
+ $(INSTALL_DIRECTORY) $@
+
+$(PO_FILES): $(MO_FOLDERS)
+ msgfmt -o $(TRANSLATION_DEST)$(subst $(TRANSLATION_SRC),,$(addsuffix LC_MESSAGES,$(dir $@)))/$(notdir $(@:.po=.mo)) $@
+
+install-lang: $(PO_FILES)
+
+install:: install-dirs install-files install-lang
+
+# $1 = command to run
+# $2 = source directory
+# $3 = destination directory
+define fc_install_file
+ if [ -d $2 ]; then \
+ for file in `ls -1 $2/`; do \
+ $1 $2/$$file $3 || true; \
+ done; \
+ fi
+endef
+
+##
+## Directory creation
+##
+
+# use % to catch local name in $*
+# data, program and recursive directory require a corresponding
+# directory in local sources
+%_DATA_DIR %_PROG_DIR %REC_DIR:
+ test ! -d $(subst _,/,$*) || $(INSTALL_DIRECTORY) $($@)
+
+# Create the directory referenced by the variable without a local one.
+%_DIR:
+ @: # do nothing
+
+##
+## Install files present directly under data, program and recursive directories
+##
+
+# $* : name of variable
+# $($*): value of variable
+%-instdata:
+ $(call fc_install_file, $(INSTALL_DATA), $(subst _,/,$(subst _DATA_DIR,,$*)), $($*))
+
+%-instprog:
+ $(call fc_install_file, $(INSTALL_PROGRAM), $(subst _,/,$(subst _PROG_DIR,,$*)), $($*))
+
+%-instrec:
+ $(call fc_install_file, $(INSTALL_RECURSIVE), $(subst _,/,$(subst _REC_DIR,,$*)), $($*))
+
+
+# Use second expansion as variables may be created in included
+# Makefiles
+.SECONDEXPANSION:
+
+# List of all directories
+installdirs_LIST = $(foreach V, $(filter %_DIR, $(.VARIABLES)), \
+ $(if $(filter file, $(origin $(V))), \
+ $(V)))
+# List of data directories
+installdata_LIST = $(filter %_DATA_DIR, $(installdirs_LIST))
+# List of program directories
+installprog_LIST = $(filter %_PROG_DIR, $(installdirs_LIST))
+# List of recursive directories
+installrec_LIST = $(filter %_REC_DIR, $(installdirs_LIST))
+
+# Expand directories to create as dependency
+# Use double-colon to permit user to define additionnal install-dirs
+install-dirs:: $$(installdirs_LIST)
+
+# Expand files to install as dependency
+# Use double-colon to permit user to define additionnal install-files
+install-files:: install-data-files install-prog-files install-rec-dirs
+
+install-data-files: $$(patsubst %,%-instdata,$$(installdata_LIST))
+
+install-prog-files: $$(patsubst %,%-instprog,$$(installprog_LIST))
+
+install-rec-dirs: $$(patsubst %,%-instrec,$$(installrec_LIST))
+
+# Installation of python modules
+ifeq ($(shell test -f setup.py && echo 0), 0)
+install-files::
+ python setup.py install --no-compile --install-layout=deb $(PYTHON_OPTS)
+endif
+
+.PHONY: install install-dirs install-files install-data-files install-prog-files install-rec-dirs
diff --git a/postservice/25-schedule b/postservice/25-schedule
index 0318e42..b2ab326 100755
--- a/postservice/25-schedule
+++ b/postservice/25-schedule
@@ -1,2 +1,2 @@
#!/bin/bash
-CreoleRun "/var/www/html/ninegate/scripts/reconfigure.sh" web
\ No newline at end of file
+CreoleRun "/var/www/html/schedule/scripts/reconfigure.sh" web
\ No newline at end of file
diff --git a/pretemplate/25-schedule b/pretemplate/25-schedule
new file mode 100755
index 0000000..e7eb48b
--- /dev/null
+++ b/pretemplate/25-schedule
@@ -0,0 +1,3 @@
+#!/bin/bash
+CreoleRun "/var/www/html/schedule/scripts/genkey.sh" web
+exit 0
\ No newline at end of file
diff --git a/src/schedule-2.0/scripts/.env.model b/src/schedule-2.0/scripts/.env.model
new file mode 100644
index 0000000..32372c0
--- /dev/null
+++ b/src/schedule-2.0/scripts/.env.model
@@ -0,0 +1,48 @@
+# In all environments, the following files are loaded if they exist,
+# the latter taking precedence over the former:
+#
+# * .env contains default values for the environment variables needed by the app
+# * .env.local uncommitted file with local overrides
+# * .env.$APP_ENV committed environment-specific defaults
+# * .env.$APP_ENV.local uncommitted environment-specific overrides
+#
+# Real environment variables win over .env files.
+#
+# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
+#
+# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
+# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
+
+###> symfony/framework-bundle ###
+APP_SECRET=52c1cb88ee822cd2643abe29e16a68a6
+#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
+#TRUSTED_HOSTS='^(localhost|example\.com)$'
+###< symfony/framework-bundle ###
+
+###> symfony/mailer ###
+# MAILER_DSN=smtp://localhost
+###< symfony/mailer ###
+
+###< doctrine/doctrine-bundle ###
+
+# Basic
+APP_ALIAS=schedule
+APP_AUTH=MYSQL
+APP_NAME=Schedule
+APP_ENV=PROD
+APP_CRON=false
+
+# BDD
+DATABASE_NAME=
+DATABASE_USER=
+DATABASE_PASSWORD=
+DATABASE_HOST=
+
+# If APP_AUTH = CAS
+CAS_HOST=
+CAS_PORT=
+CAS_PATH=
+CAS_USERNAME=username
+CAS_EMAIL=email
+CAS_LASTNAME=lastname
+CAS_FIRSTNAME=firstname
diff --git a/src/schedule-2.0/scripts/genkey.sh b/src/schedule-2.0/scripts/genkey.sh
new file mode 100755
index 0000000..6b1c718
--- /dev/null
+++ b/src/schedule-2.0/scripts/genkey.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+if [ ! -f /var/www/html/schedule/.key ]; then
+ cat /dev/urandom | tr -dc '_A-Za-z0-9' | head -c${1:-32} > /var/www/html/schedule/.key
+fi
diff --git a/src/schedule-2.0/scripts/reconfigure.sh b/src/schedule-2.0/scripts/reconfigure.sh
index b6b4767..872c076 100755
--- a/src/schedule-2.0/scripts/reconfigure.sh
+++ b/src/schedule-2.0/scripts/reconfigure.sh
@@ -5,6 +5,11 @@ cd /var/www/html/schedule
# Déclaration d'un proxy
. proxy.sh
+# Mise en place du fichier d'environnement model
+if [ ! -f /var/www/html/schedule/.env ]; then
+ mv /var/www/html/schedule/scripts/.env.model /var/www/html/schedule/.env
+fi
+
# Installation des dépendances composer
composer install
diff --git a/tmpl/schedule-env.local b/tmpl/schedule-env.local
index 52044b3..31f3ab6 100644
--- a/tmpl/schedule-env.local
+++ b/tmpl/schedule-env.local
@@ -1,6 +1,6 @@
# Basic = Redefine local
APP_ENV=prod
-APP_SECRET=%%schedule_api_key
+APP_SECRET=%%pwdreader("","/var/www/html/schedule/.key")
APP_AUTH=CAS