bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
221 lines
6.3 KiB
Bash
Executable File
221 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Landvex Site Manager — Eget verktyg för att hantera webbplatser
|
|
# Användning: ./site-manager.sh [kommando] [parametrar]
|
|
|
|
set -e
|
|
|
|
SITES=("quixzoom" "landvex")
|
|
S3_BUCKETS=("s3://quixzoom-landing-prod" "s3://landvex-prod")
|
|
CF_DISTRIBUTIONS=("EE30B9WM5ZYM7" "E2M3J95HLUR89H")
|
|
WORKSPACE="/opt/amos/public"
|
|
|
|
color_red='\033[0;31m'
|
|
color_green='\033[0;32m'
|
|
color_yellow='\033[1;33m'
|
|
color_nc='\033[0m'
|
|
|
|
log() { echo -e "${color_green}[$(date +%H:%M:%S)]${color_nc} $1"; }
|
|
warn() { echo -e "${color_yellow}[$(date +%H:%M:%S)] WARNING:${color_nc} $1"; }
|
|
error() { echo -e "${color_red}[$(date +%H:%M:%S)] ERROR:${color_nc} $1"; exit 1; }
|
|
|
|
show_help() {
|
|
cat << 'EOF'
|
|
Landvex Site Manager — Kommandon:
|
|
|
|
sync [site] Synka lokala filer till S3 + invalidera CloudFront
|
|
sync-all Synka alla sajter
|
|
check [site] Kolla skillnader mellan lokal och S3
|
|
status Visa status för alla sajter
|
|
fix-contrast [site] Fixa kontrastproblem automatiskt
|
|
fix-mobile [site] Fixa mobilanpassning automatiskt
|
|
add-terms [file] [n] Lägg till n termer i glossary från fil
|
|
validate [site] Validera HTML, CSS, kontrast
|
|
backup [site] Skapa backup av S3-bucket
|
|
restore [site] [date] Återställ från backup
|
|
|
|
Exempel:
|
|
./site-manager.sh sync landvex
|
|
./site-manager.sh fix-mobile quixzoom
|
|
./site-manager.sh add-terms nya-termer.txt 20
|
|
EOF
|
|
}
|
|
|
|
sync_site() {
|
|
local site=$1
|
|
local idx=-1
|
|
for i in "${!SITES[@]}"; do
|
|
if [[ "${SITES[$i]}" == "$site" ]]; then idx=$i; break; fi
|
|
done
|
|
[[ $idx -eq -1 ]] && error "Okänd sajt: $site"
|
|
|
|
log "Synkar $site..."
|
|
aws s3 sync "${WORKSPACE}/${site}/" "${S3_BUCKETS[$idx]}" --delete
|
|
log "Invaliderar CloudFront..."
|
|
aws cloudfront create-invalidation \
|
|
--distribution-id "${CF_DISTRIBUTIONS[$idx]}" \
|
|
--paths "/*" \
|
|
--query 'Invalidation.Id' --output text
|
|
log "$site synkad och invaliderad!"
|
|
}
|
|
|
|
sync_all() {
|
|
for site in "${SITES[@]}"; do
|
|
sync_site "$site"
|
|
done
|
|
}
|
|
|
|
check_diff() {
|
|
local site=$1
|
|
local idx=-1
|
|
for i in "${!SITES[@]}"; do
|
|
if [[ "${SITES[$i]}" == "$site" ]]; then idx=$i; break; fi
|
|
done
|
|
[[ $idx -eq -1 ]] && error "Okänd sajt: $site"
|
|
|
|
log "Kollar skillnader för $site..."
|
|
aws s3 sync "${WORKSPACE}/${site}/" "${S3_BUCKETS[$idx]}" --dry-run
|
|
}
|
|
|
|
show_status() {
|
|
log "=== SAJTSTATUS ==="
|
|
for i in "${!SITES[@]}"; do
|
|
local site=${SITES[$i]}
|
|
local local_files=$(find "${WORKSPACE}/${site}" -type f | wc -l)
|
|
local s3_files=$(aws s3 ls "${S3_BUCKETS[$i]}" --recursive | wc -l)
|
|
log "$site: $local_files lokala filer, $s3_files filer på S3"
|
|
done
|
|
}
|
|
|
|
fix_contrast() {
|
|
local site=$1
|
|
log "Fixar kontrast för $site..."
|
|
|
|
find "${WORKSPACE}/${site}" -name "*.html" -exec sed -i \
|
|
-e 's/#f0f0f0/#1a1a1a/g' \
|
|
-e 's/#e0e0e0/#2a2a2a/g' \
|
|
-e 's/#cccccc/#333333/g' \
|
|
{} +
|
|
|
|
log "Kontrast fixad! Glöm inte att synka."
|
|
}
|
|
|
|
fix_mobile() {
|
|
local site=$1
|
|
log "Fixar mobilanpassning för $site..."
|
|
|
|
# Lägg till mobil-CSS om det saknas
|
|
find "${WORKSPACE}/${site}" -name "*.html" | while read -r file; do
|
|
if ! grep -q "@media.*max-width.*640" "$file"; then
|
|
sed -i '/<\/style>/i\
|
|
@media (max-width: 640px) {\
|
|
.hero h1 { font-size: 2rem !important; }\
|
|
.hero p { font-size: 1rem !important; }\
|
|
.card { padding: 1.5rem !important; }\
|
|
.grid { grid-template-columns: 1fr !important; }\
|
|
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }\
|
|
}' "$file"
|
|
fi
|
|
done
|
|
|
|
log "Mobilanpassning fixad! Glöm inte att synka."
|
|
}
|
|
|
|
add_terms() {
|
|
local file=$1
|
|
local n=${2:-10}
|
|
|
|
[[ ! -f "$file" ]] && error "Fil finns inte: $file"
|
|
|
|
log "Lägger till $n termer från $file..."
|
|
|
|
local glossary="${WORKSPACE}/quixzoom/glossary.html"
|
|
local count=0
|
|
|
|
while IFS='|' read -r term short long category && [[ $count -lt $n ]]; do
|
|
[[ -z "$term" ]] && continue
|
|
|
|
# Skapa term-card HTML
|
|
local html="
|
|
<div class=\"term-card\">
|
|
<div class=\"term-header\">
|
|
<h3 class=\"term-name\">$term</h3>
|
|
<span class=\"term-category\">${category:-Technical}</span>
|
|
</div>
|
|
<p class=\"term-short\">$short</p>
|
|
<p class=\"term-long\">$long</p>
|
|
</div>"
|
|
|
|
# Lägg till före </main> eller </body>
|
|
sed -i "/<\/main>/i\\$html" "$glossary"
|
|
|
|
((count++))
|
|
log " Tillagd: $term"
|
|
done < "$file"
|
|
|
|
log "$count termer tillagda!"
|
|
}
|
|
|
|
validate_site() {
|
|
local site=$1
|
|
log "Validerar $site..."
|
|
|
|
local errors=0
|
|
|
|
# Kolla HTML-filer
|
|
while IFS= read -r -d '' file; do
|
|
# Kolla kontrast
|
|
if grep -q "#f0f0f0\|#e0e0e0\|#cccccc" "$file"; then
|
|
warn "Låg kontrast i: $file"
|
|
((errors++))
|
|
fi
|
|
|
|
# Kolla mobil-CSS
|
|
if ! grep -q "@media.*max-width" "$file"; then
|
|
warn "Saknar mobil-CSS i: $file"
|
|
((errors++))
|
|
fi
|
|
|
|
# Kolla alt-text på bilder
|
|
if grep -q '<img[^>]*>' "$file" && ! grep -q 'alt="[^"]*"' "$file"; then
|
|
warn "Bild utan alt-text i: $file"
|
|
((errors++))
|
|
fi
|
|
done < <(find "${WORKSPACE}/${site}" -name "*.html" -print0)
|
|
|
|
if [[ $errors -eq 0 ]]; then
|
|
log "$site är validerad! Inga fel hittade."
|
|
else
|
|
warn "$site har $errors varningar."
|
|
fi
|
|
}
|
|
|
|
backup_site() {
|
|
local site=$1
|
|
local idx=-1
|
|
for i in "${!SITES[@]}"; do
|
|
if [[ "${SITES[$i]}" == "$site" ]]; then idx=$i; break; fi
|
|
done
|
|
[[ $idx -eq -1 ]] && error "Okänd sajt: $site"
|
|
|
|
local date=$(date +%Y%m%d-%H%M%S)
|
|
local backup_bucket="s3://landvex-backups/${site}-${date}"
|
|
|
|
log "Skapar backup av $site till $backup_bucket..."
|
|
aws s3 sync "${S3_BUCKETS[$idx]}" "$backup_bucket"
|
|
log "Backup klar: $backup_bucket"
|
|
}
|
|
|
|
# Main
|
|
case "${1:-help}" in
|
|
sync) sync_site "$2" ;;
|
|
sync-all) sync_all ;;
|
|
check) check_diff "$2" ;;
|
|
status) show_status ;;
|
|
fix-contrast) fix_contrast "$2" ;;
|
|
fix-mobile) fix_mobile "$2" ;;
|
|
add-terms) add_terms "$2" "$3" ;;
|
|
validate) validate_site "$2" ;;
|
|
backup) backup_site "$2" ;;
|
|
*) show_help ;;
|
|
esac
|