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

    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>
        Order Deny,Allow
        Deny from all
        Options None
        AllowOverride None
    </Directory>

    <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:8080/auth/repo_permissions
        PythonOption ALLURA_AUTH_URL http://web:8080/auth/do_login
        # for 'requests' lib only, doesn't have to be full allura venv
        PythonOption ALLURA_VIRTUALENV /allura-data/virtualenv
    </Location>

</VirtualHost>