#!/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 joe.sca-store.com jane.sca-store.com myprofile.sca-store.com myprofile2.sca-store.com nearme.sca-store.com nearme2.sca-store.com testvalues.sca-store.com testurl.sca-store.com testsocial.sca-store.com testlogic.sca-store.com testtext.sca-store.com

here=`readlink -f $0`; here=`dirname $here`
jsprefix=`readlink -f $here/../js`

# 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/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 joe joe
../../modules/http/passwd-auth-conf tmp jane jane

# 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 /public/notfound.html
ErrorDocument 401 /public/notauth.html
ErrorDocument 500 /public/oops.html

EOF

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

# 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 look and feel
cat >>tmp/conf/httpd.conf <<EOF
# Override CSS
#Alias /ui.css $jsprefix/htdocs/uicyan.css

EOF

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

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

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

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

