-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME.html
More file actions
126 lines (121 loc) · 9 KB
/
Copy pathREADME.html
File metadata and controls
126 lines (121 loc) · 9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="data:text/plain;%20charset=utf-8;base64,CkBwYWdlIHsKICAgIG1hcmdpbjogMjBtbSAxNW1tIDIwbW0gMTVtbTsgLyogdG9wIHJpZ2h0IGJvdHRvbSBsZWZ0ICovCn0KCmJvZHkgewoJZm9udC1mYW1pbHk6ICJSb2JvdG8iICFpbXBvcnRhbnQ7Cgljb2xvcjogIzMzMzsJCiAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgIG1hcmdpbjogYXV0bzsKICAgIGNvdW50ZXItcmVzZXQ6IGgxY291bnRlcjsKICAgIHBhZGRpbmc6MTBweDsKICAgIGZvbnQtc2l6ZToyNXB4Owp9CgojbG9nbyB7CiAgICBtYXgtd2lkdGg6NjAwcHg7Cn0KCi50aXRsZSwgLnN1YnRpdGxlIHsKCWNvbG9yOiAjMzI5YWNhOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBsaW5lLWhlaWdodDogMWVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50aXRsZSB7CiAgICBmb250LWZhbWlseTogIkJlYmFzIE5ldWUiICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZm9udC1zaXplOiA4MHB4OwogICAgbWFyZ2luLXRvcDozMHB4Owp9Cgouc3VidGl0bGUgewogICAgZm9udC1zaXplOiA0MHB4Owp9CgoudGl0bGVkZXRhaWwgewogICAgbWFyZ2luLXRvcDogMjBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CgpoMSB7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5czsKICAgIGZvbnQtZmFtaWx5OiAiQmViYXMgTmV1ZSIgIWltcG9ydGFudDsKICAgIGNvdW50ZXItcmVzZXQ6IGgyY291bnRlcjsKICAgIG1hcmdpbjogMHB4IC0xNXB4IDIwcHggLTE1cHg7CiAgICBmb250LXNpemU6NTBweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMzMjlhY2E7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIHBhZGRpbmc6MTVweDsKfQpoMTpiZWZvcmUgewoJY291bnRlci1pbmNyZW1lbnQ6IGgxY291bnRlcjsKCWNvbnRlbnQ6IGNvdW50ZXIoaDFjb3VudGVyKSIgPSAiOwp9CgpoMiB7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZm9udC1mYW1pbHk6ICJCZWJhcyBOZXVlIiAhaW1wb3J0YW50OwogICAgY291bnRlci1yZXNldDogaDNjb3VudGVyOwogICAgbWFyZ2luLWJvdHRvbTo1cHg7CiAgICBmb250LXNpemU6NDVweDsKICAgIGJvcmRlci1ib3R0b206IDVweCBzb2xpZDsKfQpoMjpiZWZvcmUgewogICAgY291bnRlci1pbmNyZW1lbnQ6IGgyY291bnRlcjsKICAgIGNvbnRlbnQ6IGNvdW50ZXIoaDFjb3VudGVyKSAiLiIgY291bnRlcihoMmNvdW50ZXIpICIgPSAiOwp9CgpoMyB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGZvbnQtZmFtaWx5OiAiQmViYXMgTmV1ZSIgIWltcG9ydGFudDsKICAgIGNvdW50ZXItcmVzZXQ6IGg0Y291bnRlcjsKICAgIG1hcmdpbi1ib3R0b206NXB4OwogICAgZm9udC1zaXplOjQwcHg7Cn0KaDM6YmVmb3JlIHsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBoM2NvdW50ZXI7CiAgICBjb250ZW50OiBjb3VudGVyKGgxY291bnRlcikgIi4iIGNvdW50ZXIoaDJjb3VudGVyKSAiLiIgY291bnRlcihoM2NvdW50ZXIpICAiID0gIjsKfQoKaDQgewogICAgZm9udC1mYW1pbHk6ICJCZWJhcyBOZXVlIiAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTo1cHg7ICAgIAogICAgZm9udC1zaXplOiAzNXB4Owp9Cmg0OmJlZm9yZSB7CiAgICBjb3VudGVyLWluY3JlbWVudDogaDRjb3VudGVyOwogICAgY29udGVudDogY291bnRlcihoMWNvdW50ZXIpICIuIiBjb3VudGVyKGgyY291bnRlcikgIi4iIGNvdW50ZXIoaDNjb3VudGVyKSAiLiIgY291bnRlcihoNGNvdW50ZXIpICIgPSAiOwp9CgpoNSB7CiAgICBtYXJnaW4tYm90dG9tOjVweDsgICAgCiAgICBmb250LXNpemU6IDI1cHg7Cn0KCgpwIHsKICAgIG1hcmdpbjogMHB4IDBweCAyMHB4IDBweDsKfQoKc3Ryb25nIHsKICAgIGNvbG9yOiAjMzI5YWNhOwp9CgphLCBhOmhvdmVyLCBhOnZpc2l0ZWQgLCBoMiwgaDMsIGg0LCBoNSwgaDYgewoJY29sb3I6ICMzMjlhY2E7CiAgICBmb250LXdlaWdodDogYm9sZAp9CgpwICsgdWwgewogICAgbWFyZ2luLXRvcDogLTIwcHggIWltcG9ydGFudDsKfQoKdWwgewogICAgcGFkZGluZy1sZWZ0OjIwcHg7Cn0KCmltZyB7CiAgICBtYXgtd2lkdGg6MTAwJTsKICAgIG1hcmdpbjphdXRvOwogICAgZGlzcGxheTogYmxvY2s7Cn0KaW1nW2FsdD0iNzUiXSB7IHdpZHRoOiA3NSUgfQppbWdbYWx0PSI2MCJdIHsgd2lkdGg6IDYwJSB9CgouY2VudGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKZm9vdGVyIGltZyB7Cgl3aWR0aDogMzJweDsKfQoKYmxvY2txdW90ZSB7CiAgICBtYXJnaW46IDBweDsKICAgIHBhZGRpbmc6IDIwcHggMHB4IDFweCAxNXB4OwogICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgZ3JheTsKfQoKLmluZm8sCi5zdWNjZXNzLAoud2FybmluZywKLmRhbmdlciB7CglwYWRkaW5nOiAxcmVtOwoJbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLmluZm8gewoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MSwgMTI4LCAxODUsIC4xKTsKCWJvcmRlci1sZWZ0OiBzb2xpZCA0cHggcmdiYSg0MSwgMTI4LCAxODUsMS4wKTsKCWNvbG9yOiByZ2JhKDQxLCAxMjgsIDE4NSwxLjApOwp9Cgouc3VjY2VzcyB7CgliYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM5LCAxNzQsIDk2LCAuMSk7Cglib3JkZXItbGVmdDogc29saWQgNHB4IHJnYmEoMzksIDE3NCwgOTYsMS4wKTsKCWNvbG9yOnJnYmEoMzksIDE3NCwgOTYsMS4wKTsKfQoKLndhcm5pbmcgewoJcGFkZGluZzogMXJlbTsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQzLCAxNTYsIDE4LCAuMSk7Cglib3JkZXItbGVmdDogc29saWQgNHB4ICNmMzljMTI7Cgljb2xvcjogI2YzOWMxMjsKfQoKLmRhbmdlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMSwgNzYsIDYwLCAuMSk7Cglib3JkZXItbGVmdDogc29saWQgNHB4IHJnYmEoMjMxLCA3NiwgNjAsMS4wKTsKCWNvbG9yOiByZ2JhKDIzMSwgNzYsIDYwLDEuMCk7Cn0KCi5wYWdlLWJyZWFrIHsKCXBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5czsKfQoKLmNlbnRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCnRhYmxlIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Cgp0aCwgdGQgewogICAgcGFkZGluZzogMTBweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwp9Cgp0aCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCmNvZGUgewogICAgem9vbTo3NSU7Cn0KCi56b29tOTUgewogICAgem9vbTo5NSU7Cn0KCi56b29tODUgewogICAgem9vbTo4NSU7Cn0KCi56b29tNzUgewogICAgem9vbTo3NSU7Cn0KCi56b29tNjUgewogICAgem9vbTo2NSU7Cn0KCi56b29tNTAgewogICAgem9vbTo1MCU7Cn0KCnByZS5obGpzIGNvZGUgPiBkaXYgewogICAgcGFkZGluZzowcHg7Cn0KCi50b3RvIHsKICAgIGZvbnQtc2l6ZToxNTAlOwp9" />
</head>
<body>
<h1 id="ninegate">Ninegate</h1>
<p>Portail d'accueil personnalisable avec gestion de pages, blogs, items, chartes et widgets.</p>
<h2 id="installation">Installation</h2>
<h3 id="prrequis">Prérequis</h3>
<ul>
<li>Docker & Docker Compose</li>
</ul>
<h3 id="dmarrage">Démarrage</h3>
<pre style="color:#d8dee9;background-color:#2e3440;"><code><span style="display:flex;"><span>docker compose up -d
</span></span><span style="display:flex;"><span>docker <span style="color:#81a1c1">exec</span> ninegate php bin/console app:init
</span></span></code></pre><h3 id="accs">Accès</h3>
<table>
<thead>
<tr>
<th>Service</th>
<th>URL</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Application</td>
<td>http://localhost:8019</td>
<td>Portail principal</td>
</tr>
<tr>
<td>PostgreSQL</td>
<td>localhost:5432</td>
<td>Base de données</td>
</tr>
<tr>
<td>Adminer</td>
<td>http://localhost:6019</td>
<td>Administration BDD</td>
</tr>
<tr>
<td>MailHog</td>
<td>http://localhost:8025</td>
<td>Catch-all email</td>
</tr>
</tbody>
</table>
<h2 id="authentification">Authentification</h2>
<p>L'application supporte trois modes d'authentification (configuré via la variable <code>APP_MODEAUTH</code>) :</p>
<table>
<thead>
<tr>
<th>Mode</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>SQL</code></td>
<td>Login/mot de passe classique</td>
</tr>
<tr>
<td><code>CAS</code></td>
<td>SSO via serveur CAS (phpCAS)</td>
</tr>
<tr>
<td><code>OIDC</code></td>
<td>OpenID Connect</td>
</tr>
</tbody>
</table>
<h2 id="fonctionnalits">Fonctionnalités</h2>
<h3 id="pages">Pages</h3>
<p>Création de pages personnalisables avec un système de widgets drag-and-drop. Les pages sont accessibles par groupe ou par rôle.</p>
<h3 id="widgets">Widgets</h3>
<p>Widgets réutilisables sur les pages :</p>
<ul>
<li>Notes (Markdown)</li>
<li>Liens (ItemLinks)</li>
<li>Blog</li>
<li>Horloge</li>
<li>Météo</li>
<li>Flux RSS</li>
<li>Galerie / Carousel</li>
<li>Bureau / Favoris</li>
<li>Fichiers</li>
</ul>
<h3 id="blogs">Blogs</h3>
<p>Création de blogs avec articles au format Markdown. Chaque blog peut être lié à des groupes.</p>
<h3 id="items">Items</h3>
<p>Système de liens/catégories avec icônes personnalisées, accessible par groupe ou rôle.</p>
<h3 id="chartes">Chartes</h3>
<p>Chartes au format Markdown avec signature obligatoire optionnelle. Les utilisateurs doivent signer les chartes avant d'accéder à l'application.</p>
<h3 id="thmes">Thèmes</h3>
<p>Système de thèmes CSS variables configurable via l'interface admin. 14 thèmes prédéfinis.</p>
<h2 id="architecture">Architecture</h2>
<ul>
<li><strong>Framework</strong> : Symfony 7.4</li>
<li><strong>Base de données</strong> : PostgreSQL 17</li>
<li><strong>ORM</strong> : Doctrine (attributs PHP)</li>
<li><strong>Frontend</strong> : Bootstrap 5, jQuery, EasyMDE, Font Awesome, Select2</li>
<li><strong>Auth</strong> : Multi-mode (SQL/CAS/OIDC)</li>
<li><strong>Stockage</strong> : Local ou S3 (Flysystem)</li>
</ul>
<h3 id="gestion-de-la-base-de-donnes">Gestion de la base de données</h3>
<p>Le schéma est géré via <code>doctrine:schema:update --force --complete</code> (pas de migrations).</p>
<pre style="color:#d8dee9;background-color:#2e3440;"><code><span style="display:flex;"><span><span style="color:#616e87;font-style:italic"># Recréer le schéma</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#81a1c1">exec</span> ninegate bin/console d:s:u --force --complete
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#616e87;font-style:italic"># Charger les fixtures</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#81a1c1">exec</span> ninegate php bin/console app:init
</span></span></code></pre><h2 id="licence">Licence</h2>
<p>GNU Affero General Public License v3.0 - Voir <a href="/home/afornerot/git/nine-project/ninegate/LICENSE">LICENSE</a></p>
</body>
</html>