#!/bin/sh -ex

# configure tkl-webcp
WEBAPPS=/var/lib/tomcat6/webapps/
WEBROOT=$WEBAPPS/cp
mv $WEBAPPS/ROOT $WEBROOT

rm $WEBROOT/index.html

for dir in js css images; do
    mkdir -p $WEBROOT/$dir
    cp -a /var/www/$dir/* $WEBROOT/$dir
    rm -rf /var/www/$dir
done

sed -i "s|HOSTNAME_DESC|Tomcat Apache|g" $WEBROOT/index.jsp
sed -i "s|HOSTNAME|tomcat-apache|g" $WEBROOT/index.jsp

PGSQL_VER=$(ls /etc/postgresql/)

# configure postgres to listen for remote connections
CONF=/etc/postgresql/$PGSQL_VER/main/postgresql.conf
sed --in-place "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" $CONF

# configure postgres to accept remote connections
cat >> /etc/postgresql/$PGSQL_VER/main/pg_hba.conf <<EOF
# Accept all IPv4 connections - CHANGE THIS!!!
host    all         all         0.0.0.0/0             md5
EOF


# -----------------------------------------------

CMDBUILD_PASSWORD="DQdKW32Mlms="
ALFRESCO_PASSWORD=$(printf '%s' "admin" | iconv -t utf16le | openssl md4 | cut -d ' ' -f 2)

/etc/init.d/postgresql start


#TOMCAT
sed --in-place "s/^JAVA_OPTS=\".*\$/JAVA_OPTS=\"-Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:MaxPermSize=512M -XX:+UseConcMarkSweepGC\"/" /etc/default/tomcat6
sed --in-place "s/^TOMCAT6_USER=.*\$/TOMCAT6_USER=root/" /etc/default/tomcat6
sed --in-place "s/^TOMCAT6_GROUP=.*\$/TOMCAT6_GROUP=root/" /etc/default/tomcat6

ln -s /usr/share/java/postgresql-jdbc4.jar /var/lib/tomcat6/common/

#openssl x509 -outform der -in /etc/ssl/certs/cert.pem -out /tmp/turnkey.crt
#keytool -import -trustcacerts -keystore /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/security/cacerts -storepass changeit -noprompt -alias turnkey -file /tmp/turnkey.crt 
#rm /tmp/turnkey.crt


# CMDBUILD

unzip /var/lib/tomcat6/webapps/cmdbuild.war -d /var/lib/tomcat6/webapps/cmdbuild
rm /var/lib/tomcat6/webapps/cmdbuild.war
chown -R tomcat6.tomcat6 /var/lib/tomcat6/webapps/cmdbuild

cat > /var/lib/tomcat6/webapps/cmdbuild/WEB-INF/conf/workflow.conf  <<EOF
enabled=true
endpoint=http://localhost/shark
user=admin
password=enhydra
EOF

cat > /var/lib/tomcat6/webapps/cmdbuild/WEB-INF/conf/dms.conf  <<EOF
enabled=true
server.url=http://localhost/alfresco/api
credential.password=admin
credential.user=admin
category.lookup=AlfrescoCategory
fileserver.port=1121
fileserver.type=AlfrescoFTP
fileserver.url=localhost
repository.fspath=/Alfresco/User Homes/cmdbuild
repository.wspath=/app:company_home/app:user_homes/
repository.app=cm:cmdbuild
delay=1000
EOF

if [ -e "/backup/cmdbuild.backup" ]; then

cat > /var/lib/tomcat6/webapps/cmdbuild/WEB-INF/conf/database.conf  <<EOF
db.url=jdbc\:postgresql\://localhost/cmdbuild
db.username=cmdbuild
db.password=cmdbuild
EOF

psql postgres << EOF
CREATE USER shark WITH PASSWORD 'shark';
CREATE USER cmdbuild WITH PASSWORD 'cmdbuild';
CREATE DATABASE cmdbuild OWNER cmdbuild;
EOF

pg_restore -d cmdbuild -1 /backup/cmdbuild.backup

psql -d cmdbuild << EOF
DO \$\$DECLARE tbl record;
BEGIN
    FOR tbl IN 
        SELECT o, s || '.' || n sn
        FROM (
            SELECT CASE p.proisagg WHEN false THEN 'FUNCTION' ELSE 'AGGREGATE' END o, nspname s, quote_ident(proname) || '(' || pg_catalog.pg_get_function_identity_arguments(p.oid) || ')' n
            FROM pg_catalog.pg_namespace n 
            JOIN pg_catalog.pg_proc p ON pronamespace = n.oid

            UNION

            SELECT 'TABLE' o, nspname s, quote_ident(relname) n
            FROM pg_class c
            JOIN pg_namespace n ON (c.relnamespace = n.oid) 
            WHERE   nspname NOT LIKE E'pg\\_%' AND 
                nspname <> 'information_schema' AND 
                relkind IN ('r','S','v')
            ) tbl
        WHERE s IN('public')
    LOOP
        EXECUTE 'ALTER ' || tbl.o || ' ' || tbl.sn || ' OWNER TO cmdbuild';
    END LOOP;
END\$\$;
UPDATE "User" SET "Password" = '$CMDBUILD_PASSWORD' WHERE "Username" = 'admin' AND "Status"='A';
ALTER SCHEMA shark OWNER TO shark;
ALTER SCHEMA public OWNER TO cmdbuild;
ALTER ROLE shark SET search_path=pg_default,shark;
EOF

psql -d cmdbuild << EOF
TRUNCATE TABLE "_SchedulerJob";
DROP TABLE "_EmailAccount_history";
DROP TABLE "_EmailAccount";
ALTER TABLE "_SchedulerJob" RENAME TO "Scheduler";
ALTER TABLE "_SchedulerJob_history" RENAME TO "Scheduler_history";
DROP TABLE "_SchedulerJobParameter_history";
DROP TABLE "_SchedulerJobParameter";
ALTER TABLE "Patch" DISABLE TRIGGER USER;
DELETE FROM "Patch" WHERE "Code"='2.2.0-02';
ALTER TABLE "Patch" ENABLE TRIGGER USER;
EOF

fi

# SHARK
unzip /var/lib/tomcat6/webapps/shark.war -d /var/lib/tomcat6/webapps/shark
rm /var/lib/tomcat6/webapps/shark.war
sed --in-place "s/\${cmdbuild}/cmdbuild/" /var/lib/tomcat6/webapps/shark/META-INF/context.xml
sed --in-place "s/^org.cmdbuild.ws.url=.*\$/org.cmdbuild.ws.url=http:\/\/localhost\/cmdbuild\//" /var/lib/tomcat6/webapps/shark/conf/Shark.conf 
chown -R tomcat6.tomcat6 /var/lib/tomcat6/webapps/shark


# ALFRESCO
unzip /var/lib/tomcat6/webapps/alfresco.war -d /var/lib/tomcat6/webapps/alfresco
rm /var/lib/tomcat6/webapps/alfresco.war
chown -R tomcat6.tomcat6 /var/lib/tomcat6/webapps/alfresco
mkdir /srv/alfresco
chown -R tomcat6.tomcat6 /srv/alfresco

sed --in-place "s/^log4j.appender.File.File=.*\$/log4j.appender.File.File=logs\/alfresco.log/" /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/log4j.properties

cat > /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco-global.properties  <<EOF
dir.root=/srv/alfresco
db.username=alfresco
db.password=alfresco
ooo.enabled=false
jodconverter.enabled=false
db.schema.update=true
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/alfresco
email.inbound.enabled=false
email.server.enabled=false
imap.server.enabled=false
ftp.enabled=true
ftp.ipv6.enabled=false
ftp.port=1121
index.recovery.mode=AUTO
EOF

psql postgres << EOF
CREATE USER alfresco WITH PASSWORD 'alfresco';
CREATE DATABASE alfresco OWNER alfresco;
EOF

if [ -e "/backup/alfresco.backup" ]; then

pg_restore -d alfresco -1 /backup/alfresco.backup

psql -d alfresco << EOF
DO \$\$DECLARE tbl record;
BEGIN
    FOR tbl IN 
        SELECT o, s || '.' || n sn
        FROM (
            SELECT CASE p.proisagg WHEN false THEN 'FUNCTION' ELSE 'AGGREGATE' END o, nspname s, quote_ident(proname) || '(' || pg_catalog.pg_get_function_identity_arguments(p.oid) || ')' n
            FROM pg_catalog.pg_namespace n 
            JOIN pg_catalog.pg_proc p ON pronamespace = n.oid

            UNION

            SELECT 'TABLE' o, nspname s, quote_ident(relname) n
            FROM pg_class c
            JOIN pg_namespace n ON (c.relnamespace = n.oid) 
            WHERE   nspname NOT LIKE E'pg\\_%' AND 
                nspname <> 'information_schema' AND 
                relkind IN ('r','S','v')
            ) tbl
        WHERE s IN('public')
    LOOP
        EXECUTE 'ALTER ' || tbl.o || ' ' || tbl.sn || ' OWNER TO alfresco';
    END LOOP;
END\$\$;
ALTER SCHEMA public OWNER TO alfresco;
UPDATE alf_node_properties  
SET string_value='$ALFRESCO_PASSWORD'
FROM (
  SELECT anp1.node_id,
  anp1.qname_id,       
  anp1.string_value       
  FROM alf_node_properties anp1  
  INNER JOIN alf_qname aq1 ON aq1.id = anp1.qname_id                          
  INNER JOIN alf_node_properties anp2 ON anp2.node_id = anp1.node_id       
  INNER JOIN alf_qname aq2 ON aq2.id = anp2.qname_id                          
  WHERE aq1.local_name = 'password'    
  AND aq2.local_name = 'username'       
  AND anp2.string_value = 'admin'   
) as anp
WHERE alf_node_properties.node_id=anp.node_id AND alf_node_properties.qname_id=anp.qname_id;
EOF

else

mkdir -p /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/module/cmdbuild

cat > /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/module/cmdbuild/module.properties  <<EOF
module.id=cmdbuild
module.title=Alfresco CMDBuild Module
module.description=Alfresco CMDBuild Extension
module.version=1.0
module.repo.version.min=3.2
EOF

cat > /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/module/cmdbuild/module-context.xml <<EOF
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
    <!-- Bootstrap CMDBuild Models -->
    <bean id="cmdbuild_bootstrapSpaces" class="org.alfresco.repo.module.ImporterModuleComponent" parent="module.baseComponent">
        <property name="moduleId" value="cmdbuild" />
        <property name="name" value="cmdbuild_bootstrapSpaces" />
        <property name="description" value="Initial data requirements" />
        <property name="sinceVersion" value="0.4" />
        <property name="appliesFromVersion" value="0.4" />

        <!-- Data properties -->
        <property name="importer" ref="spacesBootstrap"/>
        <property name="bootstrapViews">
            <list>
                <props>
                    <prop key="path">/cm:categoryRoot/cm:generalclassifiable</prop>
                    <prop key="location">alfresco/module/cmdbuild/categories.xml</prop>
	        </props>
                <props>
                    <prop key="path">/\${spaces.company_home.childname}/\${spaces.user_homes.childname}</prop>
                    <prop key="location">alfresco/module/cmdbuild/spaces.xml</prop>
               </props>
            </list>
        </property>
    </bean>
</beans>
EOF

cat > /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/module/cmdbuild/categories.xml  <<EOF
<?xml version='1.0' encoding='UTF-8'?>
<view:view xmlns:view="http://www.alfresco.org/view/repository/1.0"
           xmlns:sys="http://www.alfresco.org/model/system/1.0"
           xmlns:cm="http://www.alfresco.org/model/content/1.0">
   <cm:category>
      <cm:name>AlfrescoCategory</cm:name>
   </cm:category>
</view:view>
EOF

cat > /var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/module/cmdbuild/spaces.xml  <<EOF
<?xml version='1.0' encoding='UTF-8'?>
<view:view xmlns:view="http://www.alfresco.org/view/repository/1.0"
    xmlns:cm="http://www.alfresco.org/model/content/1.0" xmlns:app="http://www.alfresco.org/model/application/1.0">
    <cm:folder view:childName="cm:cmdbuild">
        <app:uifacets />
        <cm:name>cmdbuild</cm:name>
        <app:icon>space-icon-default</app:icon>
        <cm:title>CMDBuild</cm:title>
        <cm:description>CMDBuild</cm:description>
    </cm:folder>
</view:view>
EOF

fi

if [ -e "/backup/contentstore.tar.xz" ]; then
  tar xvf /backup/contentstore.tar.xz -C /srv/alfresco/
  chown -R root.root /srv/alfresco/
fi

# SHARE
unzip /var/lib/tomcat6/webapps/share.war -d /var/lib/tomcat6/webapps/share
rm /var/lib/tomcat6/webapps/share.war
chown -R tomcat6.tomcat6 /var/lib/tomcat6/webapps/share

sed --in-place "s/^log4j.appender.File.File=.*\$/log4j.appender.File.File=logs\/share.log/" /var/lib/tomcat6/webapps/share/WEB-INF/classes/log4j.properties


# GEOSERVER

unzip /var/lib/tomcat6/webapps/geoserver.war -d /var/lib/tomcat6/webapps/geoserver
rm /var/lib/tomcat6/webapps/geoserver.war
chown -R tomcat6.tomcat6 /var/lib/tomcat6/webapps/geoserver

mkdir -p /var/lib/tomcat6/webapps/geoserver/data/workspaces/cmdbuild

GEOSERVER_NAMESPACE=$(uuidgen)
cat > /var/lib/tomcat6/webapps/geoserver/data/workspaces/cmdbuild/namespace.xml  <<EOF
<namespace>
  <id>$GEOSERVER_NAMESPACE</id>
  <prefix>cmdbuild</prefix>
  <uri>http://www.cmdbuild.org</uri>
</namespace>
EOF

GEOSERVER_WORKSPACE=$(uuidgen)
cat > /var/lib/tomcat6/webapps/geoserver/data/workspaces/cmdbuild/workspace.xml  <<EOF
<workspace>
  <id>$GEOSERVER_WORKSPACE</id>
  <name>cmdbuild</name>
</workspace>
EOF


# FINALIZATION
hostname cmdbuild

/etc/init.d/tomcat6 start
tail -f /var/log/tomcat6/catalina.out | tee /dev/stderr | while read LOGLINE;
do
    case "${LOGLINE}" in *"Server startup"*) pkill -P $$ tail ;; esac
done
/etc/init.d/tomcat6 stop

/etc/init.d/postgresql stop

rm -rf /backup
rm -rf /var/log/tomcat6/*
rm -rf /var/log/postgresql/*
