#       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.

ErrorLog /dev/stderr

# see also Allura/docs/getting_started/scm_host.rst

<VirtualHost *:80>

    # /git/ requests go to the git backend binary
    SetEnv GIT_PROJECT_ROOT /allura-data/scm/git
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

    # disable access to default web content
    <Directory /var/www>
        Require all denied
        Options None
        AllowOverride None
    </Directory>

    # any Alias here must be excluded from ProxyPass (at bottom of file)
    Alias /robots.txt /allura-data/www-misc/robots.txt
    <Directory /allura-data/www-misc/>
        Require all granted
    </Directory>

    # apply security checks to all /git/ requests
    <Location "/git/">
        Require all granted

        AddHandler mod_python .py
        PythonAccessHandler /allura/scripts/ApacheAccessHandler.py
        PythonDebug On

        AuthType Basic
        AuthName "Git Access"
        AuthBasicAuthoritative off
        PythonOption ALLURA_PERM_URL http://web:8088/auth/repo_permissions
        PythonOption ALLURA_AUTH_URL http://web:8088/auth/do_login
        # for 'requests' lib only, doesn't have to be full allura venv
        PythonOption ALLURA_VIRTUALENV /allura-data/virtualenv
    </Location>

    # declare what is being handled here
    ProxyPass "/robots.txt" !
    ProxyPass "/git/" !
    # everything else gets proxied through to the Allura webapp
    ProxyPass "/" "http://web:8088/"
    ProxyPassReverse "/" "http://web:8088/"

</VirtualHost>