#!/bin/sh

#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#    
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

# For this module to work, add the app domains to your /etc/hosts as follows:
# 127.0.0.1 sca-store.com abc.sca-store.com xyz.sca-store.com ...

here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
jsprefix=`echo "import os; print os.path.realpath('$here/../js')" | python`

# Create SSL certificates
../../modules/http/ssl-ca-conf tmp sca-store.com
../../modules/http/ssl-cert-conf tmp sca-store.com server
../../modules/http/ssl-cert-conf tmp *.sca-store.com vhost

# Configure server with virtual hosting
../../modules/http/httpd-conf tmp sca-store.com 8090 htdocs
../../modules/http/httpd-event-conf tmp
../../modules/http/vhost-conf tmp apps htdocs
../../modules/http/httpd-ssl-conf tmp 8453
../../modules/http/vhost-ssl-conf tmp

# Configure authentication
../../modules/http/open-auth-conf tmp
../../modules/http/passwd-auth-conf tmp john john
../../modules/http/passwd-auth-conf tmp jane jane
../../modules/http/passwd-auth-conf tmp admin admin

# Configure mod-security
../../modules/http/mod-security-conf tmp

# Configure Python component support
../../modules/server/server-conf tmp
../../modules/python/python-conf tmp

# Configure error pages
cat >>tmp/conf/svhost-ssl.conf <<EOF
# Error pages
ErrorDocument 404 /notfound/
ErrorDocument 401 /notauth/
ErrorDocument 500 /oops/

EOF

# Configure app home pages
cat >>tmp/conf/dvhost-ssl.conf <<EOF
# App error pages
ErrorDocument 404 /notfound/
ErrorDocument 401 /notauth/
ErrorDocument 500 /oops/

# Redirect www to main home page
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.sca-store\.com [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://sca-store.com:%{SERVER_PORT}%{REQUEST_URI} [L,R]
RewriteCond %{HTTP_HOST} ^www\.sca-store\.com [NC]
RewriteRule .* https://sca-store.com%{REQUEST_URI} [L,R]

EOF

cat >>tmp/conf/dvhost.conf <<EOF
# Redirect www to main home page
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.sca-store\.com [NC]
RewriteCond %{SERVER_PORT} !^80$
RewriteRule .* http://sca-store.com:%{SERVER_PORT}%{REQUEST_URI} [L,R]
RewriteCond %{HTTP_HOST} ^www\.sca-store\.com [NC]
RewriteRule .* http://sca-store.com%{REQUEST_URI} [L,R]

EOF

# Configure SCA contributions
cat >>tmp/conf/httpd.conf <<EOF

# Configure SCA Composite
SCAContribution `pwd`/
SCAComposite edit.composite

# Configure SCA Composite for mass dynamic virtual Hosting
SCAVirtualContribution `pwd`/apps/
SCAVirtualComposite app.composite

EOF

# Configure main aliases
cat >>tmp/conf/httpd.conf <<EOF

Alias /home/home.png $here/htdocs/home/home.png
Alias /home/home.b64 $here/htdocs/home/home.b64

EOF

# Create app links and sub-directories if needed
./mkapplinks

# Configure app aliases
cat >>tmp/conf/dvhost-ssl.conf <<EOF
# Configure aliases
Alias /cache-manifest.cmf $here/htdocs/app/cache-manifest.cmf
Alias /data $here/htdocs/data
Alias /favicon.ico $here/htdocs/favicon.ico
Alias /footconfig.js $here/htdocs/footconfig.js
Alias /frame.html $here/htdocs/app/frame.html
Alias /headconfig.js $here/htdocs/headconfig.js
Alias /index.html $here/htdocs/app/index.html
Alias /login $here/htdocs/login
Alias /logout $here/htdocs/logout
Alias /notauth $here/htdocs/notauth
Alias /notfound $here/htdocs/notfound
Alias /notyet $here/htdocs/notyet
Alias /oops $here/htdocs/oops
Alias /public $here/htdocs/public
Alias /robots.txt $here/htdocs/robots.txt

EOF

# Create application database directories
mkdir -p tmp/appdata/filedb

# Start memcached
../../components/cache/memcached-start

# Start server
../../modules/http/httpd-start tmp

