#!/bin/sh
#
# attach-filter
#
# 1) Recibe un mensaje de correo en stdin
# 2) Lo pasa a traves de una lista configurable de filtros
# 3) Lo entrega en stdout
#
# attach-filter es normalmente invocado desde dspam-deliver
#
# (c) 2004-2015 ASIC-LINUX, S.A. de C.V.
# Todos los derechos reservados.
#

VERSION="0.1"
FECHA="20150203"

########## Configuracion ##########

# Por default en MAKEFILE_CONFDIR
AF_CFG="MAKEFILE_CONFDIR"

# Si encontramos un directorio attach-filter en HOME usamos eso en su lugar
if [ -d "$HOME/attach-filter" ]; then
   AF_CFG="$HOME/attach-filter"
fi

[ -r "${AF_CFG}/config" ] && source "${AF_CFG}/config"

# Ruta a biblioteca y modulos de filtrado
[ "$AF_LIBDIR" ] || AF_LIBDIR="MAKEFILE_LIBDIR"


if [ -f "$AF_LIBDIR/aflib" ]; then
   source "$AF_LIBDIR/aflib"
else
   echo "No puedo leer $AF_LIBDIR/aflib" >&2
   exit 111
fi

################## Valores por default ###################

# Ruta a altermime
[ "$ALTERMIME" ] || ALTERMIME=MAKEFILE_BINDIR/altermime

# Ruta a reformime
[ "$REFORMIME" ] || REFORMIME=MAKEFILE_BINDIR/reformime

# Ruta a reformail
[ "$REFORMAIL" ] || REFORMAIL=MAKEFILE_BINDIR/reformail

# Directorio temporal
[ "$TMPDIR" ] || TMPDIR=/tmp

################## Verificaciones de sanidad #################

# Acceso a los ejecutables necesarios
for dep in "$ALTERMIME" "$REFORMIME" "$REFORMAIL"; do
   [ -x "$dep" ] || error "$dep no es ejecutable"
done


###########################################################################

##### Procesamiento principal comienza aqui #####


## Primero guardamos una copia del mensaje para procesarlo
MSGFILE=$(crea_temp)
cat > $MSGFILE


########## Espacio para aplicar filtros ###########

# Ejecutamos cada filtro. Los filtros esperan el nombre
# de archivo del mensaje en la variable global $MSGFILE
listafiltros=""
if [ -r "${AF_CFG}/filtros" ]; then
   for filtro in `cat ${AF_CFG}/filtros`; do
      if [ -r "$AF_LIBDIR/filtros/$filtro" ]; then
         source "$AF_LIBDIR/filtros/$filtro"
         eval "${filtro}"
         if [ -z "$listafiltros" ]; then
            listafiltros="${filtro}"
         else
            listafiltros="${listafiltros},${filtro}"
         fi
      else
         error "$filtro referenciado en $AF_CFG/filtros pero no esta disponible en $AF_LIBDIR"
      fi
   done
fi

# Mandamos lo que quedo en MSGFILE a stdout. Agregamos un
# encabezado para indicar los filtros utilizados
$ALTERMIME --input="$MSGFILE" --xheader="AttachFilter-Filters:${listafiltros}"
cat "$MSGFILE"

###################################################


rm -f "$MSGFILE"

exit 0
