# ~~ Skynet Skin ~ Roundcube Webmail ~~ > Thème de connexion sci-fi pour Roundcube, inspiré du réseau de défense Skynet (Terminator). > Fond animé, particules, data streams, palette bleu nuit / bleu science-fiction. Aidé par Claude AI ![Version](https://img.shields.io/badge/Roundcube-1.7.x-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Skin base](https://img.shields.io/badge/base-elastic-informational) --- ## Aperçu - Page de connexion full-screen avec animations canvas (particules + data streams) - Indicateur de niveau de menace, ticker défilant - Logo Skynet avec effet de lueur bleue pulsante - Détection et affichage des erreurs d'authentification Roundcube - Responsive mobile (viewport adaptatif, anti-zoom iOS) --- ## Prérequis - Testé avec Roundcube **1.6.0** jusqu'à **1.7.0** - Un autre skin **(ex: elastic)** présent dans `/var/www/html/skins/elastic/` (utilisé comme base) --- ## Démonstration vidéo

--- ## Installation ### 1. Activer le skin dans la configuration Roundcube Dans votre fichier `config.inc.php` : ```php $config['skin'] = 'skynet'; ``` --- ### 2. Récuperer le skin #### 2.1 Depuis un container roundcubemail ```bash docker run --name tmp-roundcube -d roundcube/roundcubemail:latest && \ mkdir -p skins && \ docker cp tmp-roundcube:/var/www/html/skins/elastic skins && \ docker exec tmp-roundcube \ find /var/www/html/plugins -type d -path "*/skins/elastic" | while read -r skin_path; do relative_path="${skin_path#/var/www/html}" target_dir="$(dirname "./$relative_path")" mkdir -p "$target_dir" && \ docker cp \ "tmp-roundcube:$skin_path" \ "$target_dir/" done docker rm -f tmp-roundcube ``` ou #### 2.1 Directement depuis les sources de roundcubemail (exemple pour la version 1.7.0) ```bash RC_VERSION=1.7.1 curl --location https://github.com/roundcube/roundcubemail/releases/download/${RC_VERSION}/roundcubemail-${RC_VERSION}-complete.tar.gz \ --output roundcubemail.tar.gz && \ tar -zxvf roundcubemail.tar.gz --wildcards --strip-components=1 -C . \ roundcubemail-${RC_VERSION}/skins/elastic roundcubemail-${RC_VERSION}/plugins/*/skins/elastic rm roundcubemail.tar.gz ``` ### 3. Puis télécharger la dernière release du thême depuis le dépôt ```bash # Compare semver: returns 0 if $1 >= $2 version_gte() { [ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] } # Récupère l'URL du dernier asset zip via l'API Gitea LATEST_ZIP=$(curl -s "https://git.celjim.fr/api/v1/repos/public/roundcube-theme-skynet/releases/latest" \ | grep -o '"browser_download_url":"[^"]*\.zip"' \ | head -n1 \ | cut -d'"' -f4) curl "${LATEST_ZIP}" \ --output theme-skynet.zip && \ 7z x theme-skynet.zip && \ if version_gte "$RC_VERSION" "1.7.1"; then sed -e 's|\.\/skins\/skynet\/styles\/styles-skynet\.min\.css|static.php/skins/skynet/styles/styles-skynet.min.css|g' \ -e 's|\.\/skins\/skynet\/script-skynet\.min\.js|static.php/skins/skynet/script-skynet.min.js|g' \ login.html > skins/elastic/templates/login.html && \ rm -f login.html echo fait else mv -f login.html skins/elastic/templates/login.html echo pas fait fi && \ mv -f script-skynet.min.js skins/elastic/ && \ mv -f styles-skynet.min.css skins/elastic/styles && \ mv skins/elastic skins/skynet && \ find "./plugins" -type d -path "*/skins/elastic" | while read -r elastic_dir; do skynet_dir="$(dirname "$elastic_dir")/skynet" mkdir -p "$skynet_dir" mv "$elastic_dir" "$skynet_dir" done rm theme-skynet.zip ``` ### 4. roundcubemail via Docker Montez le skin en volume dans votre `docker-compose.yml` : ```yaml services: roundcube: image: roundcube/roundcubemail:latest volumes: - ./theme-skynet/skins/skynet:/var/www/html/skins/skynet:ro - ./theme-skynet/plugins/managesieve/skins/skynet:/var/www/html/plugins/managesieve/skins/skynet:ro environment: - ROUNDCUBEMAIL_SKIN=skynet ``` --- ## Licence Ce projet est distribué sous licence **MIT**. Voir le fichier [LICENSE](./LICENSE).