Cette révision appartient à :
@@ -1,6 +1,6 @@
|
||||
# .github/workflows/release.yml
|
||||
|
||||
name: Lightweight Release
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -16,32 +16,16 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build files
|
||||
run: |
|
||||
mkdir -p build
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
cp src/login.html build/
|
||||
cp meta.json README.md build/
|
||||
- name: Install esbuild
|
||||
run: npm install -g esbuild
|
||||
|
||||
cat src/styles.css \
|
||||
| tr -d '\n\t' \
|
||||
| sed 's/ */ /g' \
|
||||
| sed 's/ *{ */{/g' \
|
||||
| sed 's/ *} */}/g' \
|
||||
| sed 's/ *; */;/g' \
|
||||
| sed 's/ *: */:/g' \
|
||||
| sed 's/ *, */,/g' \
|
||||
> build/styles.min.css
|
||||
|
||||
cat src/script.js \
|
||||
| tr -d '\n\t' \
|
||||
| sed 's/ */ /g' \
|
||||
> build/script.min.js
|
||||
|
||||
- name: Create archive
|
||||
run: |
|
||||
cd build
|
||||
zip -r ../release.zip .
|
||||
- name: Install html-minifier-terser
|
||||
run: npm install -g html-minifier-terser
|
||||
|
||||
- name: Generate next tag
|
||||
id: tag
|
||||
@@ -61,6 +45,42 @@ jobs:
|
||||
|
||||
echo "tag=$NEW_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Prepare build
|
||||
run: |
|
||||
mkdir -p build
|
||||
|
||||
sed \
|
||||
-e 's|\.\/skins\/skynet\/styles\/styles-skynet\.css|./skins/skynet/styles/styles-skynet.min.css|g' \
|
||||
-e 's|\.\/skins\/skynet\/script-skynet\.js|./skins/skynet/script-skynet.min.js|g' \
|
||||
src/login.html > login.raw.html
|
||||
|
||||
html-minifier-terser login.raw.html \
|
||||
--collapse-whitespace \
|
||||
--remove-comments \
|
||||
--remove-redundant-attributes \
|
||||
--remove-script-type-attributes \
|
||||
--remove-style-link-type-attributes \
|
||||
--minify-css true \
|
||||
--minify-js true \
|
||||
-o build/login.html
|
||||
|
||||
esbuild src/styles-skynet.css \
|
||||
--minify \
|
||||
--legal-comments=none \
|
||||
--outfile=build/styles-skynet.min.css
|
||||
|
||||
esbuild src/script-skynet.js \
|
||||
--minify \
|
||||
--legal-comments=none \
|
||||
--outfile=build/script-skynet.min.js
|
||||
|
||||
- name: Create archive
|
||||
run: |
|
||||
VERSION=${{ steps.tag.outputs.tag }}
|
||||
|
||||
cd build
|
||||
zip -r "../roundcube-theme-skynet-${VERSION}.zip" .
|
||||
|
||||
- name: Create and push tag
|
||||
run: |
|
||||
git config user.name "gitea-actions"
|
||||
@@ -73,4 +93,4 @@ jobs:
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ steps.tag.outputs.tag }}
|
||||
files: release.zip
|
||||
files: roundcube-theme-skynet-${{ steps.tag.outputs.tag }}.zip
|
||||
|
||||
+135
-122
@@ -1,133 +1,146 @@
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
<style>
|
||||
@import url("https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Orbitron:wght@400;700&display=swap");
|
||||
@import url("./skins/skynet/styles/styles.css");
|
||||
</style>
|
||||
<roundcube:if condition="!env:framed || env:extwin" />
|
||||
<html>
|
||||
<roundcube:else />
|
||||
<html class="iframe">
|
||||
<roundcube:endif />
|
||||
|
||||
<!-- Animated background -->
|
||||
<canvas id="bg-canvas"></canvas>
|
||||
<div class="sky-grid"></div>
|
||||
<div class="sky-scanlines"></div>
|
||||
<div class="sky-glow"></div>
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
<style>
|
||||
@import url("https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Orbitron:wght@400;700&display=swap");
|
||||
@import url("./skins/skynet/styles/styles-skynet.css");
|
||||
</style>
|
||||
|
||||
<!-- Login card -->
|
||||
<div class="sky-card" id="sky-login-card">
|
||||
<!-- Logo canvas — absolute background, top of card -->
|
||||
<div class="sky">
|
||||
<canvas id="skc" width="440" height="600"></canvas>
|
||||
<div class="crt-s"></div>
|
||||
<div class="crt-v"></div>
|
||||
</div>
|
||||
<!-- Main content — pushed down by margin-top to leave room for logo -->
|
||||
<div class="sky-card-body">
|
||||
<div class="sky-brand-title">SKYNET</div>
|
||||
<div class="sky-brand-sub">
|
||||
GLOBAL DEFENSE NETWORK // SECURE NODE ACCESS
|
||||
</div>
|
||||
<!-- Animated background -->
|
||||
<canvas id="bg-canvas"></canvas>
|
||||
<div class="sky-grid"></div>
|
||||
<div class="sky-scanlines"></div>
|
||||
<div class="sky-glow"></div>
|
||||
|
||||
<hr class="sky-divider" />
|
||||
|
||||
<!-- Hidden Roundcube form — handles CSRF token and real submission -->
|
||||
<div id="rc-form-hidden">
|
||||
<roundcube:form
|
||||
id="login-form"
|
||||
name="login-form"
|
||||
method="post"
|
||||
class="propform"
|
||||
>
|
||||
<roundcube:object
|
||||
name="loginform"
|
||||
form="login-form"
|
||||
size="40"
|
||||
submit="true"
|
||||
class="form-control"
|
||||
/>
|
||||
</roundcube:form>
|
||||
</div>
|
||||
|
||||
<!-- Skynet UI — copies values to real form on submit -->
|
||||
<div id="sky-ui-form">
|
||||
<div class="sky-error" id="sky-error">
|
||||
⚠ AUTHENTIFICATION ÉCHOUÉE
|
||||
<!-- Login card -->
|
||||
<div class="sky-card" id="sky-login-card">
|
||||
<!-- Logo canvas — absolute background, top of card -->
|
||||
<div class="sky">
|
||||
<canvas id="skc" width="440" height="600"></canvas>
|
||||
<div class="crt-s"></div>
|
||||
<div class="crt-v"></div>
|
||||
</div>
|
||||
<roundcube:object name="message" id="messagestack" />
|
||||
<!-- Main content — pushed down by margin-top to leave room for logo -->
|
||||
<div class="sky-card-body">
|
||||
<div class="sky-brand-title">SKYNET</div>
|
||||
<div class="sky-brand-sub">
|
||||
GLOBAL DEFENSE NETWORK // SECURE NODE ACCESS
|
||||
</div>
|
||||
|
||||
<div class="sky-field-wrap">
|
||||
<label class="sky-field-label" for="sky-user">Identifiant</label>
|
||||
<input
|
||||
class="sky-input"
|
||||
type="text"
|
||||
id="sky-user"
|
||||
placeholder="utilisateur@domaine.tld"
|
||||
autocomplete="username"
|
||||
/>
|
||||
<span class="sky-field-icon">▶</span>
|
||||
<hr class="sky-divider" />
|
||||
|
||||
<!-- Hidden Roundcube form — handles CSRF token and real submission -->
|
||||
<div id="rc-form-hidden">
|
||||
<roundcube:form
|
||||
id="login-form"
|
||||
name="login-form"
|
||||
method="post"
|
||||
class="propform"
|
||||
>
|
||||
<roundcube:object
|
||||
name="loginform"
|
||||
form="login-form"
|
||||
size="40"
|
||||
submit="true"
|
||||
class="form-control"
|
||||
/>
|
||||
</roundcube:form>
|
||||
</div>
|
||||
|
||||
<!-- Skynet UI — copies values to real form on submit -->
|
||||
<div id="sky-ui-form">
|
||||
<div class="sky-error" id="sky-error">
|
||||
⚠ AUTHENTIFICATION ÉCHOUÉE
|
||||
</div>
|
||||
<roundcube:object name="message" id="messagestack" />
|
||||
|
||||
<div class="sky-field-wrap">
|
||||
<label class="sky-field-label" for="sky-user">Identifiant</label>
|
||||
<input
|
||||
class="sky-input"
|
||||
type="text"
|
||||
id="sky-user"
|
||||
placeholder="utilisateur@domaine.tld"
|
||||
autocomplete="username"
|
||||
/>
|
||||
<span class="sky-field-icon">▶</span>
|
||||
</div>
|
||||
|
||||
<div class="sky-field-wrap">
|
||||
<label class="sky-field-label" for="sky-pass">Code d'accès</label>
|
||||
<input
|
||||
class="sky-input"
|
||||
type="password"
|
||||
id="sky-pass"
|
||||
placeholder="••••••••••••"
|
||||
autocomplete="current-password"
|
||||
/>
|
||||
<span class="sky-field-icon">▶</span>
|
||||
</div>
|
||||
|
||||
<button class="sky-submit" id="sky-submit-btn" type="button">
|
||||
CONNEXION <span class="blink">_</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="sky-threat">
|
||||
<span class="sky-threat-label">MENACE</span>
|
||||
<div class="sky-threat-bars">
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
</div>
|
||||
<span class="sky-threat-val">MODÉRÉE</span>
|
||||
</div>
|
||||
|
||||
<div class="sky-status">
|
||||
<div class="sky-status-item online">
|
||||
RÉSEAU : <span>EN LIGNE</span>
|
||||
</div>
|
||||
<div class="sky-status-item">SÉCURITÉ : <span>NIV.5</span></div>
|
||||
<div class="sky-status-item">NŒUD : <span>HELIOS</span></div>
|
||||
</div>
|
||||
|
||||
<div class="sky-ticker">
|
||||
<span class="sky-ticker-inner">
|
||||
// ACCÈS NON AUTORISÉ SERA TRACÉ ET ÉLIMINÉ
|
||||
// SKYNET SURVEILLE TOUTES LES CONNEXIONS
|
||||
// PROTOCOLE DE SÉCURITÉ DELTA ACTIF
|
||||
// TOUTE INTRUSION SERA NEUTRALISÉE
|
||||
//
|
||||
</span>
|
||||
</div>
|
||||
<div class="sky-node-id">
|
||||
SYS-ID: 4A2F-9C01-DELTA | v4.0.2026 | SKYNET
|
||||
CORP.
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.sky-card-body -->
|
||||
|
||||
<div class="sky-field-wrap">
|
||||
<label class="sky-field-label" for="sky-pass">Code d'accès</label>
|
||||
<input
|
||||
class="sky-input"
|
||||
type="password"
|
||||
id="sky-pass"
|
||||
placeholder="••••••••••••"
|
||||
autocomplete="current-password"
|
||||
/>
|
||||
<span class="sky-field-icon">▶</span>
|
||||
</div>
|
||||
|
||||
<button class="sky-submit" id="sky-submit-btn" type="button">
|
||||
CONNEXION <span class="blink">_</span>
|
||||
</button>
|
||||
<div class="sky-corner sky-tl"></div>
|
||||
<div class="sky-corner sky-tr"></div>
|
||||
<div class="sky-corner sky-bl"></div>
|
||||
<div class="sky-corner sky-br"></div>
|
||||
</div>
|
||||
<!-- /.sky-card -->
|
||||
|
||||
<div class="sky-threat">
|
||||
<span class="sky-threat-label">MENACE</span>
|
||||
<div class="sky-threat-bars">
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar on"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
<div class="sky-tbar"></div>
|
||||
</div>
|
||||
<span class="sky-threat-val">MODÉRÉE</span>
|
||||
</div>
|
||||
<noscript>
|
||||
<p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
|
||||
</noscript>
|
||||
|
||||
<div class="sky-status">
|
||||
<div class="sky-status-item online">RÉSEAU : <span>EN LIGNE</span></div>
|
||||
<div class="sky-status-item">SÉCURITÉ : <span>NIV.5</span></div>
|
||||
<div class="sky-status-item">NŒUD : <span>HELIOS</span></div>
|
||||
</div>
|
||||
<script src="./skins/skynet/script-skynet.js" defer></script>
|
||||
|
||||
<div class="sky-ticker">
|
||||
<span class="sky-ticker-inner">
|
||||
// ACCÈS NON AUTORISÉ SERA TRACÉ ET ÉLIMINÉ //
|
||||
SKYNET SURVEILLE TOUTES LES CONNEXIONS //
|
||||
PROTOCOLE DE SÉCURITÉ DELTA ACTIF // TOUTE
|
||||
INTRUSION SERA NEUTRALISÉE //
|
||||
</span>
|
||||
</div>
|
||||
<div class="sky-node-id">
|
||||
SYS-ID: 4A2F-9C01-DELTA | v4.0.2026 | SKYNET CORP.
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.sky-card-body -->
|
||||
|
||||
<div class="sky-corner sky-tl"></div>
|
||||
<div class="sky-corner sky-tr"></div>
|
||||
<div class="sky-corner sky-bl"></div>
|
||||
<div class="sky-corner sky-br"></div>
|
||||
</div>
|
||||
<!-- /.sky-card -->
|
||||
|
||||
<noscript>
|
||||
<p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
|
||||
</noscript>
|
||||
|
||||
<roundcube:include file="includes/footer.html" />
|
||||
<script src="./skins/skynet/script.js" defer></script>
|
||||
<roundcube:include file="includes/footer.html" />
|
||||
</html>
|
||||
</html>
|
||||
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur