# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-analyzer/base/base-1.2.2.ebuild,v 1.1 2006/01/28 20:16:52 vanquirius Exp $

inherit webapp versionator eutils depend.apache depend.php

CONF_DIR="/etc/${PN}"
CONF_OLD="base_conf.php.dist"
CONF_NEW="base_conf.php"
MIDDLEMAN="base_path.php"

DESCRIPTION="A web-based front-end to the Snort IDS."
HOMEPAGE="http://base.secureideas.net"
SRC_URI="mirror://sourceforge/secureideas/${P}.tar.gz"
LICENSE="GPL-2"
KEYWORDS="~x86 ~amd64"
# SLOT is intentionally omitted because this package uses webapp-config
IUSE="session apache apache2 mysql postgres mssql oracle gd gd-external"

DEPEND=">=app-arch/tar-1.14
	>=sys-libs/zlib-1.2.1-r3
	>=app-arch/gzip-1.3.5-r4
	>=sys-apps/coreutils-5.2.1-r2
	>=sys-apps/sed-4.0.9
	mysql? ( >=dev-db/mysql-3.23.0 )
	postgres? ( >=dev-db/postgresql-7.1.0 )"
	# A local database isn't necessary, so we only require one when the user
	# has use-flags set for one of the supported DBs.
	# Snort can also be installed on a remote system, so we don't require it.

RDEPEND="${DEPEND}
	>=media-libs/gd-1.8.0
	>=dev-php/adodb-1.2
	>=dev-php4/jpgraph-1.12.2
	>=dev-php/PEAR-PEAR-1.3.6-r1
	>=dev-php/PEAR-Image_Color-1.0.2
	>=dev-php/PEAR-Log-1.9.3
	>=dev-php/PEAR-Numbers_Roman-0.2.0
	>=dev-php/PEAR-Numbers_Words-0.14.0
	>=dev-php/PEAR-Image_Canvas-0.2.4
	>=dev-php/PEAR-Image_Graph-0.7.1"

# Require PHP4 to be installed.
need_php4
need_php4_cli

# BASE *should* work with any php-driven web server, so only require Apache
# when the user has an apache use-flag set. Then set the group ownership for
# /etc/base/base_conf.php so it can be read by the user's web server.
if use apache2 || use apache; then
	need_apache
	WWW_GROUP="apache"
else
	# Set a safe default group.
	WWW_GROUP="root"
	APACHE_WWW_GROUP="FALSE"
fi

pkg_setup() {
	webapp_pkg_setup

	# Set the PHP environment variables.
	has_php

	# Make sure php was built with the necessary use-flags.
	require_php_with_use session cli
	require_gd
}

src_unpack() {
	unpack ${A}
	cd "${S}"

	# Help the user configure /etc/base/base_conf.php so BASE works out of the
	# box in most environments. The user will still be warned to edit the
	# file manually at the pkg_postinst() stage.
	sed -i -e 's:$BASE_urlpath.*:$BASE_urlpath = "/base";:g' \
		${CONF_OLD}
	sed -i -e 's:$DBlib_path.*:$DBlib_path = "/usr/lib/php/adodb";:g' \
		${CONF_OLD}

	if use postgres; then
		sed -i -e 's:$DBtype.*:$DBtype = "postgres";:g' \
			${CONF_OLD}
	fi
	if use mssql; then
		sed -i -e 's:$DBtype.*:$DBtype = "mssql";:g' \
			${CONF_OLD}
	fi
	if use oracle; then
		sed -i -e 's:$DBtype.*:$DBtype = "oci8";:g' \
			${CONF_OLD}
	fi

	# Install the configuration files in the usual /etc/${PN} location so that
	# etc-update functions properly (it also improves security somewhat, since
	# the config file contains plain-text passwords and should not be located
	# inside the web-root). This requires changing the BASE source a tad to
	# recognize the new location for base_conf.php.
	for PHP in *.php */*.php; do
		sed -i -e "s:${CONF_NEW}:${MIDDLEMAN}:g" \
			${CONF_OLD} "${PHP}"
	done

	# Create the file ${MIDDLEMAN} to determine the web-root and to change
	# the location of "include" to /etc/base/base_conf.php.
	echo "<?php" > ${MIDDLEMAN}
	echo '  $BASE_path = dirname(__FILE__);' >> ${MIDDLEMAN}
	echo "  include(\"${CONF_DIR}/${CONF_NEW}\");" >> ${MIDDLEMAN}
	echo "?>" >> ${MIDDLEMAN}

	# Delete the $BASE_path variable from the config file because we
	# now handle it with ${MIDDLEMAN} created above.
	sed -i -e 's:$BASE_path =.*::g' ${CONF_OLD}

	# Modify the HTML headers so search engines don't index BASE.
	sed -i -e \
		's:<HEAD>:<HEAD>\n  <META name="robots" content="noindex,nofollow">:g' \
			index.php
	sed -i -e \
		's:<HEAD>:<HEAD>\n  <META name="robots" content="noindex,nofollow">:g' \
			base_main.php
}

src_install() {
	webapp_src_preinst

	# Install the docs once in the standard /usr/share/doc/${PF}/DOCDESTREE
	# location instead of installing them in every virtual host directory.
	cd docs
	dodoc *
	cd "${S}"
	rm -rf docs

	# Install the config files in the normal location (/etc/${PN}).
	insinto ${CONF_DIR} || die "Unable to insinto ${CONF_DIR}"
	doins ${CONF_OLD} || die "Unable to doins ${CONF_OLD}"
	newins ${CONF_OLD} ${CONF_NEW} || die "Unable to create ${CONF_NEW}"

	# Install BASE for webapp-config
	insinto ${MY_HTDOCSDIR} || die "Unable to insinto ${MY_HTDOCSDIR}"
	doins -r *

	webapp_src_install

	# Set the proper permissions on /etc/base/base_conf.php
	fperms 640 ${CONF_DIR}/${CONF_NEW} || FPERMS="FALSE"
	fowners root:${WWW_GROUP} ${CONF_DIR}/${CONF_NEW} || FOWNERS="FALSE"
}

pkg_postinst() {
	webapp_pkg_postinst

	# Notify the user of any problems at the very end.
	if [ "${APACHE_WWW_GROUP}" == "FALSE" ]; then
			ewarn ""
			ewarn "It looks like you are not using the Apache web server. For "
			ewarn "BASE to work properly, you will need to change the "
			ewarn "ownership on ${CONF_DIR}/${CONF_NEW} to root:[www user]"
	fi

	einfo ""
	einfo "You should edit \"${CONF_DIR}/${CONF_NEW}\" before using BASE."
	einfo ""
	einfo "To setup your initial database, direct your web browser to the"
	einfo "location you installed BASE/base_db_setup.php."
	einfo "You can find instructions in /usr/share/doc/${P}/README."
	einfo ""
}