Contribuer au site de l'ASN
Code source
Le code source de ce site web est disponible sur Github. Il y a un lien vers la source des différentes pages en bas de celles-ci.
Soumettre une contribution
Pour proposer une modification, faites une pull request sur github.
Prérequis
Récupérez la dernière version du générateur de site statique zola depuis son site officiel.
Générer le site statique
Note: Le système de fichier HFS+ d'Apple gère bizarrement les caractères
accentués dans les noms de fichiers.
À 42, ça devrait fonctionner en clonant le dépôt du site dans un
sous-répertoire de /sgoinfre/goinfre/Perso/xlogin/
.
Essayer le site web localement
zola serve
et ouvrez 127.0.0.1:1111 dans un navigateur. Le site devrait être régénéré et rechargé automatiquement à chaque modification de fichiers.
Générer le site statique manuellement
Mettre à jour les statuts (optionnel)
git submodule update --init git submodule update --remote remote-sources/statuts-update.sh
Générer les fichiers dans /public
zola build
zola et Tera
La documentation de zola à propos des fichiers markdown, ainsi que celle à propos des templates et celle de Tera peuvent être utiles (beaucoup de fonctions de Tera ne sont pas explicitées dans la documentation de zola mais elles peuvent être utilisées directement dans les templates).
Mise à jour automatique du site
Le site est mis à jour lorsqu'un commit est poussé sur la branche static
sur
Github, ce qui déclenche un webhook.
TravisCI se charge de pousser ce commit sur la
branche static
lorsqu'un commit valide est poussé sur la branche master
.
Configuration de travis :
language: minimal
before_script:
# Download and unzip the zola executable
- curl -s -L https://github.com/getzola/zola/releases/download/v0.6.0/zola-v0.6.0-x86_64-unknown-linux-gnu.tar.gz | sudo tar xzf - -C /usr/local/bin
script:
- zola build
after_success: |
[ $TRAVIS_BRANCH = master ] &&
[ $TRAVIS_PULL_REQUEST = false ] &&
zola build &&
git checkout --orphan static &&
git rm --cached -r . &&
git add -f public &&
git commit -m 'Site statique'
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git static
Script chargé de réceptionner le webhook :
#!/usr/bin/env python3 from os import getenv as os_getenv from subprocess import run as run_subp from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse import json import base64 import hmac import string from hashlib import sha1 def create_hex_hmac(secret, message): new_hmac = hmac.new(bytes(secret, 'utf-8'), digestmod=sha1) new_hmac.update(bytes(message, 'utf-8')) return new_hmac.hexdigest() class RequestHandler(BaseHTTPRequestHandler): def do_POST(self): content_len = int(self.headers.get('content-length')) post_body = self.rfile.read(content_len) header_hash = self.headers.get('X-Hub-Signature') computed_hash = 'sha1=' + create_hex_hmac(os_getenv('SECRET', ''), post_body.decode("utf-8")) if header_hash != computed_hash : print('Wrong hash') self.send_response(403) self.end_headers() return else : print('Wright hash') self.send_response(200) self.end_headers() data = json.loads(post_body.decode("utf-8")) if (data.get('ref', '') == 'refs/heads/static') : print('Updating ASN website…') run_subp(['git', 'fetch', 'origin', 'static']) run_subp(['git', 'checkout', 'origin/static']) return if __name__ == '__main__': server = HTTPServer(('localhost', 21901), RequestHandler) print('Starting server at http://localhost:21901') server.serve_forever()
Il est géré par le service systemd ci-dessous :
[Unit] Description=a server to update ASN website on Github webhook trigger After=nginx.service [Service] Type=simple Environment="SECRET=MyFavoriteColorIsOrange" WorkingDirectory=/path/to/sites/sansnom.org Environment="PATH=/bin:/usr/bin" ExecStart=/usr/bin/python3 /path/to/sites/website-update.sansnom.org/server.py User=www-data Group=www-data PrivateTmp=true ProtectSystem=full ProtectHome=true [Install] WantedBy=multi-user.target
Nginx est utilisé comme reverse proxy devant le serveur avec cette configuration :
# website-update.sansnom.org server configuration
#
upstream asn-website-update {
server localhost:21901 max_fails=0;
}
server {
include snippets/https-listen.conf;
access_log /var/log/nginx/website-update.sansnom.org.access.log;
error_log /var/log/nginx/website-update.sansnom.org.error.log;
root /path/to/sites/website-update.sansnom.org/public;
index index.html;
autoindex on;
server_name website-update.sansnom.org;
ssl_certificate /path/to/certs/website-update.sansnom.org/fullchain.pem;
ssl_certificate_key /path/to/certs/website-update.sansnom.org/privkey.pem;
ssl_trusted_certificate /path/to/certs/website-update.sansnom.org/fullchain.pem;
ssl_stapling_file /path/to/certs/website-update.sansnom.org/ocsp.der;
location / {
proxy_pass http://asn-website-update;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
include snippets/letsencrypt-location.conf;
}
server {
include snippets/http-listen.conf;
access_log /var/log/nginx/website-update.sansnom.org.access.log;
error_log /var/log/nginx/website-update.sansnom.org.error.log;
root /path/to/sites/website-update.sansnom.org/public;
server_name website-update.sansnom.org;
include snippets/letsencrypt-location.conf;
include snippets/https-redirect.conf;
}
/etc/nginx/snippets/https-listen.conf
listen 443 ssl http2;
listen [::]:443 ssl http2;
/etc/nginx/snippets/https-redirect.conf
location / {
return 301 https://$host$request_uri;
access_log off;
}
/etc/nginx/snippets/http-listen.conf
listen 80;
listen [::]:80;
/etc/nginx/snippets/letsencrypt-location.conf
location ^~ /.well-known/acme-challenge {
default_type 'text/plain';
alias /path/to/sites/dehydrated/public;
}
Licences
Site de l'Association Sans Nom
asn-website - site web de l'Association Sans Nom Copyright © 2017-2019 Association Sans Nom et contributeurs
asn-website est un logiciel libre : vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la licence GNU Affero General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (selon votre choix) toute version ultérieure.
asn-website et distribué dans l'espoir qu'il soit utile, mais sans aucune garantie ; sans même la garantie implicite de qualité marchande ou d'adaptation à un usage particulier. Voir la GNU Affero General Public License pour plus de détails.
Vous devriez avoir reçu un exemplaire de la GNU Affero General Public License avec asn-website. Dans le cas contraire, voir https://www.gnu.org/licenses/.
Cadman font
Copyright © 2018, Paul Miller.
Cette fonte logicielle est licenciée sous la SIL Open Font License, version 1.1. Cette licence est disponible avec une FAQ à : http://scripts.sil.org/OFL
Graduate font
Copyright © 2012 par Eduardo Tunni (http://www.tipo.net.ar), avec le Reserved Font Name “Graduate”
Cette fonte logicielle est licenciée sous la SIL Open Font License, version 1.1. Cette licence est disponible avec une FAQ à : http://scripts.sil.org/OFL
Inconsolata font
Copyright © 2006 (regular style) and 2012 (bold style) par The Inconsolata Project Authors.
Regular style, Raphael Linus Levien. Bold style par Kirill Tkachev et the Cyreal foundry.
Cette fonte logicielle est licenciée sous la SIL Open Font License, version 1.1. Cette licence est disponible avec une FAQ à : http://scripts.sil.org/OFL
Salsa font
Copyright © 2011 par John Vargas Beltrán (john.vargasbeltran@gmail.com), avec le Reserved Font Name Salsa.
Cette fonte logicielle est licenciée sous la SIL Open Font License, version 1.1. Cette licence est disponible avec une FAQ à : http://scripts.sil.org/OFL
Special Elite font
Copyright © 2010 by Brian J. Bonislawsky and Astigmatic (astigmatic.com)
Cette fonte logicielle est licenciée sous la Apache License, version 2.0. Cette licence est disponible à http://www.apache.org/licenses/LICENSE-2.0
Suez One font
Copyright © 2016 par Michal Sahar.
Cette fonte logicielle est licenciée sous la SIL Open Font License, version 1.1. Cette licence est disponible avec une FAQ à : http://scripts.sil.org/OFL
Normalize.css
Normalize.css est publié sous la MIT license par Nicolas Gallagher et Jonathan Neal.
Icône copyleft
L'icône copyleft est une version modifiée d'une icône de Font Awesome Free. Elle est publiée sous la licence Creative Commons BY 4.0.