diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..342c898d04047e5151526b4531fd4a245c329206 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +CHANGELOG +========= + +1.0.0 (19/09/2019) +------------------ + +### Ajout + +- Embryon d'application. diff --git a/Dockerfile b/Dockerfile index fdd316aeea813b395a66127ee4092a42ab82dc99..61f7e518666f10f3b47cd80441bb0db9603ba068 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,3 @@ -########################################################################################### -# -# Image pour le dev. -# -########################################################################################### - ARG PHP_VERSION FROM unicaen-dev-php${PHP_VERSION}-apache @@ -18,8 +12,7 @@ ENV APACHE_CONF_DIR=/etc/apache2 \ ## Installation de packages requis. RUN apt-get update -qq && \ apt-get install -y \ - sqlite3 \ - php${PHP_VERSION}-pdo-sqlite + php${PHP_VERSION}-pgsql # Nettoyage RUN apt-get autoremove -y && apt-get clean && rm -rf /tmp/* /var/tmp/* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..a9a8acf5df671e66e28847e9c24ddbd214e4ecfc --- /dev/null +++ b/LICENSE @@ -0,0 +1,549 @@ + CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL + +Version 2.1 du 2013-06-21 + + + Avertissement + +Ce contrat est une licence de logiciel libre issue d'une concertation +entre ses auteurs afin que le respect de deux grands principes préside à +sa rédaction: + + * d'une part, le respect des principes de diffusion des logiciels + libres: accès au code source, droits étendus conférés aux utilisateurs, + * d'autre part, la désignation d'un droit applicable, le droit + français, auquel elle est conforme, tant au regard du droit de la + responsabilité civile que du droit de la propriété intellectuelle et + de la protection qu'il offre aux auteurs et titulaires des droits + patrimoniaux sur un logiciel. + +Les auteurs de la licence CeCILL (Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +sont: + +Commissariat à l'énergie atomique et aux énergies alternatives - CEA, +établissement public de recherche à caractère scientifique, technique et +industriel, dont le siège est situé 25 rue Leblanc, immeuble Le Ponant +D, 75015 Paris. + +Centre National de la Recherche Scientifique - CNRS, établissement +public à caractère scientifique et technologique, dont le siège est +situé 3 rue Michel-Ange, 75794 Paris cedex 16. + +Institut National de Recherche en Informatique et en Automatique - +Inria, établissement public à caractère scientifique et technologique, +dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153 +Le Chesnay cedex. + + + Préambule + +Ce contrat est une licence de logiciel libre dont l'objectif est de +conférer aux utilisateurs la liberté de modification et de +redistribution du logiciel régi par cette licence dans le cadre d'un +modèle de diffusion en logiciel libre. + +L'exercice de ces libertés est assorti de certains devoirs à la charge +des utilisateurs afin de préserver ce statut au cours des +redistributions ultérieures. + +L'accessibilité au code source et les droits de copie, de modification +et de redistribution qui en découlent ont pour contrepartie de n'offrir +aux utilisateurs qu'une garantie limitée et de ne faire peser sur +l'auteur du logiciel, le titulaire des droits patrimoniaux et les +concédants successifs qu'une responsabilité restreinte. + +A cet égard l'attention de l'utilisateur est attirée sur les risques +associés au chargement, à l'utilisation, à la modification et/ou au +développement et à la reproduction du logiciel par l'utilisateur étant +donné sa spécificité de logiciel libre, qui peut le rendre complexe à +manipuler et qui le réserve donc à des développeurs ou des +professionnels avertis possédant des connaissances informatiques +approfondies. Les utilisateurs sont donc invités à charger et tester +l'adéquation du logiciel à leurs besoins dans des conditions permettant +d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus +généralement, à l'utiliser et l'exploiter dans les mêmes conditions de +sécurité. Ce contrat peut être reproduit et diffusé librement, sous +réserve de le conserver en l'état, sans ajout ni suppression de clauses. + +Ce contrat est susceptible de s'appliquer à tout logiciel dont le +titulaire des droits patrimoniaux décide de soumettre l'exploitation aux +dispositions qu'il contient. + +Une liste de questions fréquemment posées se trouve sur le site web +officiel de la famille des licences CeCILL +(http://www.cecill.info/index.fr.html) pour toute clarification qui +serait nécessaire. + + + Article 1 - DEFINITIONS + +Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une +lettre capitale, auront la signification suivante: + +Contrat: désigne le présent contrat de licence, ses éventuelles versions +postérieures et annexes. + +Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code +Source et le cas échéant sa documentation, dans leur état au moment de +l'acceptation du Contrat par le Licencié. + +Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et +éventuellement de Code Objet et le cas échéant sa documentation, dans +leur état au moment de leur première diffusion sous les termes du Contrat. + +Logiciel Modifié: désigne le Logiciel modifié par au moins une +Contribution. + +Code Source: désigne l'ensemble des instructions et des lignes de +programme du Logiciel et auquel l'accès est nécessaire en vue de +modifier le Logiciel. + +Code Objet: désigne les fichiers binaires issus de la compilation du +Code Source. + +Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur +sur le Logiciel Initial. + +Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le +Contrat. + +Contributeur: désigne le Licencié auteur d'au moins une Contribution. + +Concédant: désigne le Titulaire ou toute personne physique ou morale +distribuant le Logiciel sous le Contrat. + +Contribution: désigne l'ensemble des modifications, corrections, +traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans +le Logiciel par tout Contributeur, ainsi que tout Module Interne. + +Module: désigne un ensemble de fichiers sources y compris leur +documentation qui permet de réaliser des fonctionnalités ou services +supplémentaires à ceux fournis par le Logiciel. + +Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce +Module et le Logiciel s'exécutent dans des espaces d'adressage +différents, l'un appelant l'autre au moment de leur exécution. + +Module Interne: désigne tout Module lié au Logiciel de telle sorte +qu'ils s'exécutent dans le même espace d'adressage. + +GNU GPL: désigne la GNU General Public License dans sa version 2 ou +toute version ultérieure, telle que publiée par Free Software Foundation +Inc. + +GNU Affero GPL: désigne la GNU Affero General Public License dans sa +version 3 ou toute version ultérieure, telle que publiée par Free +Software Foundation Inc. + +EUPL: désigne la Licence Publique de l'Union européenne dans sa version +1.1 ou toute version ultérieure, telle que publiée par la Commission +Européenne. + +Parties: désigne collectivement le Licencié et le Concédant. + +Ces termes s'entendent au singulier comme au pluriel. + + + Article 2 - OBJET + +Le Contrat a pour objet la concession par le Concédant au Licencié d'une +licence non exclusive, cessible et mondiale du Logiciel telle que +définie ci-après à l'article 5 <#etendue> pour toute la durée de +protection des droits portant sur ce Logiciel. + + + Article 3 - ACCEPTATION + +3.1 L'acceptation par le Licencié des termes du Contrat est réputée +acquise du fait du premier des faits suivants: + + * (i) le chargement du Logiciel par tout moyen notamment par + téléchargement à partir d'un serveur distant ou par chargement à + partir d'un support physique; + * (ii) le premier exercice par le Licencié de l'un quelconque des + droits concédés par le Contrat. + +3.2 Un exemplaire du Contrat, contenant notamment un avertissement +relatif aux spécificités du Logiciel, à la restriction de garantie et à +la limitation à un usage par des utilisateurs expérimentés a été mis à +disposition du Licencié préalablement à son acceptation telle que +définie à l'article 3.1 <#acceptation-acquise> ci dessus et le Licencié +reconnaît en avoir pris connaissance. + + + Article 4 - ENTREE EN VIGUEUR ET DUREE + + + 4.1 ENTREE EN VIGUEUR + +Le Contrat entre en vigueur à la date de son acceptation par le Licencié +telle que définie en 3.1 <#acceptation-acquise>. + + + 4.2 DUREE + +Le Contrat produira ses effets pendant toute la durée légale de +protection des droits patrimoniaux portant sur le Logiciel. + + + Article 5 - ETENDUE DES DROITS CONCEDES + +Le Concédant concède au Licencié, qui accepte, les droits suivants sur +le Logiciel pour toutes destinations et pour la durée du Contrat dans +les conditions ci-après détaillées. + +Par ailleurs, si le Concédant détient ou venait à détenir un ou +plusieurs brevets d'invention protégeant tout ou partie des +fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas +opposer les éventuels droits conférés par ces brevets aux Licenciés +successifs qui utiliseraient, exploiteraient ou modifieraient le +Logiciel. En cas de cession de ces brevets, le Concédant s'engage à +faire reprendre les obligations du présent alinéa aux cessionnaires. + + + 5.1 DROIT D'UTILISATION + +Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant +aux domaines d'application, étant ci-après précisé que cela comporte: + + 1. + + la reproduction permanente ou provisoire du Logiciel en tout ou + partie par tout moyen et sous toute forme. + + 2. + + le chargement, l'affichage, l'exécution, ou le stockage du Logiciel + sur tout support. + + 3. + + la possibilité d'en observer, d'en étudier, ou d'en tester le + fonctionnement afin de déterminer les idées et principes qui sont à + la base de n'importe quel élément de ce Logiciel; et ceci, lorsque + le Licencié effectue toute opération de chargement, d'affichage, + d'exécution, de transmission ou de stockage du Logiciel qu'il est en + droit d'effectuer en vertu du Contrat. + + + 5.2 DROIT D'APPORTER DES CONTRIBUTIONS + +Le droit d'apporter des Contributions comporte le droit de traduire, +d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel +et le droit de reproduire le logiciel en résultant. + +Le Licencié est autorisé à apporter toute Contribution au Logiciel sous +réserve de mentionner, de façon explicite, son nom en tant qu'auteur de +cette Contribution et la date de création de celle-ci. + + + 5.3 DROIT DE DISTRIBUTION + +Le droit de distribution comporte notamment le droit de diffuser, de +transmettre et de communiquer le Logiciel au public sur tout support et +par tout moyen ainsi que le droit de mettre sur le marché à titre +onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé. + +Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou +non, à des tiers dans les conditions ci-après détaillées. + + + 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION + +Le Licencié est autorisé à distribuer des copies conformes du Logiciel, +sous forme de Code Source ou de Code Objet, à condition que cette +distribution respecte les dispositions du Contrat dans leur totalité et +soit accompagnée: + + 1. + + d'un exemplaire du Contrat, + + 2. + + d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + <#responsabilite> et 9 <#garantie>, + +et que, dans le cas où seul le Code Objet du Logiciel est redistribué, +le Licencié permette un accès effectif au Code Source complet du +Logiciel pour une durée d'au moins 3 ans à compter de la distribution du +logiciel, étant entendu que le coût additionnel d'acquisition du Code +Source ne devra pas excéder le simple coût de transfert des données. + + + 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE + +Lorsque le Licencié apporte une Contribution au Logiciel, les conditions +de distribution du Logiciel Modifié en résultant sont alors soumises à +l'intégralité des dispositions du Contrat. + +Le Licencié est autorisé à distribuer le Logiciel Modifié, sous forme de +code source ou de code objet, à condition que cette distribution +respecte les dispositions du Contrat dans leur totalité et soit +accompagnée: + + 1. + + d'un exemplaire du Contrat, + + 2. + + d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + <#responsabilite> et 9 <#garantie>, + +et, dans le cas où seul le code objet du Logiciel Modifié est redistribué, + + 3. + + d'une note précisant les conditions d'accès effectif au code source + complet du Logiciel Modifié, pendant une période d'au moins 3 ans à + compter de la distribution du Logiciel Modifié, étant entendu que le + coût additionnel d'acquisition du code source ne devra pas excéder + le simple coût de transfert des données. + + + 5.3.3 DISTRIBUTION DES MODULES EXTERNES + +Lorsque le Licencié a développé un Module Externe les conditions du +Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué +sous un contrat de licence différent. + + + 5.3.4 COMPATIBILITE AVEC D'AUTRES LICENCES + +Le Licencié peut inclure un code soumis aux dispositions d'une des +versions de la licence GNU GPL, GNU Affero GPL et/ou EUPL dans le +Logiciel modifié ou non et distribuer l'ensemble sous les conditions de +la même version de la licence GNU GPL, GNU Affero GPL et/ou EUPL. + +Le Licencié peut inclure le Logiciel modifié ou non dans un code soumis +aux dispositions d'une des versions de la licence GNU GPL, GNU Affero +GPL et/ou EUPL et distribuer l'ensemble sous les conditions de la même +version de la licence GNU GPL, GNU Affero GPL et/ou EUPL. + + + Article 6 - PROPRIETE INTELLECTUELLE + + + 6.1 SUR LE LOGICIEL INITIAL + +Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel +Initial. Toute utilisation du Logiciel Initial est soumise au respect +des conditions dans lesquelles le Titulaire a choisi de diffuser son +oeuvre et nul autre n'a la faculté de modifier les conditions de +diffusion de ce Logiciel Initial. + +Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi +par le Contrat et ce, pour la durée visée à l'article 4.2 <#duree>. + + + 6.2 SUR LES CONTRIBUTIONS + +Le Licencié qui a développé une Contribution est titulaire sur celle-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable. + + + 6.3 SUR LES MODULES EXTERNES + +Le Licencié qui a développé un Module Externe est titulaire sur celui-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable et reste libre du choix du contrat régissant +sa diffusion. + + + 6.4 DISPOSITIONS COMMUNES + +Le Licencié s'engage expressément: + + 1. + + à ne pas supprimer ou modifier de quelque manière que ce soit les + mentions de propriété intellectuelle apposées sur le Logiciel; + + 2. + + à reproduire à l'identique lesdites mentions de propriété + intellectuelle sur les copies du Logiciel modifié ou non. + +Le Licencié s'engage à ne pas porter atteinte, directement ou +indirectement, aux droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs sur le Logiciel et à prendre, le cas échéant, à +l'égard de son personnel toutes les mesures nécessaires pour assurer le +respect des dits droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs. + + + Article 7 - SERVICES ASSOCIES + +7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de +prestations d'assistance technique ou de maintenance du Logiciel. + +Cependant le Concédant reste libre de proposer ce type de services. Les +termes et conditions d'une telle assistance technique et/ou d'une telle +maintenance seront alors déterminés dans un acte séparé. Ces actes de +maintenance et/ou assistance technique n'engageront que la seule +responsabilité du Concédant qui les propose. + +7.2 De même, tout Concédant est libre de proposer, sous sa seule +responsabilité, à ses licenciés une garantie, qui n'engagera que lui, +lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce, +dans les conditions qu'il souhaite. Cette garantie et les modalités +financières de son application feront l'objet d'un acte séparé entre le +Concédant et le Licencié. + + + Article 8 - RESPONSABILITE + +8.1 Sous réserve des dispositions de l'article 8.2 +<#limite-responsabilite>, le Licencié a la faculté, sous réserve de +prouver la faute du Concédant concerné, de solliciter la réparation du +préjudice direct qu'il subirait du fait du Logiciel et dont il apportera +la preuve. + +8.2 La responsabilité du Concédant est limitée aux engagements pris en +application du Contrat et ne saurait être engagée en raison notamment: +(i) des dommages dus à l'inexécution, totale ou partielle, de ses +obligations par le Licencié, (ii) des dommages directs ou indirects +découlant de l'utilisation ou des performances du Logiciel subis par le +Licencié et (iii) plus généralement d'un quelconque dommage indirect. En +particulier, les Parties conviennent expressément que tout préjudice +financier ou commercial (par exemple perte de données, perte de +bénéfices, perte d'exploitation, perte de clientèle ou de commandes, +manque à gagner, trouble commercial quelconque) ou toute action dirigée +contre le Licencié par un tiers, constitue un dommage indirect et +n'ouvre pas droit à réparation par le Concédant. + + + Article 9 - GARANTIE + +9.1 Le Licencié reconnaît que l'état actuel des connaissances +scientifiques et techniques au moment de la mise en circulation du +Logiciel ne permet pas d'en tester et d'en vérifier toutes les +utilisations ni de détecter l'existence d'éventuels défauts. L'attention +du Licencié a été attirée sur ce point sur les risques associés au +chargement, à l'utilisation, la modification et/ou au développement et à +la reproduction du Logiciel qui sont réservés à des utilisateurs avertis. + +Il relève de la responsabilité du Licencié de contrôler, par tous +moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et +de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens. + +9.2 Le Concédant déclare de bonne foi être en droit de concéder +l'ensemble des droits attachés au Logiciel (comprenant notamment les +droits visés à l'article 5 <#etendue>). + +9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le +Concédant sans autre garantie, expresse ou tacite, que celle prévue à +l'article 9.2 <#bonne-foi> et notamment sans aucune garantie sur sa +valeur commerciale, son caractère sécurisé, innovant ou pertinent. + +En particulier, le Concédant ne garantit pas que le Logiciel est exempt +d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible +avec l'équipement du Licencié et sa configuration logicielle ni qu'il +remplira les besoins du Licencié. + +9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le +Logiciel ne porte pas atteinte à un quelconque droit de propriété +intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout +autre droit de propriété. Ainsi, le Concédant exclut toute garantie au +profit du Licencié contre les actions en contrefaçon qui pourraient être +diligentées au titre de l'utilisation, de la modification, et de la +redistribution du Logiciel. Néanmoins, si de telles actions sont +exercées contre le Licencié, le Concédant lui apportera son expertise +technique et juridique pour sa défense. Cette expertise technique et +juridique est déterminée au cas par cas entre le Concédant concerné et +le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage +toute responsabilité quant à l'utilisation de la dénomination du +Logiciel par le Licencié. Aucune garantie n'est apportée quant à +l'existence de droits antérieurs sur le nom du Logiciel et sur +l'existence d'une marque. + + + Article 10 - RESILIATION + +10.1 En cas de manquement par le Licencié aux obligations mises à sa +charge par le Contrat, le Concédant pourra résilier de plein droit le +Contrat trente (30) jours après notification adressée au Licencié et +restée sans effet. + +10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à +utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les +licences qu'il aura concédées antérieurement à la résiliation du Contrat +resteront valides sous réserve qu'elles aient été effectuées en +conformité avec le Contrat. + + + Article 11 - DISPOSITIONS DIVERSES + + + 11.1 CAUSE EXTERIEURE + +Aucune des Parties ne sera responsable d'un retard ou d'une défaillance +d'exécution du Contrat qui serait dû à un cas de force majeure, un cas +fortuit ou une cause extérieure, telle que, notamment, le mauvais +fonctionnement ou les interruptions du réseau électrique ou de +télécommunication, la paralysie du réseau liée à une attaque +informatique, l'intervention des autorités gouvernementales, les +catastrophes naturelles, les dégâts des eaux, les tremblements de terre, +le feu, les explosions, les grèves et les conflits sociaux, l'état de +guerre... + +11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou +plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du +Contrat, ne pourra en aucun cas impliquer renonciation par la Partie +intéressée à s'en prévaloir ultérieurement. + +11.3 Le Contrat annule et remplace toute convention antérieure, écrite +ou orale, entre les Parties sur le même objet et constitue l'accord +entier entre les Parties sur cet objet. Aucune addition ou modification +aux termes du Contrat n'aura d'effet à l'égard des Parties à moins +d'être faite par écrit et signée par leurs représentants dûment habilités. + +11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat +s'avèrerait contraire à une loi ou à un texte applicable, existants ou +futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les +amendements nécessaires pour se conformer à cette loi ou à ce texte. +Toutes les autres dispositions resteront en vigueur. De même, la +nullité, pour quelque raison que ce soit, d'une des dispositions du +Contrat ne saurait entraîner la nullité de l'ensemble du Contrat. + + + 11.5 LANGUE + +Le Contrat est rédigé en langue française et en langue anglaise, ces +deux versions faisant également foi. + + + Article 12 - NOUVELLES VERSIONS DU CONTRAT + +12.1 Toute personne est autorisée à copier et distribuer des copies de +ce Contrat. + +12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé +et ne peut être modifié que par les auteurs de la licence, lesquels se +réservent le droit de publier périodiquement des mises à jour ou de +nouvelles versions du Contrat, qui posséderont chacune un numéro +distinct. Ces versions ultérieures seront susceptibles de prendre en +compte de nouvelles problématiques rencontrées par les logiciels libres. + +12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra +faire l'objet d'une diffusion ultérieure que sous la même version du +Contrat ou une version postérieure, sous réserve des dispositions de +l'article 5.3.4 <#compatibilite>. + + + Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE + +13.1 Le Contrat est régi par la loi française. Les Parties conviennent +de tenter de régler à l'amiable les différends ou litiges qui +viendraient à se produire par suite ou à l'occasion du Contrat. + +13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter +de leur survenance et sauf situation relevant d'une procédure d'urgence, +les différends ou litiges seront portés par la Partie la plus diligente +devant les Tribunaux compétents de Paris. + + diff --git a/README.md b/README.md index 8f27b1721cd7730bc371ba1cc52f91aeee0f3995..9138b4107de1b920f1669a940708e22ef35c134d 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,22 @@ ## Module Demo -Le module démo fournit une base de données de démonstration permettant d'avoir une authentification locale -qui fonctionne. - -Jetez un oeil à la base de données de démo présente dans le module 'Demo' : - - $ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite ".schema" - -Interrogez la table `user` pour vérifier la présence de l'utilisateur local `demo`, exemple : - - $ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite "select * from user;" +Le squelette d'application possède un module "démo" qui utilise une base de données PostgreSQL de démonstration +permettant d'avoir une authentification locale qui fonctionne. + +Cette base de données est fournie par le service `db` (fichier de config `docker-compose.yml`). +Il y a également un service `adminer` fournissant de quoi explorer la base de données avec l'outil +["Adminer"](https://www.adminer.org) en vous rendant à l'adresse `http://localhost:9080` et en utilisant les informations + de connexion à la bdd présentes dans le `docker-compose.yml`. +Pour explorer/administrer la base de données de l'extérieur du container (avec PHPStorm par exemple), +l'adresse de la base est cette fois `localhost:8432`. + +NB : +- Grâce au montage `./data/db:/var/lib/postgresql/data` spécifié dans `docker-compose.yml`, la base de données est + persistée dans le répertoire `data/db` de l'appli. +- Les scripts de création de la base de données exécutés au lancement du container (si la base n'existe pas déjà) + se trouvent dans le répertoire `./docker/db` de l'appli et sont fournis au container grâce au montage + `./docker/db/:/docker-entrypoint-initdb.d/`. ## Configuration du projet diff --git a/bin/bump-version b/bin/bump-version new file mode 100755 index 0000000000000000000000000000000000000000..6dcd6545284743d203a303d8b3676283fdb54648 --- /dev/null +++ b/bin/bump-version @@ -0,0 +1,61 @@ +#!/usr/bin/env php +<?php + +/** + * Script à utiliser pour mettre à jour la version courante de l'application, + * configurée dans 'config/autoload/version.global.php'. + * + * Usage: bump-version [<version>] + * + * Ex: bump-version 1.3 + */ + +require __DIR__ . '/../vendor/autoload.php'; + +use Zend\Config\Writer\PhpArray; + +$defaultConfig = [ + 'unicaen-app' => [ + 'app_infos' => [ + 'version' => 'Aucune', + ], + ] +]; + +$configFilepath = 'config/autoload/version.global.php'; +echo "Fichier de config: $configFilepath" . PHP_EOL; + +if (!is_readable($configFilepath)) { + echo "Fichier de config $configFilepath introuvable ou illisible." . PHP_EOL; + exit(1); +} + +$config = require $configFilepath; + +if (! isset($config['unicaen-app']['app_infos']['version'])) { + $config = array_merge_recursive($config, $defaultConfig); +} +$current = $config['unicaen-app']['app_infos']['version']; +echo sprintf("Version actuelle: %s.", $current) . PHP_EOL; + +$new = isset($argv[1]) ? $argv[1] : null; +if ($new === null) { + $message = "Nouvelle version ? "; + $new = readline($message); +} + +if (version_compare($new, $current) <= 0) { + echo ":-( Impossible, la nouvelle version doit être supérieure à l'actuelle." . PHP_EOL; + exit(1); +} + +$config['unicaen-app']['app_infos']['version'] = $new; +$config['unicaen-app']['app_infos']['date'] = date('d/m/Y'); +$config['comment'] = "Fichier généré le " . date('d/m/Y à H:i:s') . ' avec ' . __FILE__; + +$phpArray = new PhpArray(); +$phpArray + ->setUseBracketArraySyntax(true) + ->toFile($configFilepath, $config); + +echo "Nouvelle version inscrite: $new" . PHP_EOL; diff --git a/config/autoload/global.php b/config/autoload/global.php index 2ff19548ad7448d503c02f06d3b86930ad9c8bbd..823bb91afcf995dc469bd5c1c29e61109091ba7b 100755 --- a/config/autoload/global.php +++ b/config/autoload/global.php @@ -1,6 +1,6 @@ <?php -return array( - 'translator' => array( +return [ + 'translator' => [ 'locale' => 'fr_FR', - ), -); + ], +]; diff --git a/config/autoload/unicaen-app.global.php b/config/autoload/unicaen-app.global.php index 98eb16b693f9fd3dfaf6e2f6aa9d3f4b203a05c5..e9d01d906dda9fc09cc67dd3c83f09899777ec8f 100644 --- a/config/autoload/unicaen-app.global.php +++ b/config/autoload/unicaen-app.global.php @@ -19,8 +19,8 @@ return [ 'app_infos' => [ 'nom' => "NomDeVotreApplication", 'desc' => "Description succincte de votre application", - 'version' => "0.0.1", - 'date' => "07/11/2017", + //'version' => cf. 'version.global.php' + //'date' => cf. 'version.global.php' 'contact' => ['mail' => "dsi.applications@unicaen.fr", /*'tel' => "01 02 03 04 05"*/], 'mentionsLegales' => "http://www.unicaen.fr/acces-direct/mentions-legales/", 'informatiqueEtLibertes' => "http://www.unicaen.fr/acces-direct/informatique-et-libertes/", diff --git a/config/autoload/version.global.php b/config/autoload/version.global.php new file mode 100644 index 0000000000000000000000000000000000000000..53a31bbf45b77134c7c64d6db897f16ff724c487 --- /dev/null +++ b/config/autoload/version.global.php @@ -0,0 +1,11 @@ +<?php + +return [ + 'unicaen-app' => [ + 'app_infos' => [ + 'version' => '1.0.0', + 'date' => '19/09/2019', + ], + ], + 'comment' => 'Fichier généré le 19/09/2019 à 07:52:13 avec /app/bin/bump-version', +]; diff --git a/data/.gitignore b/data/.gitignore index ae8c28abc275267367968fe4b31d3a876b03ddb9..d20dcaf1bc063d14321a4575a9c0fc898238eb2a 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1 +1,2 @@ DoctrineORMModule/ +db/ \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 1d96644bdb1f96bf244ec232fbd409adfb2fdf64..79216a45d4a1e4cc619baae14fb858a2ed83404f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,3 +14,22 @@ services: volumes: - .:/app working_dir: /app + + db: + image: postgres + restart: always + environment: + POSTGRES_USER: admin + POSTGRES_PASSWORD: admin + POSTGRES_DB: demo + ports: + - 8432:5432 + volumes: + - ./data/db:/var/lib/postgresql/data + - ./docker/db/:/docker-entrypoint-initdb.d/ + + adminer: + image: adminer + restart: always + ports: + - 9080:8080 diff --git a/docker/db/1-schema.sql b/docker/db/1-schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..4bb92b1284a3e9e123e58b6112f3b6fdf37312bc --- /dev/null +++ b/docker/db/1-schema.sql @@ -0,0 +1,64 @@ +CREATE TABLE "user" ( + id BIGSERIAL PRIMARY KEY, + username VARCHAR(255) DEFAULT NULL, + email VARCHAR(255) DEFAULT NULL, + display_name VARCHAR(64) DEFAULT NULL, + password VARCHAR(128) NOT NULL, + state SMALLINT default 1 +) ; +CREATE UNIQUE INDEX user_username_unique ON "user" (username); + +alter table "user" add PASSWORD_RESET_TOKEN varchar(256) default null; + +create unique index USER_PASSWORD_RESET_TOKEN_UN on "user" (PASSWORD_RESET_TOKEN); + +CREATE TABLE user_role ( + id BIGSERIAL PRIMARY KEY, + role_id VARCHAR(64) NOT NULL, + is_default SMALLINT NOT NULL DEFAULT 0, + parent_id BIGINT DEFAULT NULL, + ldap_filter varchar(255) DEFAULT NULL, + FOREIGN KEY (parent_id) REFERENCES user_role (id) ON DELETE SET NULL +); +CREATE UNIQUE INDEX user_role_roleid_unique ON user_role (role_id); + + +CREATE TABLE user_role_linker ( + user_id BIGINT NOT NULL, + role_id BIGINT NOT NULL, + PRIMARY KEY (user_id, role_id), + FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE, + FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE +); +CREATE UNIQUE INDEX user_role_linker_unique ON user_role_linker (user_id, role_id); + + + + +CREATE TABLE IF NOT EXISTS categorie_privilege ( + id BIGSERIAL PRIMARY KEY, + code VARCHAR(150) NOT NULL, + libelle VARCHAR(200) NOT NULL, + ordre INT +); +CREATE UNIQUE INDEX categorie_privilege_unique ON categorie_privilege (code); + + +CREATE TABLE IF NOT EXISTS privilege ( + id BIGSERIAL PRIMARY KEY, + categorie_id BIGINT NOT NULL, + code VARCHAR(150) NOT NULL, + libelle VARCHAR(200) NOT NULL, + ordre INT, + FOREIGN KEY (categorie_id) REFERENCES categorie_privilege (id) ON DELETE CASCADE +); +CREATE UNIQUE INDEX privilege_unique ON privilege (code); + +CREATE TABLE IF NOT EXISTS role_privilege ( + role_id BIGINT NOT NULL, + privilege_id BIGINT NOT NULL, + PRIMARY KEY (role_id, privilege_id), + FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE, + FOREIGN KEY (privilege_id) REFERENCES privilege (id) ON DELETE CASCADE +); +CREATE UNIQUE INDEX role_privilege_unique ON role_privilege (role_id, privilege_id); diff --git a/docker/db/2-data.sql b/docker/db/2-data.sql new file mode 100644 index 0000000000000000000000000000000000000000..c3433d0d96d89fe59a84bb1825be74aa14664f88 --- /dev/null +++ b/docker/db/2-data.sql @@ -0,0 +1,30 @@ + +-- Données + +INSERT INTO user_role (id, role_id, is_default, parent_id) VALUES +(1, 'Standard', 1, NULL), +(2, 'Gestionnaire', 0, 1), +(3, 'Super-gestionnaire', 0, 2), +(4, 'Administrateur', 0, 3); + +INSERT INTO categorie_privilege (id, code, libelle, ordre) VALUES +(1, 'droit', 'Gestion des droits', 1); + +INSERT INTO privilege (id, categorie_id, code, libelle, ordre) VALUES +(1, 1, 'role-visualisation', 'Rôles - Visualisation', 1), +(2, 1, 'role-edition', 'Rôles - Édition', 2), +(3, 1, 'privilege-visualisation', 'Privilèges - Visualisation', 3), +(4, 1, 'privilege-edition', 'Privilèges - Édition', 4); + +INSERT INTO role_privilege (role_id, privilege_id) VALUES +(4, 1), +(4, 2), +(4, 3), +(4, 4); + +INSERT INTO "user" (username, email, display_name, password, state) VALUES + -- utilisateur demo/azerty + ('demo', 'demo@mail.fr', 'Demo Crite', '$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu', 1); + +INSERT INTO user_role_linker(user_id, role_id) +SELECT u.id, r.id FROM "user" u, user_role r WHERE u.username = 'demo' and r.role_id = 'Standard'; diff --git a/install.sh b/install.sh new file mode 100755 index 0000000000000000000000000000000000000000..1bef361a78a0b29436e595da5855edd860ae3605 --- /dev/null +++ b/install.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# +# This script runs required operations in order to set up the application. +# + +# Composer install +composer install --no-dev --no-suggest --optimize-autoloader + +# mpdf/mpdf/ttfontdata dir access +#chown -R www-data:root vendor/mpdf/mpdf/ttfontdata && chmod -R 770 vendor/mpdf/mpdf/ttfontdata + +# Répertoire d'upload par défaut +#mkdir -p upload && chown -R www-data:root upload && chmod -R 770 upload + +# Répertoires de travail de Doctrine +mkdir -p data/cache && chmod -R 777 data/cache +mkdir -p data/DoctrineModule/cache && chmod -R 777 data/DoctrineModule/cache +mkdir -p data/DoctrineORMModule/Proxy && chmod -R 777 data/DoctrineORMModule/Proxy +rm -rf data/cache/* +rm -rf data/DoctrineModule/cache/* +rm -rf data/DoctrineORMModule/Proxy/* + +# Commandes Doctrine +vendor/bin/doctrine-module orm:clear-cache:query +vendor/bin/doctrine-module orm:clear-cache:metadata +vendor/bin/doctrine-module orm:clear-cache:result +vendor/bin/doctrine-module orm:generate-proxies diff --git a/module/Demo/bin/create_demo_db.sh b/module/Demo/bin/create_demo_db.sh deleted file mode 100755 index 33ce16fc2316e678e350dbe1b14ff0c1bd5cc94d..0000000000000000000000000000000000000000 --- a/module/Demo/bin/create_demo_db.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -DIR=$(cd `dirname $0` && pwd) -DBPATH=${DIR}/../data/db/demo.sqlite - -sqlite3 ${DBPATH} < ${DIR}/../data/demo.sqlite.sql && \ -chmod 777 ${DBPATH} && \ -chmod 777 `dirname ${DBPATH}` diff --git a/module/Demo/config/module.config.php b/module/Demo/config/module.config.php index 046697925e0fe0e2bfd7d91d1d3adf98168bf432..ae6f72a400e63d9a951df4d98f185cde83c74268 100755 --- a/module/Demo/config/module.config.php +++ b/module/Demo/config/module.config.php @@ -3,16 +3,26 @@ namespace Demo; return [ + // + // ATTENTION: config Doctrine à déplacer dans `APP/config/autoload/`. + // 'doctrine' => [ 'connection' => [ 'orm_default' => [ - 'driverClass' => 'Doctrine\DBAL\Driver\PDOSqlite\Driver', + 'driverClass' => \Doctrine\DBAL\Driver\PDOPgSql\Driver::class, 'params' => [ - 'path' => __DIR__ . '/../data/db/demo.sqlite', + 'host' => 'db', // + 'user' => 'admin', // cf. docker-compose.yml + 'password' => 'admin', // + 'dbname' => 'demo', // + 'port' => '5432', + 'charset' => 'utf8', + 'driverOptions' => [1002 => 'SET NAMES utf8'] ], ], ], ], + 'bjyauthorize' => [ 'guards' => [ 'BjyAuthorize\Guard\Controller' => [ diff --git a/module/Demo/data/db/demo.sqlite b/module/Demo/data/db/demo.sqlite deleted file mode 100755 index cede42626ca8e68f5f2e81258866701abacae6d7..0000000000000000000000000000000000000000 Binary files a/module/Demo/data/db/demo.sqlite and /dev/null differ diff --git a/module/Demo/data/demo.sqlite.sql b/module/Demo/data/demo.sqlite.sql deleted file mode 100644 index 7de5346fa3d45a4951e5b5cce0fddb3961c0b70b..0000000000000000000000000000000000000000 --- a/module/Demo/data/demo.sqlite.sql +++ /dev/null @@ -1,98 +0,0 @@ -CREATE TABLE IF NOT EXISTS user -( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - username VARCHAR(255) DEFAULT NULL, - email VARCHAR(255) DEFAULT NULL, - display_name VARCHAR(64) DEFAULT NULL, - password VARCHAR(128) NOT NULL, - state SMALLINT default 1 -); -ALTER TABLE user ADD PASSWORD_RESET_TOKEN varchar(256) DEFAULT NULL; -CREATE UNIQUE INDEX user_unique_username ON user(username); -CREATE UNIQUE INDEX USER_PASSWORD_RESET_TOKEN_UN ON user (PASSWORD_RESET_TOKEN); - - -CREATE TABLE IF NOT EXISTS user_role ( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - role_id VARCHAR(64) NOT NULL, - is_default TINYINT(1) NOT NULL DEFAULT 0, - parent_id INTEGER NULL DEFAULT NULL, - ldap_filter varchar(255) DEFAULT NULL, - - FOREIGN KEY (parent_id) REFERENCES user_role (id) ON DELETE SET NULL -); -CREATE UNIQUE INDEX role_unique_role_id ON user_role(role_id); -CREATE INDEX role_idx_parent_id ON user_role(parent_id); - - -CREATE TABLE IF NOT EXISTS user_role_linker ( - user_id INTEGER NOT NULL, - role_id INTEGER NOT NULL, - PRIMARY KEY (user_id, role_id), - FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE, - FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE -); -CREATE INDEX user_role_linker_idx_role_id ON user_role_linker(role_id); -CREATE INDEX user_role_linker_idx_user_id ON user_role_linker(user_id); - - -CREATE TABLE IF NOT EXISTS categorie_privilege ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - code VARCHAR(150) NOT NULL, - libelle VARCHAR(200) NOT NULL, - ordre INTEGER -); -CREATE UNIQUE INDEX categorie_unique_code ON categorie_privilege(code); - - -CREATE TABLE IF NOT EXISTS privilege ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - categorie_id INTEGER NOT NULL, - code VARCHAR(150) NOT NULL, - libelle VARCHAR(200) NOT NULL, - ordre INTEGER, - FOREIGN KEY (categorie_id) REFERENCES categorie_privilege (id) ON DELETE CASCADE -); -CREATE UNIQUE INDEX privilege_unique_code ON privilege(code); - - -CREATE TABLE IF NOT EXISTS role_privilege ( - role_id INTEGER NOT NULL, - privilege_id INTEGER NOT NULL, - PRIMARY KEY (role_id,privilege_id), - FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE, - FOREIGN KEY (privilege_id) REFERENCES privilege (id) ON DELETE CASCADE -); -CREATE INDEX idx_role_id on role_privilege(role_id); -CREATE INDEX idx_privilege_id on role_privilege(privilege_id); - - --- Données - -INSERT INTO user_role (id, role_id, is_default, parent_id) VALUES - (1, 'Standard', 1, NULL), - (2, 'Gestionnaire', 0, 1), - (3, 'Super-gestionnaire', 0, 2), - (4, 'Administrateur', 0, 3); - -INSERT INTO categorie_privilege (id, code, libelle, ordre) VALUES - (1, 'droit', 'Gestion des droits', 1); - -INSERT INTO privilege (id, categorie_id, code, libelle, ordre) VALUES - (1, 1, 'role-visualisation', 'Rôles - Visualisation', 1), - (2, 1, 'role-edition', 'Rôles - Édition', 2), - (3, 1, 'privilege-visualisation', 'Privilèges - Visualisation', 3), - (4, 1, 'privilege-edition', 'Privilèges - Édition', 4); - -INSERT INTO role_privilege (role_id, privilege_id) VALUES - (4, 1), - (4, 2), - (4, 3), - (4, 4); - -INSERT INTO user (username, email, display_name, password, state) VALUES - -- utilisateur demo/azerty - ('demo', 'demo@mail.fr', 'Demo', '$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu', 1); - -INSERT INTO user_role_linker(user_id, role_id) -SELECT u.id, r.id FROM user u, user_role r WHERE u.username = 'demo' and r.role_id = 'Standard';