4.4 KiB
4.4 KiB
~~ 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
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)
Testé avec Roundcube 1.6.0 jusqu'à 1.7.1
Prévisualisation
Installation
1. Activer le skin dans la configuration Roundcube
Dans votre fichier config.inc.php :
$config['skin'] = 'skynet';
2. Récuperer le skin elastic comme base
2.1 Depuis un container roundcubemail
docker run --name tmp-roundcube -d roundcube/roundcubemail:latest && \
mkdir -p skins && \
docker cp tmp-roundcube:/var/www/html/skins/elastic skins && \
# Attendre que le fichier soit disponible (max 60s)
echo "Waiting for Roundcube to be ready..."
timeout 60 bash -c 'until docker exec tmp-roundcube test -f /var/www/html/program/include/iniset.php 2>/dev/null; do sleep 1; done' && \
RC_VERSION=$(docker exec tmp-roundcube sed -n "s/define('RCMAIL_VERSION', '\([^']*\)');/\1/p" /var/www/html/program/include/iniset.php) && \
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.1)
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
# 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 :
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.