@@ -157,114 +157,86 @@ index_dir = %(here)s/data/index
#initial_repo_scan = false
initial_repo_scan = true
## uncomment and set this path to use archive download cache
archive_cache_dir = %(here)s/tarballcache
## change this to unique ID for security
app_instance_uuid = development-not-secret
## cut off limit for large diffs (size in bytes)
cut_off_limit = 256000
## use cache version of scm repo everywhere
vcs_full_cache = true
## force https in Kallithea, fixes https redirects, assumes it's always https
force_https = false
## use Strict-Transport-Security headers
use_htsts = false
## number of commits stats will parse on each iteration
commit_parse_limit = 25
## use gravatar service to display avatars
use_gravatar = true
## path to git executable
git_path = git
## git rev filter option, --all is the default filter, if you need to
## hide all refs in changelog switch this to --branches --tags
#git_rev_filter = --branches --tags
## RSS feed options
rss_cut_off_limit = 256000
rss_items_per_page = 10
rss_include_diff = false
## options for showing and identifying changesets
show_sha_length = 12
show_revision_number = true
## gist URL alias, used to create nicer urls for gist. This should be an
## url that does rewrites to _admin/gists/<gistid>.
## example: http://gist.kallithea.server/{gistid}. Empty means use the internal
## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid>
gist_alias_url =
## white list of API enabled controllers. This allows to add list of
## controllers to which access will be enabled by api_key. eg: to enable
## api access to raw_files put `FilesController:raw`, to enable access to patches
## add `ChangesetController:changeset_patch`. This list should be "," separated
## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
## Recommended settings below are commented out:
api_access_controllers_whitelist =
# ChangesetController:changeset_patch,
# ChangesetController:changeset_raw,
# FilesController:raw,
# FilesController:archivefile
## alternative_gravatar_url allows you to use your own avatar server application
## the following parts of the URL will be replaced
## {email} user email
## {md5email} md5 hash of the user email (like at gravatar.com)
## {size} size of the image that is expected from the server application
## {scheme} http/https from Kallithea server
## {netloc} network location from Kallithea server
#alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
#alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
## container auth options
container_auth_enabled = false
proxypass_auth_enabled = false
## default encoding used to convert from and to unicode
## can be also a comma seperated list of encoding in case of mixed encodings
default_encoding = utf8
## overwrite schema of clone url
## available vars:
## scheme - http/https
## user - current user
## pass - password
## netloc - network location
## path - usually repo_name
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
## issue tracker for Kallithea (leave blank to disable, absent for default)
#bugtracker = https://bitbucket.org/conservancy/kallithea/issues
## issue tracking mapping for commits messages
## comment out issue_pat, issue_server, issue_prefix to enable
## pattern to get the issues from commit messages
## default one used here is #<numbers> with a regex passive group for `#`
## {id} will be all groups matched from this pattern
issue_pat = (?:\s*#)(\d+)
## server url to the issue, each {id} will be replaced with match
## fetched from the regex and {repo} is replaced with full repository name
## including groups {repo_name} is replaced with just name of repo
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
## prefix to add to link to indicate it's an url
## #314 will be replaced by <issue_prefix><id>
issue_prefix = #
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
@@ -347,116 +347,108 @@ If You have problems with LDAP access an
information check out the Kallithea logs, any error messages sent from LDAP
will be saved there.
Active Directory
''''''''''''''''
Kallithea can use Microsoft Active Directory for user authentication. This
is done through an LDAP or LDAPS connection to Active Directory. The
following LDAP configuration settings are typical for using Active
Directory ::
Base DN = OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local
Login Attribute = sAMAccountName
First Name Attribute = givenName
Last Name Attribute = sn
E-mail Attribute = mail
All other LDAP settings will likely be site-specific and should be
appropriately configured.
Authentication by container or reverse-proxy
--------------------------------------------
Starting with version 1.3, Kallithea supports delegating the authentication
Kallithea supports delegating the authentication
of users to its WSGI container, or to a reverse-proxy server through which all
clients access the application.
When these authentication methods are enabled in Kallithea, it uses the
username that the container/proxy (Apache/Nginx/etc) authenticated and doesn't
perform the authentication itself. The authorization, however, is still done by
Kallithea according to its settings.
When a user logs in for the first time using these authentication methods,
a matching user account is created in Kallithea with default permissions. An
administrator can then modify it using Kallithea's admin interface.
It's also possible for an administrator to create accounts and configure their
permissions before the user logs in for the first time.
Container-based authentication
''''''''''''''''''''''''''''''
In a container-based authentication setup, Kallithea reads the user name from
the ``REMOTE_USER`` server variable provided by the WSGI container.
After setting up your container (see `Apache's WSGI config`_), you'd need
to configure it to require authentication on the location configured for
Kallithea.
In order for Kallithea to start using the provided username, you should set the
following in the [app:main] section of your .ini file::
container_auth_enabled = true
Proxy pass-through authentication
'''''''''''''''''''''''''''''''''
In a proxy pass-through authentication setup, Kallithea reads the user name
from the ``X-Forwarded-User`` request header, which should be configured to be
sent by the reverse-proxy server.
After setting up your proxy solution (see `Apache virtual host reverse proxy example`_,
`Apache as subdirectory`_ or `Nginx virtual host example`_), you'd need to
configure the authentication and add the username in a request header named
``X-Forwarded-User``.
For example, the following config section for Apache sets a subdirectory in a
reverse-proxy setup with basic auth::
<Location /<someprefix> >
ProxyPass http://127.0.0.1:5000/<someprefix>
ProxyPassReverse http://127.0.0.1:5000/<someprefix>
SetEnvIf X-Url-Scheme https HTTPS=1
AuthType Basic
AuthName "Kallithea authentication"
AuthUserFile /home/web/kallithea/.htpasswd
require valid-user
RequestHeader unset X-Forwarded-User
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule .* - [E=RU:%1]
RequestHeader set X-Forwarded-User %{RU}e
</Location>
In order for Kallithea to start using the forwarded username, you should set
the following in the [app:main] section of your .ini file::
proxypass_auth_enabled = true
.. note::
If you enable proxy pass-through authentication, make sure your server is
only accessible through the proxy. Otherwise, any client would be able to
forge the authentication header and could effectively become authenticated
using any account of their liking.
Integration with Issue trackers
-------------------------------
Kallithea provides a simple integration with issue trackers. It's possible
to define a regular expression that will fetch issue id stored in commit
messages and replace that with an url to this issue. To enable this simply
uncomment following variables in the ini file::
issue_pat = (?:^#|\s#)(\w+)
`issue_pat` is the regular expression that will fetch issues from commit messages.
Default regex will match issues in format of #<number> eg. #300.
Matched issues will be replace with the link specified as `issue_server_link`
{id} will be replaced with issue id, and {repo} with repository name.
@@ -154,114 +154,86 @@ index_dir = ${here}/data/index
<%text>## set to false after first startup, to allow faster server restarts.</%text>
initial_repo_scan = false
<%text>## uncomment and set this path to use archive download cache</%text>
archive_cache_dir = ${here}/tarballcache
<%text>## change this to unique ID for security</%text>
app_instance_uuid = ${uuid()}
<%text>## cut off limit for large diffs (size in bytes)</%text>
<%text>## use cache version of scm repo everywhere</%text>
<%text>## force https in Kallithea, fixes https redirects, assumes it's always https</%text>
<%text>## use Strict-Transport-Security headers</%text>
<%text>## number of commits stats will parse on each iteration</%text>
<%text>## use gravatar service to display avatars</%text>
<%text>## path to git executable</%text>
<%text>## git rev filter option, --all is the default filter, if you need to</%text>
<%text>## hide all refs in changelog switch this to --branches --tags</%text>
<%text>## RSS feed options</%text>
<%text>## options for showing and identifying changesets</%text>
<%text>## gist URL alias, used to create nicer urls for gist. This should be an</%text>
<%text>## url that does rewrites to _admin/gists/<gistid>.</%text>
<%text>## example: http://gist.kallithea.server/{gistid}. Empty means use the internal</%text>
<%text>## Kallithea url, ie. http[s]://your.kallithea.server/_admin/gists/<gistid></%text>
<%text>## white list of API enabled controllers. This allows to add list of</%text>
<%text>## controllers to which access will be enabled by api_key. eg: to enable</%text>
<%text>## api access to raw_files put `FilesController:raw`, to enable access to patches</%text>
<%text>## add `ChangesetController:changeset_patch`. This list should be "," separated</%text>
<%text>## Syntax is <ControllerClass>:<function>. Check debug logs for generated names</%text>
<%text>## Recommended settings below are commented out:</%text>
<%text>## alternative_gravatar_url allows you to use your own avatar server application</%text>
<%text>## the following parts of the URL will be replaced</%text>
<%text>## {email} user email</%text>
<%text>## {md5email} md5 hash of the user email (like at gravatar.com)</%text>
<%text>## {size} size of the image that is expected from the server application</%text>
<%text>## {scheme} http/https from Kallithea server</%text>
<%text>## {netloc} network location from Kallithea server</%text>
<%text>## container auth options</%text>
<%text>## default encoding used to convert from and to unicode</%text>
<%text>## can be also a comma seperated list of encoding in case of mixed encodings</%text>
<%text>## overwrite schema of clone url</%text>
<%text>## available vars:</%text>
<%text>## scheme - http/https</%text>
<%text>## user - current user</%text>
<%text>## pass - password</%text>
<%text>## netloc - network location</%text>
<%text>## path - usually repo_name</%text>
<%text>## issue tracker for Kallithea (leave blank to disable, absent for default)</%text>
<%text>## issue tracking mapping for commits messages</%text>
<%text>## comment out issue_pat, issue_server, issue_prefix to enable</%text>
<%text>## pattern to get the issues from commit messages</%text>
<%text>## default one used here is #<numbers> with a regex passive group for `#`</%text>
<%text>## {id} will be all groups matched from this pattern</%text>
<%text>## server url to the issue, each {id} will be replaced with match</%text>
<%text>## fetched from the regex and {repo} is replaced with full repository name</%text>
<%text>## including groups {repo_name} is replaced with just name of repo</%text>
<%text>## prefix to add to link to indicate it's an url</%text>
<%text>## #314 will be replaced by <issue_prefix><id></%text>
<%text>## issue_pat, issue_server_link, issue_prefix can have suffixes to specify</%text>
@@ -151,114 +151,86 @@ index_dir = %(here)s/data/index
## set to false after first startup, to allow faster server restarts.
app_instance_uuid = ${app_instance_uuid}
@@ -155,114 +155,86 @@ index_dir = %(here)s/data/index
app_instance_uuid = change-me
app_instance_uuid = test
#vcs_full_cache = true
vcs_full_cache = false
Status change: