dockerisation
This commit is contained in:
parent
dfb8eb6236
commit
cda63eddba
51
.env
Normal file
51
.env
Normal file
@ -0,0 +1,51 @@
|
||||
# Symfony
|
||||
APP_ENV=PROD
|
||||
APP_SECRET=changemeinenvlocal
|
||||
#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)$'
|
||||
|
||||
|
||||
# Basic
|
||||
APP_WEBURL=localhost:8000
|
||||
APP_AUTH=OAUTH
|
||||
APP_ALIAS=/
|
||||
APP_NAME=Ninegitea
|
||||
APP_CRON=1
|
||||
APP_ADMINS='["admin"]'
|
||||
|
||||
|
||||
# GITEA
|
||||
GITEA_URL=https://forge.cadoles.com
|
||||
|
||||
# OAUTH
|
||||
OAUTH_CLIENTID=b7797320-d5ca-45f8-9aa1-8aae8fb9b229
|
||||
OAUTH_CLIENTSECRET=gto_aguhtokmdl7mmplfox3fgk5wnaoraaqgd4suj5yghmgxh4aszhtq
|
||||
OAUTH_LOGINURL=https://forge.cadoles.com/login/oauth/authorize
|
||||
OAUTH_LOGOUTURL=https://forge.cadoles.com/user/logout
|
||||
OAUTH_TOKENURL=https://forge.cadoles.com/login/oauth/access_token
|
||||
|
||||
# BDD
|
||||
DATABASE_HOST=mariadb
|
||||
DATABASE_NAME=ninegitea
|
||||
DATABASE_USER=user
|
||||
DATABASE_PASSWORD=changeme
|
||||
|
||||
|
||||
|
||||
# MAIL sendmail / smtp
|
||||
MAILER_METHOD=sendmail
|
||||
MAILER_URL=
|
||||
MAILER_NOREPLY=noreply@noreply.fr
|
||||
|
||||
|
||||
# WEBSOCKET
|
||||
WSS_USE=0
|
||||
WSS_PORT=5588
|
||||
|
||||
|
||||
# Proxy
|
||||
PROXY_USE=0
|
||||
PROXY_HOST=
|
||||
PROXY_PORT=
|
||||
|
||||
|
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
###> symfony/framework-bundle ###
|
||||
/.env.local
|
||||
/.env.local.php
|
||||
/.env.*.local
|
||||
/docker-compose.override.yml
|
||||
/config/secrets/prod/prod.decrypt.private.php
|
||||
/public/bundles/
|
||||
/var/
|
||||
/vendor/
|
||||
###< symfony/framework-bundle ###
|
||||
|
||||
###> symfony/phpunit-bridge ###
|
||||
.phpunit
|
||||
.phpunit.result.cache
|
||||
/phpunit.xml
|
||||
###< symfony/phpunit-bridge ###
|
||||
|
||||
###> symfony/webpack-encore-bundle ###
|
||||
/node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
###< symfony/webpack-encore-bundle ###
|
||||
|
||||
.key
|
||||
/scripts/proxy.sh
|
||||
/uploads
|
||||
!/public/uploads/avatar
|
||||
/public/uploads/avatar/*
|
||||
!/public/uploads/avatar/admin.jpg
|
||||
!/public/uploads/avatar/noavatar.jpg
|
||||
!/public/uploads/avatar/system.jpg
|
||||
!/public/uploads/avatar
|
||||
/public/uploads/logo/*
|
||||
!/public/uploads/logo/logo.png
|
||||
/public/uploads/ckeditor
|
26
Makefile
26
Makefile
@ -1,26 +0,0 @@
|
||||
################################
|
||||
# Makefile
|
||||
################################
|
||||
|
||||
SOURCE=ninegitea
|
||||
VERSION=1.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
|
231
README.md
231
README.md
@ -1,231 +0,0 @@
|
||||
# Renommer le squelette
|
||||
## Dupliquer nineskeletor et renommer en nineXXXX
|
||||
Puis effectuer les changement suivants
|
||||
- Renommer db/nineskeletor-create-0.sql en db/nineXXXX-create-0.sql
|
||||
- Modifier db/nineXXXX-create-0.sql et changer le nom de la base de données en nineXXXX
|
||||
- Renommer dicos/90_nineskeletor.xml en dicos/90_nineXXXX.xml
|
||||
- Modifier dicos/nineXXXX-nineXXXX.xml et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer logrotate/nineskeletor en logrotate/nineXXXX
|
||||
- Modifier logrotate/nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer postservice/90-nineskeletor en postservice/90-nineXXXX
|
||||
- Modifier postservice/90-nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer pretemplate/25-nineskeletor en pretemplate/25-nineXXXX
|
||||
- Modifier pretemplate/25-nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer src/nineskeletor-1.0 en src/nineXXXX-1.0
|
||||
- Modifier src/nineXXXX-1.0/webpack.config.js et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer sso/filtres/nineskeletor.ini en sso/filtres/nineXXXX.ini
|
||||
- Renommer sso/filtres/nineskeletor_apps.ini en sso/filtres/nineXXXX_apps.ini
|
||||
- Modifier sso/filtres/nineXXXX_apps.ini et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer tmpl/nineskeletor.cron en tmpl/nineXXXX.cron
|
||||
- Modifier tmpl/nineXXXX.cron et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer tmpl/nineskeletor-apache.conf en tmpl/nineXXXX-apache.conf
|
||||
- Modifier tmpl/nineXXXX-apache.conf et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer tmpl/nineskeletor-db.yml en tmpl/nineXXXX-db.yml
|
||||
- Modifier tmpl/nineXXXX-db.yml et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer tmpl/nineskeletor-env.local en tmpl/nineXXXX-env.local
|
||||
- Modifier tmpl/nineXXXX-env.local et remplacer tout les nineskeletor en nineXXXX
|
||||
- Renommer tmpl/nineskeletor-proxy.sh en tmpl/nineXXXX-proxy.sh
|
||||
- Modifier Makefile et remplacer tout les nineskeletor en nineXXXX
|
||||
- Remplacer logo public/uploads/logo/logo.png
|
||||
|
||||
## Compilier les asset
|
||||
- apt-get install npm
|
||||
- si proxy
|
||||
- npm config set proxy "http://monproxyurl:monproxyport"
|
||||
- npm config set https-proxy "http://monproxyurl:monproxyport"
|
||||
- npm install -g yarn
|
||||
- yarn install
|
||||
- yarn encore dev
|
||||
- yarn encore prod
|
||||
|
||||
# Description du squelette
|
||||
|
||||
## Bundle
|
||||
- DebugBundle
|
||||
- DoctrineBundle
|
||||
- DoctrineMigrationsBundle
|
||||
- FOSCKEditorBundle
|
||||
- FOSRestBundle
|
||||
- FrameworkBundle
|
||||
- KnpSnappyBundle
|
||||
- MakerBundle
|
||||
- MonologBundle
|
||||
- NelmioApiDocBundle
|
||||
- OneupUploaderBundle
|
||||
- SecurityBundle
|
||||
- SensioFrameworkExtraBundle
|
||||
- SwiftmailerBundle
|
||||
- TetranzSelect2EntityBundle
|
||||
- TwigBundle
|
||||
- TwigExtraBundle
|
||||
- WebProfilerBundle
|
||||
- WebpackEncoreBundle
|
||||
- ramsey/uuid
|
||||
- cboden/ratchet
|
||||
|
||||
|
||||
|
||||
## Asset
|
||||
|
||||
### Tag app
|
||||
- jQuery = https://www.npmjs.com/package/jquery
|
||||
- jqueryui = https://www.npmjs.com/package/jqueryui
|
||||
- bootstrap = https://www.npmjs.com/package/bootstrap
|
||||
- timepicki = https://www.npmjs.com/package/timepicki
|
||||
- datatables.net-bs4 = https://www.npmjs.com/package/datatables.net-bs4
|
||||
- fontawsome-free = https://www.npmjs.com/package/@fortawesome/fontawesome-free
|
||||
- bs-stepper = https://www.npmjs.com/package/bs-stepper
|
||||
- masonry-layout = https://www.npmjs.com/package/masonry-layout
|
||||
- react-slick = https://www.npmjs.com/package/react-slick
|
||||
- image-loaded = https://www.npmjs.com/package/image-loaded
|
||||
- moment = https://www.npmjs.com/package/moment
|
||||
- select2 = https://www.npmjs.com/package/select2
|
||||
- crop-select-js = https://www.npmjs.com/package/crop-select-js
|
||||
- spectrum-colorpicker2 = https://www.npmjs.com/package/spectrum-colorpicker2
|
||||
|
||||
|
||||
|
||||
### Tag fullcalendar
|
||||
- @fullcalendar/core = https://www.npmjs.com/package/@fullcalendar/core
|
||||
- @fullcalendar/interaction = https://www.npmjs.com/package/@fullcalendar/interaction
|
||||
- @fullcalendar/daygrid = https://www.npmjs.com/package/@fullcalendar/daygrid
|
||||
|
||||
### Tag dropzone
|
||||
- dropzone = https://www.npmjs.com/package/dropzone
|
||||
|
||||
|
||||
|
||||
## Parameters
|
||||
|
||||
Provient du template env.local
|
||||
- appEnv = PROD
|
||||
- appSecret = valeur du fichier .key autogénéré au premier reconfigure
|
||||
- appWeburl = Valeur du dicos web_url
|
||||
- appAuth = Valeur du dicos = CAS / SQL
|
||||
- appAlias = En dur l'alias web
|
||||
- appName = Nom de l'application
|
||||
- appCron = En dur à true pour activer le système de cron
|
||||
- appMasteridentity = Valeur du dicos = Ninegate / LDAP / SQL
|
||||
- appMasterurl = Si appMasteridentity la valeur du dicos correspondant à l'url du Ninegate maître
|
||||
- appMasterkey = Si appMasteridentity la valeur du dicos correspondant à la clé d'API du Ninegate maître
|
||||
- databaseName = En dur le nom de la base
|
||||
- databaseUser = En dur le user de la base
|
||||
- databasePassword = Autogénéré par le reconfigure
|
||||
- databaseHost = Valeur du dicos pour le host de la base
|
||||
- appMailmethod = Valeur du dicos soit sendmail soit smtp. sendmail par défaut si exim est activé sur le serveur
|
||||
- appMailurl = Si smtp url calculé combinant smtphost smtpport smtpencryption smtpauthmode smtpuser smtppwd
|
||||
- appMailnoreply = Valeur du dicos du noreplay
|
||||
- ldapModel = si masteridentity à LDAP soit open soit scribe
|
||||
- ldapHost = Valeur dicos Host LDAP
|
||||
- ldapPort = Valeur dicos Port LDAP
|
||||
- ldapUser = Valeur dicos User LDAP
|
||||
- ldapPassword = Valeur dicos Password LDAP
|
||||
- ldapBasedn = Valeur dicos Basedn LDAP
|
||||
- ldapUsername = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme username
|
||||
- ldapFirstname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme firstname
|
||||
- ldapLastname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme lastname
|
||||
- ldapEmail = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme email
|
||||
- ldapFiltergroup = si Scribe en dur sinon valeur du dicos filtre ldap de recherche des groupes
|
||||
- ldapFilteruser = si Scribe en dur sinon valeur du dicos filtre ldap des groupes
|
||||
- ldapAdmins = Liste des admins obligatoire = Admin + valeur dicos
|
||||
- casHost = Valeur dicos du host SSO
|
||||
- casPort = Valeur dicos du Porst SSO
|
||||
- casPath = Valeur dicos du Path SSO
|
||||
- casUsername = Valeur en dur correspondant au filtre sso du username
|
||||
- casEmail = Valeur en dur correspondant au filtre sso du email
|
||||
- casLastname = Valeur en dur correspondant au filtre sso du lastname
|
||||
- casFirstname = Valeur en dur correspondant au filtre sso du fistname
|
||||
- proxyUse = Valeur dicos utiliser oui/non un proxy
|
||||
- proxyHost = Si oui valeurs du dicos du host proxy
|
||||
- proxyPort = Si oui valeurs du dicos du post proxy
|
||||
- sondeUse = Valeur dicos utiliser oui/non une sonde statistique
|
||||
- sondeUrl = Si oui url de la sonde statistique
|
||||
|
||||
## Sécurité
|
||||
|
||||
4 rôles possibles
|
||||
- ROLE_ADMIN
|
||||
- ROLE_MODO
|
||||
- ROLE_MASTER
|
||||
- ROLE_USER
|
||||
|
||||
4 routes protégés
|
||||
- /user = accèssible à ROLE_USER / ROLE_MASTER / ROLE_MODO / ROLE_ADMIN
|
||||
- /master = accèssible à ROLE_MASTER / ROLE_MODO / ROLE_ADMIN
|
||||
- /modo = = accèssible à ROLE_MODO / ROLE_ADMIN
|
||||
- /admin = = accèssible à ROLE_ADMIN
|
||||
|
||||
## Job
|
||||
|
||||
Nineskeletor intègre un système de job.
|
||||
Ce système va exécuter des commandes symfony à interval régulier.
|
||||
De base les jobs suivants sont livrés :
|
||||
- app:sendMail = toutes les minutes = Execution du spool de mail en attente
|
||||
- app:dumpBdd = toutes les nuits à 2h00 = Dump de la base
|
||||
- app:purgeFile = toutes les nuits à 3h00 = Suppresion des fichiers obsolètes
|
||||
- app:synchroUsers = toutes les nuites à 3h00 = Synchronisation des comptes utilisateurs soit via LDAP soit via Ninegate
|
||||
|
||||
Pour ajouter un job à la listes, modifier la commande app:initCron qui sera exécutée à chaque reconfigure
|
||||
|
||||
## Service
|
||||
|
||||
- app.password.encoder = encodage password sur la methode que l'annuaire
|
||||
- app.upload.listener = action à réaliser sur upload via oneupload
|
||||
- app.upload.samename = permet d'uploader un fichier et préserver le nom de fichier via oneupload
|
||||
- app.ldap.service = fonction ldap
|
||||
- app.sendmail.transport = executuion du spool de mail via sendmail
|
||||
- app.mail.service = fonction envoit de mail
|
||||
- app.twig.extension = extention twig
|
||||
|
||||
|
||||
## Twig
|
||||
|
||||
### Twig Constantes
|
||||
|
||||
Variables globales twig reprises des parametres symfony
|
||||
- appAlias
|
||||
- appAuth
|
||||
- appName
|
||||
- appCron
|
||||
- appMasteridentity
|
||||
- sondeUse
|
||||
- sondeUrl
|
||||
|
||||
### Twig Extention
|
||||
|
||||
App\Twig\AppExtension
|
||||
- filtre = urlAvatar à placer avec user.avatar afin de définir l'url complète de l'avatar du user
|
||||
|
||||
### Twig Template de base
|
||||
|
||||
#### templates/base.html.twig
|
||||
|
||||
Deux paramétres non obligatoire
|
||||
- useheader = permet d'afficher ou non la bannière dans la page = false par défaut
|
||||
- usesidebar = permet d'afficher oun non la sidebar dans la page = false par défaut
|
||||
- usemonocolor = afin de placer uniquement la couleur dark sur la page
|
||||
Block
|
||||
- block encorelinktags = pour déclarer des encore_link_tags spécifique à la page (encorelinktags app est intégré de base)
|
||||
- block localstyle = pour déclarer des propriétés css spécifique à page (Include/style.css.twig est intégré de base)
|
||||
- block body = le corps de la page
|
||||
- block encorescripttags pour déclarer des encore_script_tags spécifique à la page (encorescripttags app est intégré de base)
|
||||
- block localjavascript = pour déclarer du js spécifique à la page (Include/javascript.js.twig est intégré de base)
|
||||
|
||||
#### templates/Include/style.css.twig
|
||||
|
||||
Style de l'applicaiton en surcouche de bootstrap
|
||||
|
||||
#### templates/Include/sidebar.html.twig
|
||||
|
||||
La sidebar de l'application quand elle est affichée
|
||||
|
||||
#### templates/Include/javascript.js.twig
|
||||
|
||||
Librairie js de l'application
|
||||
|
||||
- object a et button s'ils ont un attribut data-method et data_confirm proposeront une confirmation à l'utilisateur avant de poursuivre l'action
|
||||
- ModalLoad(idmodal,titre,url) = permet d'afficher en modal l'url indiqué en parametre. Par défaut on dispose de la modal #mymodal
|
||||
|
||||
#### templates/Form/fields.htms.twig
|
||||
|
||||
Mise en forme de champs de formulaire
|
64
apps.mk
64
apps.mk
@ -1,64 +0,0 @@
|
||||
#
|
||||
# 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
|
21
assets/js/dropzone.js
Normal file
21
assets/js/dropzone.js
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
require('dropzone/dist/dropzone.css');
|
||||
const { Dropzone } = require("dropzone");
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var elt = document.getElementById('mydropzone');
|
||||
maxFiles=elt.getAttribute("data-maxFiles");
|
||||
if(maxFiles!=1) maxFiles=null;
|
||||
|
||||
var mydropzone = new Dropzone(elt, {
|
||||
acceptedMimeTypes: $(elt).data("acceptedMimeTypes"),
|
||||
maxFiles: maxFiles,
|
||||
init: function() {
|
||||
dropzoneinit(this);
|
||||
},
|
||||
success: function( file, response ){
|
||||
dropzonesuccess(file,response);
|
||||
},
|
||||
});
|
||||
window.mydropzone=mydropzone;
|
||||
});
|
98
composer.json
Normal file
98
composer.json
Normal file
@ -0,0 +1,98 @@
|
||||
{
|
||||
"type": "project",
|
||||
"license": "proprietary",
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*",
|
||||
"cboden/ratchet": "^0.4.3",
|
||||
"doctrine/annotations": "^1.8",
|
||||
"friendsofsymfony/ckeditor-bundle": "^2.2",
|
||||
"friendsofsymfony/rest-bundle": "^3.0",
|
||||
"jasig/phpcas": "^1.3",
|
||||
"knplabs/knp-snappy-bundle": "^1.7",
|
||||
"mashape/unirest-php": "^3.0",
|
||||
"nategood/httpful": "^0.3.2",
|
||||
"nelmio/api-doc-bundle": "^3.6",
|
||||
"oneup/uploader-bundle": "^3.0",
|
||||
"ramsey/uuid": "^4.1",
|
||||
"sensio/framework-extra-bundle": "^5.1",
|
||||
"symfony/apache-pack": "^1.0",
|
||||
"symfony/asset": "5.1.*",
|
||||
"symfony/console": "5.1.*",
|
||||
"symfony/dotenv": "5.1.*",
|
||||
"symfony/expression-language": "5.1.*",
|
||||
"symfony/flex": "^1.3.1",
|
||||
"symfony/form": "5.1.*",
|
||||
"symfony/framework-bundle": "5.1.*",
|
||||
"symfony/http-client": "5.1.*",
|
||||
"symfony/intl": "5.1.*",
|
||||
"symfony/lock": "5.1.*",
|
||||
"symfony/mailer": "5.1.*",
|
||||
"symfony/maker-bundle": "^1.14",
|
||||
"symfony/monolog-bundle": "^3.5",
|
||||
"symfony/orm-pack": "^1.0",
|
||||
"symfony/process": "5.1.*",
|
||||
"symfony/profiler-pack": "^1.0",
|
||||
"symfony/security-bundle": "5.1.*",
|
||||
"symfony/serializer-pack": "*",
|
||||
"symfony/swiftmailer-bundle": "^3.4",
|
||||
"symfony/translation": "5.1.*",
|
||||
"symfony/twig-pack": "*",
|
||||
"symfony/validator": "5.1.*",
|
||||
"symfony/web-link": "5.1.*",
|
||||
"symfony/webpack-encore-bundle": "^1.7",
|
||||
"symfony/yaml": "5.1.*",
|
||||
"tetranz/select2entity-bundle": "^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/debug-pack": "*",
|
||||
"symfony/test-pack": "*"
|
||||
},
|
||||
"config": {
|
||||
"preferred-install": {
|
||||
"*": "dist"
|
||||
},
|
||||
"sort-packages": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"App\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"replace": {
|
||||
"paragonie/random_compat": "2.*",
|
||||
"symfony/polyfill-ctype": "*",
|
||||
"symfony/polyfill-iconv": "*",
|
||||
"symfony/polyfill-php71": "*",
|
||||
"symfony/polyfill-php70": "*",
|
||||
"symfony/polyfill-php56": "*"
|
||||
},
|
||||
"scripts": {
|
||||
"auto-scripts": {
|
||||
"cache:clear": "symfony-cmd",
|
||||
"cache:clear --env=prod": "symfony-cmd",
|
||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||
},
|
||||
"post-install-cmd": [
|
||||
"@auto-scripts"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@auto-scripts"
|
||||
]
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/symfony": "*"
|
||||
},
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": true,
|
||||
"require": "5.1.*"
|
||||
}
|
||||
}
|
||||
}
|
21
config/packages/framework.yaml
Normal file
21
config/packages/framework.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
framework:
|
||||
secret: '%env(APP_SECRET)%'
|
||||
#csrf_protection: true
|
||||
#http_method_override: true
|
||||
|
||||
# Enables session support. Note that the session will ONLY be started if you read or write from it.
|
||||
# Remove or comment this section to explicitly disable session support.
|
||||
session:
|
||||
name: '%env(APP_NAME)%'
|
||||
handler_id: null
|
||||
gc_probability: null
|
||||
cookie_secure: auto
|
||||
cookie_samesite: lax
|
||||
|
||||
esi: true
|
||||
#fragments: true
|
||||
php_errors:
|
||||
log: true
|
||||
|
||||
|
||||
validation: { enable_annotations: true }
|
@ -1,5 +0,0 @@
|
||||
|
||||
|
||||
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
|
||||
CREATE DATABASE ninegitea DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||
|
@ -1,170 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<creole>
|
||||
<files>
|
||||
<file filelist='ninegitea' name='/etc/eole/eole-db.d/ninegitea-db.yml' rm='True' mkdir='True'/>
|
||||
<file filelist='ninegitea_nginx' name='/etc/nginx/web.d/ninegitea.conf' source='ninegitea-nginx.conf' rm='True' mkdir='True' />
|
||||
</files>
|
||||
|
||||
<containers>
|
||||
<container name='web'>
|
||||
<!--
|
||||
<package>ninegitea-apps</package>
|
||||
-->
|
||||
|
||||
<!-- service de configuration apache -->
|
||||
<service method="apache" servicelist="ninegitea">ninegitea</service>
|
||||
|
||||
<!-- template -->
|
||||
<file filelist='ninegitea' name='/etc/apache2/sites-available/ninegitea' source='ninegitea-apache.conf' />
|
||||
<file filelist='ninegitea' name='/var/www/html/ninegitea/.env.local' source='ninegitea-env.local' rm='True'/>
|
||||
<file filelist='ninegitea' name='/etc/cron.d/ninegitea' source='ninegitea.cron' rm='True'/>
|
||||
</container>
|
||||
</containers>
|
||||
|
||||
<variables>
|
||||
<family name='ninegitea'>
|
||||
<variable name="ninegate_test_ninegate" type="oui/non" hidden='True' exists='False'><value>non</value></variable>
|
||||
<variable name="activer_revprox" type="oui/non" description="Activer le reverse proxy Nginx" hidden='True' exists='False'><value>non</value></variable>
|
||||
|
||||
<variable name='activer_ninegitea' type='oui/non' description='Activer Ninegitea'>
|
||||
<value>oui</value>
|
||||
</variable>
|
||||
|
||||
<variable type='string' name='ninegitea_gitea_url' description="Gitea URL" mandatory='True' />
|
||||
|
||||
<variable type='string' name='ninegitea_oauth_clientid' description="oAuth Client ID" mandatory='True' />
|
||||
<variable type='string' name='ninegitea_oauth_clientsecret' description="oAuth Client Secret" mandatory='True' />
|
||||
<variable type='string' name='ninegitea_oauth_loginurl' description="oAuth Client Login URL" mandatory='True' />
|
||||
<variable type='string' name='ninegitea_oauth_logouturl' description="oAuth Client Logout URL" mandatory='True' />
|
||||
<variable type='string' name='ninegitea_oauth_tokenurl' description="oAuth Client Token URL" mandatory='True' />
|
||||
|
||||
|
||||
<!-- EMAIL -->
|
||||
<variable type='string' name='ninegitea_noreply' description='Adresse mail utilisé pour le noreply' mandatory='True' />
|
||||
<variable type="oui/non" name='ninegitea_activer_localmail' description="Utiliser le serveur d'envoi de mail local" mandatory='True'>
|
||||
<value>oui</value>
|
||||
</variable>
|
||||
<variable type='string' name='ninegitea_smtphost' description='Host du serveur SMTP' mandatory='True' />
|
||||
<variable type='string' name='ninegitea_smtpport' description='Port du serveur SMTP' mandatory='True' />
|
||||
<variable type='string' name='ninegitea_smtpuser' description='Compte du serveur SMTP' mandatory='True' />
|
||||
<variable type='string' name='ninegitea_smtppwd' description='Mot de passe associé du compte SMTP' mandatory='True' />
|
||||
<variable type='string' name='ninegitea_smtpencryption' description='Type Encryptage du serveur SMTP' mandatory='True' />
|
||||
<variable type='string' name='ninegitea_smtpauthmode' description='Mode Authentification du serveur SMTP' mandatory='True' />
|
||||
|
||||
|
||||
<!-- BDD -->
|
||||
<variable type='string' name='ninegitea_db_mode' description='Serveur de bases de données à utiliser' mode='expert'/>
|
||||
<variable type='string' name='ninegitea_dbserver' description='Adresse du serveur de base de données' mode='expert'/>
|
||||
<variable type='number' name='ninegitea_dbport' description="Port d'écoute du serveur de base de données" mode='expert'/>
|
||||
<variable type='string' name='ninegitea_allow_hosts' description="Hôtes autorisés à utiliser la base de données" multi='True' mode='expert'/>
|
||||
<variable type='string' name='ninegitea_dbuser' description='Utilisateur du serveur de base de données' mode='expert'/>
|
||||
<variable type='string' name='ninegitea_dbpass' description='Fichier de mot de passe du serveur' mode='expert'/>
|
||||
</family>
|
||||
|
||||
<separators>
|
||||
<separator name="ninegitea_noreply">Paramètres associés aux Mails</separator>
|
||||
<separator name="ninegitea_db_mode">Paramètres associés à la Base de Données</separator>
|
||||
</separators>
|
||||
</variables>
|
||||
|
||||
<constraints>
|
||||
<!-- AFFICHAGE EN FONCTION DE APACHE -->
|
||||
<condition name='hidden_if_in' source='activer_apache'>
|
||||
<param>non</param>
|
||||
<target type='filelist'>ninegitea</target>
|
||||
<target type='filelist'>ninegitea_nginx</target>
|
||||
<target type='servicelist'>ninegitea</target>
|
||||
</condition>
|
||||
|
||||
<!-- AFFICHAGE EN FONCTION DE REVERSE PROXY -->
|
||||
<condition name='hidden_if_in' source='activer_revprox'>
|
||||
<param>non</param>
|
||||
<target type='filelist'>ninegitea_nginx</target>
|
||||
</condition>
|
||||
|
||||
<!-- AFFICHAGE EN FONCTION DE ninegitea -->
|
||||
<condition name='hidden_if_in' source='activer_ninegitea'>
|
||||
<param>non</param>
|
||||
|
||||
<target type='variable'>ninegitea_gitea_url</target>
|
||||
<target type='variable'>ninegitea_oauth_clientid</target>
|
||||
<target type='variable'>ninegitea_oauth_clientsecret</target>
|
||||
<target type='variable'>ninegitea_oauth_loginurl</target>
|
||||
<target type='variable'>ninegitea_oauth_logouturl</target>
|
||||
<target type='variable'>ninegitea_oauth_tokenurl</target>
|
||||
|
||||
<target type='variable'>ninegitea_noreply</target>
|
||||
<target type='variable'>ninegitea_activer_localmail</target>
|
||||
<target type='variable'>ninegitea_smtphost</target>
|
||||
<target type='variable'>ninegitea_smtpport</target>
|
||||
<target type='variable'>ninegitea_smtpuser</target>
|
||||
<target type='variable'>ninegitea_smtppwd</target>
|
||||
<target type='variable'>ninegitea_smtpencryption</target>
|
||||
<target type='variable'>ninegitea_smtpauthmode</target>
|
||||
|
||||
<target type='variable'>ninegitea_db_mode</target>
|
||||
<target type='variable'>ninegitea_dbserver</target>
|
||||
<target type='variable'>ninegitea_dbport</target>
|
||||
<target type='variable'>ninegitea_allow_hosts</target>
|
||||
<target type='variable'>ninegitea_dbuser</target>
|
||||
<target type='variable'>ninegitea_dbpass</target>
|
||||
|
||||
<target type='filelist'>ninegitea</target>
|
||||
<target type='filelist'>ninegitea_nginx</target>
|
||||
<target type='servicelist'>ninegitea</target>
|
||||
</condition>
|
||||
|
||||
<!-- AFFICHAGE EN FONCTION DU MAIL -->
|
||||
<fill name='concat' target='ninegitea_noreply'>
|
||||
<param>noreply@</param>
|
||||
<param type='eole'>domaine_messagerie_etab</param>
|
||||
</fill>
|
||||
|
||||
<condition name='hidden_if_in' source='ninegitea_activer_localmail'>
|
||||
<param>oui</param>
|
||||
|
||||
<target type='variable'>ninegitea_smtphost</target>
|
||||
<target type='variable'>ninegitea_smtpport</target>
|
||||
<target type='variable'>ninegitea_smtpuser</target>
|
||||
<target type='variable'>ninegitea_smtppwd</target>
|
||||
<target type='variable'>ninegitea_smtpencryption</target>
|
||||
<target type='variable'>ninegitea_smtpauthmode</target>
|
||||
</condition>
|
||||
|
||||
|
||||
<!-- AFFICHAGE EN FONCTION DU MODE DE BDD -->
|
||||
<condition name='disabled_if_in' source='ninegitea_db_mode'>
|
||||
<param>local</param>
|
||||
<target type='variable'>ninegitea_dbserver</target>
|
||||
<target type='variable'>ninegitea_dbuser</target>
|
||||
<target type='variable'>ninegitea_dbport</target>
|
||||
<target type='variable'>ninegitea_dbpass</target>
|
||||
</condition>
|
||||
<condition name='disabled_if_in' source='ninegitea_db_mode'>
|
||||
<param>default</param>
|
||||
<target type='variable'>ninegitea_dbserver</target>
|
||||
<target type='variable'>ninegitea_dbuser</target>
|
||||
<target type='variable'>ninegitea_dbport</target>
|
||||
<target type='variable'>ninegitea_dbpass</target>
|
||||
<target type='variable'>ninegitea_allow_hosts</target>
|
||||
</condition>
|
||||
|
||||
|
||||
<!-- VALID EMUN DES DIFFRENTES COMBO -->
|
||||
<check name='valid_enum' target='ninegitea_smtpencryption'>
|
||||
<param>['tls', 'ssl', 'null']</param>
|
||||
</check>
|
||||
<check name='valid_enum' target='ninegitea_smtpauthmode'>
|
||||
<param>['plain', 'login', 'cram-md5', 'null']</param>
|
||||
</check>
|
||||
|
||||
<check name='valid_enum' target='ninegitea_db_mode'>
|
||||
<param>['default', 'externe', 'local']</param>
|
||||
</check>
|
||||
|
||||
</constraints>
|
||||
|
||||
<help>
|
||||
<variable name='activer_ninegitea'>Application kanban gitea</variable>
|
||||
</help>
|
||||
</creole>
|
29
docker-compose.yml
Normal file
29
docker-compose.yml
Normal file
@ -0,0 +1,29 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb
|
||||
container_name: ninegitea-mariadb
|
||||
restart: always
|
||||
ports:
|
||||
- "3306:3306"
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: changeme
|
||||
MYSQL_DATABASE: ninegitea
|
||||
MYSQL_USER: user
|
||||
MYSQL_PASSWORD: changeme
|
||||
volumes:
|
||||
- mariadb-data:/var/lib/mysql
|
||||
|
||||
ninegitea:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./misc/docker/Dockerfile
|
||||
container_name: ninegitea-app
|
||||
image: reg.cadoles.com/envole/ninegitea
|
||||
ports:
|
||||
- "8000:80"
|
||||
|
||||
volumes:
|
||||
mariadb-data:
|
||||
|
231
eole.mk
231
eole.mk
@ -1,231 +0,0 @@
|
||||
#
|
||||
# NE PAS EDITER CE FICHIER
|
||||
#
|
||||
# Utiliser <appli>.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/<PROGRAM>/
|
||||
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
|
@ -1,13 +0,0 @@
|
||||
/var/www/html/ninegitea/var/log/*.log {
|
||||
su root www-data
|
||||
daily
|
||||
rotate 7
|
||||
size 900
|
||||
maxage 7
|
||||
compress
|
||||
dateext
|
||||
dateformat -%Y%m%d
|
||||
missingok
|
||||
create 644 www-data www-data
|
||||
}
|
||||
|
18
misc/docker/Dockerfile
Normal file
18
misc/docker/Dockerfile
Normal file
@ -0,0 +1,18 @@
|
||||
FROM reg.cadoles.com/envole/nineapache:7.4
|
||||
RUN apk add mariadb-client
|
||||
|
||||
RUN composer self-update --1
|
||||
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
|
||||
RUN yarn install
|
||||
RUN yarn encore dev
|
||||
RUN yarn encore prod
|
||||
|
||||
RUN mkdir -p /app/public/uploads
|
||||
RUN chown apache /app/public/uploads -R
|
||||
RUN chmod u+w /app/public/uploads -R
|
||||
|
||||
CMD /app/misc/script/reconfigure.sh && /etc/apache2/apache2.sh
|
||||
#CMD /etc/apache2/apache2.sh
|
15
misc/script/reconfigure.sh
Executable file
15
misc/script/reconfigure.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -eo pipefail
|
||||
|
||||
# Se positionner sur la racine du projet
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
cd ${DIR}
|
||||
cd ../..
|
||||
DIR=$(pwd)
|
||||
|
||||
# Installation des dépendances composer
|
||||
composer install --no-interaction
|
||||
|
||||
bin/console d:s:u --force --complete
|
||||
|
||||
exec $@
|
44
package.json
Normal file
44
package.json
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@symfony/webpack-encore": "^0.28.2",
|
||||
"core-js": "^3.0.0",
|
||||
"regenerator-runtime": "^0.13.2",
|
||||
"webpack-notifier": "^1.6.0"
|
||||
},
|
||||
"license": "UNLICENSED",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev-server": "encore dev-server",
|
||||
"dev": "encore dev",
|
||||
"watch": "encore dev --watch",
|
||||
"build": "encore production --progress"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^5.12.1",
|
||||
"@fullcalendar/core": "^4.4.0",
|
||||
"@fullcalendar/daygrid": "^4.4.0",
|
||||
"@fullcalendar/interaction": "^4.4.0",
|
||||
"@ttskch/select2-bootstrap4-theme": "^1.3.2",
|
||||
"bootstrap": "^4.4.1",
|
||||
"bs-stepper": "^1.7.0",
|
||||
"ckeditor": "^4.12.1",
|
||||
"crop-select-js": "^1.0.1",
|
||||
"datatables.net-bs4": "^1.10.20",
|
||||
"dropzone": "^6.0.0-beta.2",
|
||||
"encore": "^0.0.30-beta",
|
||||
"imagesloaded": "^4.1.4",
|
||||
"jquery": "^3.4.1",
|
||||
"jquery.flot": "^0.8.3",
|
||||
"jqueryui": "^1.11.1",
|
||||
"masonry-layout": "^4.2.2",
|
||||
"moment": "^2.24.0",
|
||||
"morris.js": "^0.5.0",
|
||||
"popper.js": "^1.16.1",
|
||||
"raphael": "^2.3.0",
|
||||
"select2": "^4.0.13",
|
||||
"slick-carousel": "^1.8.1",
|
||||
"spectrum-colorpicker2": "^2.0.0",
|
||||
"tempusdominus-core": "^5.0.3",
|
||||
"timepicki": "^2.0.1"
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
#!/bin/bash
|
||||
CreoleRun "/var/www/html/ninegitea/scripts/reconfigure.sh" web
|
@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
CreoleRun "/var/www/html/ninegitea/scripts/genkey.sh" web
|
||||
exit 0
|
1
public/build/0.577458bf.js
Normal file
1
public/build/0.577458bf.js
Normal file
File diff suppressed because one or more lines are too long
28
public/build/1.14e9dd6b.css
Normal file
28
public/build/1.14e9dd6b.css
Normal file
File diff suppressed because one or more lines are too long
493
public/build/1.1a68acdd.js
Normal file
493
public/build/1.1a68acdd.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/2.483c24c4.css
Normal file
1
public/build/2.483c24c4.css
Normal file
File diff suppressed because one or more lines are too long
59
public/build/2.81db2cb1.js
Normal file
59
public/build/2.81db2cb1.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/3.2af3a9ae.js
Normal file
1
public/build/3.2af3a9ae.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/3.986bb952.css
Normal file
1
public/build/3.986bb952.css
Normal file
@ -0,0 +1 @@
|
||||
@keyframes passing-through{0%{opacity:0;transform:translateY(40px)}30%,70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-40px)}}@keyframes slide-in{0%{opacity:0;transform:translateY(40px)}30%{opacity:1;transform:translateY(0)}}@keyframes pulse{0%{transform:scale(1)}10%{transform:scale(1.1)}20%{transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:1px solid rgba(0,0,0,.8);border-radius:5px;padding:20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-message{text-align:center;margin:3em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(180deg,#eee,#ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{transition:opacity .2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid hsla(0,0%,78.4%,.8);background-color:hsla(0,0%,100%,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:hsla(0,0%,100%,.4);padding:0 .4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{transform:scale(1.05);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{animation:passing-through 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;animation:slide-in 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px;background:rgba(0,0,0,.8);border-radius:50%}.dropzone .dz-preview .dz-error-mark svg,.dropzone .dz-preview .dz-success-mark svg{display:block;width:54px;height:54px;fill:#fff}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;transition:all .2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;transition:opacity .4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:20px;top:50%;margin-top:-10px;left:15%;right:15%;border:3px solid rgba(0,0,0,.8);background:rgba(0,0,0,.8);border-radius:10px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#fff;display:block;position:relative;height:100%;width:0;transition:width .3s ease-in-out;border-radius:17px}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;transition:opacity .3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#b10606;padding:.5em 1em;color:#fff}.dropzone .dz-preview .dz-error-message:after{content:"";position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #b10606}
|
1
public/build/app.14c7e47f.js
Normal file
1
public/build/app.14c7e47f.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/ckeditor/contents.css
Normal file
1
public/build/ckeditor/contents.css
Normal file
@ -0,0 +1 @@
|
||||
body{font-family:sans-serif,Arial,Verdana,Trebuchet MS,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:12px;color:#333;background-color:#fff;margin:20px}.cke_editable{font-size:13px;line-height:1.6;word-wrap:break-word}blockquote{font-style:italic;font-family:Georgia,Times,Times New Roman,serif;padding:2px 0;border:0 solid #ccc}.cke_contents_ltr blockquote{padding-left:20px;padding-right:8px;border-left-width:5px}.cke_contents_rtl blockquote{padding-left:8px;padding-right:20px;border-right-width:5px}a{color:#0782c1}dl,ol,ul{*margin-right:0;padding:0 40px}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.2}hr{border:0;border-top:1px solid #ccc}img.right{float:right;margin-left:15px}img.left,img.right{border:1px solid #ccc;padding:5px}img.left{float:left;margin-right:15px}pre{white-space:pre-wrap;word-wrap:break-word;-moz-tab-size:4;tab-size:4}.marker{background-color:#ff0}span[lang]{font-style:italic}figure{text-align:center;outline:1px solid #ccc;background:rgba(0,0,0,.05);padding:10px;margin:10px 20px;display:inline-block}figure>figcaption{text-align:center;display:block}a>img{padding:1px;margin:1px;border:none;outline:1px solid #0782c1}.code-featured{border:5px solid red}.math-featured{padding:20px;box-shadow:0 0 2px #c80000;background-color:rgba(255,0,0,.05);margin:10px}.image-clean{border:0;background:none;padding:0}.image-clean>figcaption{font-size:.9em;text-align:right}.image-grayscale{background-color:#fff;color:#666}.image-grayscale img,img.image-grayscale{filter:grayscale(100%)}.embed-240p{max-width:426px;max-height:240px;margin:0 auto}.embed-360p{max-width:640px;max-height:360px;margin:0 auto}.embed-480p{max-width:854px;max-height:480px;margin:0 auto}.embed-720p{max-width:1280px;max-height:720px;margin:0 auto}.embed-1080p{max-width:1920px;max-height:1080px;margin:0 auto}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user