Compare commits

...
5 Commits
Author SHA1 Message Date
julien a2e0d87439 Translate file name in English 2026-10-27 09:03:01 +01:00
julien 37b1b027c9 Add articles 1 to 7 2026-10-27 09:03:01 +01:00
julien a69a84d6ba Add statuts document 2026-10-27 09:03:01 +01:00
julien 4cff2004a5 Modern style Ruby hash 2026-10-27 09:02:40 +01:00
julien 189432811f Global CSRF 2026-10-27 09:02:11 +01:00
6 changed files with 124 additions and 16 deletions

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
# netig.net # netig.net
## TODO
* limiter les soumissions à /contact/send
## Développement ## Développement
Installer les dépendances : Installer les dépendances :
+7 -7
View File
@@ -2,12 +2,12 @@ require "mail"
Mail.defaults do Mail.defaults do
delivery_method :smtp, { delivery_method :smtp, {
:address => "mail.netig.net", address: "mail.netig.net",
:port => 587, port: 587,
:domain => "netig.net", domain: "netig.net",
:user_name => "noreply@netig.net", user_name: "noreply@netig.net",
:password => ENV.fetch("SMTP_PASSWORD"), password: ENV.fetch("SMTP_PASSWORD"),
:authentication => "plain", authentication: "plain",
:enable_starttls => :always enable_starttls: :always
} }
end end
+99
View File
@@ -0,0 +1,99 @@
# Statuts de l’association NETig
## Article 1 — Dénomination
Il est fondé entre les adhérents aux présents statuts une association régie
par la loi du 1er juillet 1901 et le décret du 16 août 1901, dénommée
NETig.
## Article 2 — Objet
L’association a pour objet de proposer à toutes et tous une alternative aux
services des géants du Web. Elle promeut et défend une approche fondée sur
les logiciels libres, le respect de la vie privée et la préservation des
libertés fondamentales.
## Article 3 — Principes
L’association structure son action autour de cinq principes fondamentaux :
- Le respect de la vie privée et la préservation des libertés fondamentales.
- L’utilisation exclusive de logiciels libres.
- La gratuité des services pour toutes et tous, financés par des dons
volontaires.
- Le partage équitable des ressources disponibles.
- L’ouverture et le partage des connaissances techniques.
## Article 4 — Siège social
Le siège social est fixé à Brasparts. Il peut être transféré librement
par décision du Noyau (article 11).
## Article 5 — Durée
La durée de l’association est illimitée.
## Article 6 — Membres
L’association est ouverte à toute personne, physique ou morale, qui adhère
aux présents statuts et aux principes de NETig.
Tous les membres disposent des mêmes droits. La participation aux activités
et à la gestion de l’association est libre et ne constitue pas une condition
de maintien de l’adhésion.
Les personnes morales membres désignent une personne physique pour les
représenter au sein de l’association.
## Article 7 — Adhésion
Toute demande d’adhésion implique l’acceptation des présents statuts et
des principes de NETig.
Le Noyau examine les demandes et valide celles qui sont conformes aux présents
statuts. Tout refus doit être motivé et peut faire l’objet d’un recours
auprès de l’Assemblée générale, qui statue définitivement.
La pérennité de NETig repose sur la mise en commun des ressources
nécessaires à son fonctionnement et au développement de ses services. Chaque
membre est encouragé à contribuer selon ses moyens et ses possibilités, par
ses ressources financières ou matérielles, ses compétences ou son temps.
Aucune contribution financière n’est obligatoire.
## Article 8 — Fin de l’adhésion
## Article 9 — Ressources
## Article 10 — Assemblée générale
## Article 11 — Noyau
## Article 12 — Décisions
## Article 13 — Représentation
## Article 14 — Gestion financière
## Article 15 — Modification des statuts
## Article 16 — Règlement intérieur
## Article 17 — Dissolution
+2 -1
View File
@@ -9,7 +9,7 @@ class Netig < Roda
plugin :public plugin :public
plugin :default_headers, "Content-Type" => "text/html; charset=utf-8" plugin :default_headers, "Content-Type" => "text/html; charset=utf-8"
plugin :sessions, secret: ENV.fetch("SESSION_SECRET") plugin :sessions, secret: ENV.fetch("SESSION_SECRET")
plugin :route_csrf plugin :route_csrf, csrf_failure: :empty_403
plugin :hash_branches plugin :hash_branches
plugin :flash plugin :flash
@@ -17,6 +17,7 @@ class Netig < Roda
route do |r| route do |r|
r.public r.public
check_csrf!
r.hash_branches r.hash_branches
r.root do r.root do
+8 -2
View File
@@ -112,7 +112,6 @@ main > section:nth-of-type(odd):not(:only-of-type),
.page-panel { .page-panel {
max-width: 1000px; max-width: 1000px;
padding: clamp(24px, 4vw, 48px); padding: clamp(24px, 4vw, 48px);
border-radius: 16px;
background: var(--color-background); background: var(--color-background);
} }
@@ -175,6 +174,13 @@ a:hover {
text-decoration: underline; text-decoration: underline;
} }
/* Liens dans les paragraphes et le pied de page. */
main p a:not(.button),
footer a {
text-decoration: underline;
text-underline-offset: 0.15em;
}
a:focus-visible, a:focus-visible,
button:focus-visible, button:focus-visible,
input:focus-visible, input:focus-visible,
@@ -408,7 +414,7 @@ summary:focus-visible {
padding: 10px; padding: 10px;
border: 0; border: 0;
font-family: inherit; font-family: inherit;
font-size: 1rem; font-size: 1.2rem;
} }
/* Ne pas appliquer le fond clair au bouton d'envoi. */ /* Ne pas appliquer le fond clair au bouton d'envoi. */
+4 -6
View File
@@ -1,18 +1,16 @@
class Netig class Netig
hash_branch "contact" do |r| hash_branch "contact" do |r|
@page_title = "Contact — NETig"
@page_description = "Contacter NETig pour toute question concernant ses services."
@canonical_url = "https://netig.net/contact"
r.is do r.is do
r.get do r.get do
@page_title = "Contact — NETig"
@page_description = "Contacter NETig pour toute question concernant ses services."
@canonical_url = "https://netig.net/contact"
view "contact" view "contact"
end end
end end
r.post "send" do r.post "send" do
check_csrf!
form = ContactForm.new(r.params) form = ContactForm.new(r.params)
if form.spam? if form.spam?