#!/bin/sh
#
# wwwoffle plugin
# Author: Shun-ichi TAHARA <jado@flowernet.gr.jp>
# Time-stamp: <04/10/18 13:25:28 jado@sheira>
#
# Copyright (c) 2004 Shun-ichi TAHARA
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#

# *** Please change below as suitable ***
WWWOFFLECONF=/etc/wwwoffle.conf

# Additional settings going into /etc/network.conf:
#
# HTTPPROXY : HTTP proxy server        [direct|server:port]
# FTPPROXY  : FTP proxy server         [direct|server:port]
# SSLPROXY  : SSL proxy server         [direct|server:port]
# NOPROXY   : Domains not to use proxy [domain...]

WWWOFFLERESOLV=/etc/resolv.conf
WWWOFFLESUM=$PLUGINSTATE/wwwoffle.resolv.md5
WWWOFFLEDEV=$PLUGINSTATE/wwwoffle.devices

wwwoffle_check ()
{
    if [ -s $WWWOFFLEDEV ]; then
	if [ -s $WWWOFFLEDEV.N ]; then
	    echo "online"
	else
	    echo "turnoff"
	fi
    else
	if [ -s $WWWOFFLEDEV.N ]; then
	    echo "turnon"
	else
	    echo "offline"
	fi
    fi
}

wwwoffle_update ()
{
    local CHECK= CURRENT= NEXT= FETCH=

    if [ ! -x /usr/local/bin/wwwoffle -o ! -r $WWWOFFLECONF ]; then
	echo "Please install and setup wwwoffle to work with HTTPPROXY."
	return
    fi

    case "$1" in
    turnon)
	CHECK=y
	CURRENT=off
	NEXT=on
	FETCH=y
	;;
    online)
	CHECK=y
	CURRENT=on
	NEXT=on
	;;
    turnoff)
	CURRENT=on
	NEXT=off
	;;
    offline)
	CURRENT=off
	NEXT=off
	;;
    esac

    /usr/bin/sed -e '/# The rest is added by Planet.../,$d' \
	$WWWOFFLECONF > $WWWOFFLECONF.N
    echo "# The rest is added by Planet..." >> $WWWOFFLECONF.N

    cat $WWWOFFLEDEV | /usr/bin/awk '
	BEGIN{
	    httpproxy = "";
	    ftpproxy = "";
	    sslproxy = "";
	    n = 0;
	    printf("Proxy\n{\n");
	}
	/^httpproxy +[^ ]+/{
	    if (tolower($2) == "direct" || httpproxy == "") {
		httpproxy = tolower($2);
	    }
	}
	/^ftpproxy +[^ ]+/{
	    if (tolower($2) == "direct" || ftpproxy == "") {
		ftpproxy = tolower($2);
	    }
	}
	/^sslproxy +[^ ]+/{
	    if (tolower($2) == "direct" || sslproxy == "") {
		sslproxy = tolower($2);
	    }
	}
	/^noproxy +[^ ]+/{
	    noproxy[n] = $2;
	    n++;
	}
	END{
	    for (i = 0; i < n; i++) {
		printf(" <*://%s> proxy = none\n", noproxy[i]);
		printf(" <*://%s> ssl = none\n", noproxy[i]);
	    }
	    if (httpproxy != "" && httpproxy != "direct") {
		printf(" <http://*> proxy = %s\n", httpproxy);
	    }
	    if (ftpproxy != "" && ftpproxy != "direct") {
		printf(" <ftp://*> proxy = %s\n", ftpproxy);
	    }
	    if (sslproxy != "" && sslproxy != "direct") {
		printf(" <*://*> ssl = %s\n", sslproxy);
	    }
	    printf("}\n");
	}
    ' >> $WWWOFFLECONF.N

    mv $WWWOFFLECONF.N $WWWOFFLECONF

    if ! /usr/local/bin/wwwoffle -status > /dev/null 2>&1; then
	/usr/bin/md5sum $WWWOFFLERESOLV > $WWWOFFLESUM
	/usr/local/sbin/wwwoffled > /dev/null 2>&1
	CHECK=
	CURRENT=off
    fi

    if [ -n "$CHECK" ]; then
	if [ -r $WWWOFFLESUM ] &&
	   /usr/bin/md5sum --status --check $WWWOFFLESUM; then
	    /usr/local/bin/wwwoffle -config > /dev/null 2>&1
	else
	    /usr/bin/md5sum $WWWOFFLERESOLV > $WWWOFFLESUM
	    /usr/local/bin/wwwoffle -kill > /dev/null 2>&1
	    /usr/local/sbin/wwwoffled > /dev/null 2>&1
	    CURRENT=off
	fi
    fi

    if [ "$CURRENT" != "$NEXT" ]; then
	/usr/local/bin/wwwoffle -$NEXT
    fi

    if [ -n "$FETCH" ]; then
	/usr/local/bin/wwwoffle -fetch &
    fi
}

# Variables definition

wwwoffle_VARS="HTTPPROXY FTPPROXY SSLPROXY NOPROXY"

# Script on starting

wwwoffle_start ()
{
    touch $WWWOFFLEDEV
    /usr/bin/sed -e "/# $1 begin/,/# $1 end/d" $WWWOFFLEDEV > $WWWOFFLEDEV.N

    if [ -n "$HTTPPROXY$FTPPROXY$SSLPROXY" ]; then
	echo "# $1 begin" >> $WWWOFFLEDEV.N
	if [ -n "$HTTPPROXY" ]; then
	    echo "httpproxy $HTTPPROXY" >> $WWWOFFLEDEV.N
	fi
	if [ -n "$FTPPROXY" ]; then
	    echo "ftpproxy $FTPPROXY" >> $WWWOFFLEDEV.N
	fi
	if [ -n "$SSLPROXY" ]; then
	    echo "sslproxy $SSLPROXY" >> $WWWOFFLEDEV.N
	fi
	for d in $NOPROXY; do
	    echo "noproxy $d" >> $WWWOFFLEDEV.N
	done
	echo "# $1 end" >> $WWWOFFLEDEV.N
    fi

    local MODE=`wwwoffle_check`
    mv $WWWOFFLEDEV.N $WWWOFFLEDEV
    wwwoffle_update $MODE
}

# Script on stopping

wwwoffle_stop ()
{
    /usr/bin/sed -e "/# $1 begin/,/# $1 end/d" $WWWOFFLEDEV > $WWWOFFLEDEV.N

    local MODE=`wwwoffle_check`
    mv $WWWOFFLEDEV.N $WWWOFFLEDEV
    wwwoffle_update $MODE
}
