#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS apache.tools

function display_help() {
    uecho "$scriptname: Créer un fichier de redirections pour Apache à partir d'un certain
nombre de règles

USAGE
    $scriptname -f rewrite.rules [-o RewriteRules.conf] [-w RewriteRules.html] host

OPTIONS
    -p  Générer les directives <Proxy...> et tenir compte de proxy_acls
        Par défaut, le champ proxy_acls est ignoré

FORMAT des règles de mapping"'
============================

Les commentaires commencent par le signe "#"
Les règles sont de la forme:
    src:dest:host:suffix:OPTS:prot:proxy_acls
    ^prefix
    =literal

prot vaut par défaut http. Il peut valoir aussi https

Si dest ou suffix se terminent par $, on est en mode NO_SLASH
En mode NO_SLASH, si src se termine par $, on est en mode NO_TRAIL

* Si dest est de la forme Application.woa
En mode NO_SLASH, on génère
    RewriteRule ^/src(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]$1 [L,OPTS]
En mode NO_SLASH+NO_TRAIL, on génère
    RewriteRule ^/src [prot://host]/cgi-bin/WebObjects/dest[/suffix] [L,OPTS]
En mode normal, on génère
    RewriteRule ^/src$ /src/
    RewriteRule ^/src/(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]/$1 [L,OPTS]

* Si dest n'\''est pas de la forme Application.woa
En mode NO_SLASH, on génère
    RewriteRule ^/src(.*) [prot://host]/dest[/suffix]$1 [L,OPTS]
En mode NO_SLASH+NO_TRAIL, on génère
    RewriteRule ^/src [prot://host]/dest[/suffix] [L,OPTS]
En mode normal, on génère
    RewriteRule ^/src$ /src/
    RewriteRule ^/src/(.*) /dest[/suffix]/$1 [L,OPTS]

Si une règle est précédée d'\''une ou plusieurs lignes de la forme "^prefix",
ces lignes sont copiées avant chacune des commandes RewriteRule générées
pour une règle. Ceci permet d'\''ajouter des conditions avec RewriteCond pour
une règle. e.g.
    ^RewriteCond %{REMOTE_ADDR} 10\..*
    src:dest.woa
qui génère:
    RewriteCond %{REMOTE_ADDR} 10\..*
    RewriteRule ^/src$ /src/
    RewriteCond %{REMOTE_ADDR} 10\..*
    RewriteRule ^/src/(.*) /cgi-bin/WebObjects/dest.woa/$1 [L]

Une ligne de la forme "=literal" est recopiée sans modifications (sans le "=")
dans le fichier de sortie.

proxy_acls est utilisé si l'\''option -p est spécifiée et OPTS contient P (comme
proxy), ou si le mode de réécriture requière l'\''utilisation d'\''un proxy.

* Avec la valeur "None", aucune directive <Proxy> n'\''est générée
* Si aucune valeur n'\''est spécifiée, la directive suivante est générée:
  <Proxy $URL>
    AddDefaultCharset off
    Order Deny,Allow
    Allow from all
  </Proxy>
* Si une valeur est spécifiée, la directive suivante est générée:
  <Proxy $URL>
    AddDefaultCharset off
    Order Allow,Deny
    Allow from $proxy_acls
  </Proxy>

Dans les exemples donnés ci-dessus, $URL est l'\''url générée par la réécriture,
et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.'
}

proxy_enabled=
infile=
outfile=
htmlfile=
host=
parse_opts "${PRETTYOPTS[@]}" \
    --help '$exit_with display_help' \
    -p proxy_enabled \
    -f: infile= \
    -o: outfile= \
    -w: htmlfile= \
    @ args -- "$@" && set -- "${args[@]}" || die "$args"

thishost="$1"
if [ -n "$infile" ]; then infiles=("$infile")
else array_lsfiles infiles . "*rewrite*.rules"
fi

[ ${#infiles[*]} -gt 0 ] || die "Il faut spécifier le fichier de règles avec -f"
for infile in "${infiles[@]}"; do
    if [ -f "$infile" ]; then
        estep "$(ppath "$infile")"
        legacy_mkRewriteRules "$infile" "$thishost" "$outfile" "$htmlfile" "$proxy_enabled"
    else
        eerror "$(ppath "$infile"): fichier introuvable"
    fi
    # réinitialiser pour ne pas écraser un fichier existant
    outfile=
    htmlfile=
done
