Gerrit2 - Configuration
=======================

Several columns in the `system_config` table may be set to control
how Gerrit behaves.

[NOTE]
The contents of the `system_config` table are cached at startup
by Gerrit.  If you modify any columns in this table, Gerrit needs
to be restarted before it will use the new values.

Configurable Parameters
-----------------------

max_session_age
~~~~~~~~~~~~~~~

Maximum number of seconds that an XSRF token or a session cookie
is permitted to be valid for.

By default this is 43200 seconds, or 12 hours.  Any browser session
which has not been used in this time span will ask the user to
login again.

Administrators may increase (or decrease) this setting to control
how long an idle session is allowed to remain alive.

site_path
~~~~~~~~~

Local filesystem directory holding the site customization assets.
Placing this directory under version control and/or backup is a
good idea.

SSH keys (`ssh_host_rsa_key`, `ssh_host_dsa_key`) in this directory
provide the host keys for the internal SSH daemon.

Other files support site customization.

* link:config-headerfooter.html[Site Header/Footer]

git_base_path
~~~~~~~~~~~~~

Local filesystem directory holding all Git repositories that
Gerrit knows about and can process changes for.  A project
entity in Gerrit maps to a local Git repository by creating
the path string "${git_pase_path}/${project_name}.git".

gerrit_git_name
~~~~~~~~~~~~~~~

Name that Gerrit calls itself in Git when it creates a new Git
commit, such as a merge during change submission.

By default this is "Gerrit Code Review".

gerrit_git_email
~~~~~~~~~~~~~~~~

Email address that Gerrit refers to itself as when it creates a
new Git commit, such as a merge commit during change submission.

If NULL, Gerrit generates this as "gerrit@`hostname`", where
`hostname` is the hostname of the system Gerrit is running on.

By default, this is NULL, generating the value at startup.

canonical_url
~~~~~~~~~~~~~

The default URL for Gerrit to be accessed through.

Typically this would be set to "http://review.example.com/" or
"http://example.com/gerrit/" so Gerrit can output links that point
back to itself.

Setting this is highly recommended, as its necessary for the upload
code invoked by "git push" or "repo upload" to output hyperlinks
to the newly uploaded changes.

use_contributor_agreements
~~~~~~~~~~~~~~~~~~~~~~~~~~

Controls whether or not the contributor agreement features are
enabled for the Gerrit site.  If enabled a user must complete a
contributor agreement before they can upload changes.

If enabled, the admin must also insert one or more rows into
`contributor_agreements` and create agreement files under
`$site_path/static`, so users can actually complete one or
more agreements. 

By default this is `N` (no agreements are used).

sshd_port
~~~~~~~~~

Port number the internal SSHD listens for connections on.

Gerrit receives new change submissions through this port by
"git push ssh://you@example.com:$sshd_port/$project.git ...".

By default this is 29418.

login_type
~~~~~~~~~~

Type of user authentication employed by Gerrit.  This setting has
two supported values:

* `OPENID`
+
The default setting.  Gerrit uses any valid OpenID
provider chosen by the end-user.  For more information see
http://openid.net/[openid.net]

* `HTTP`
+
Gerrit relies upon data in the HTTP request, such as the HTTP basic
authentication, or some types of commerical single-sign-on solutions.
For more information see link:config-sso.html[SSO configuration].

login_http_header
~~~~~~~~~~~~~~~~~

HTTP header to trust the username from, or NULL to select HTTP
basic or digest authentication.  Only used if `login_type = HTTP`.

For more information see link:config-sso.html[SSO configuration].

email_format
~~~~~~~~~~~~

Optional format string to construct user email addresses out of
user login names.  Only used if `login_type = HTTP`.

This value can be set to a format string, where `\{0\}` is replaced
with the login name.  E.g. "\{0\}+gerrit@example.com" with a user
login name of "foo" will produce "foo+gerrit@example.com" during
the first time user "foo" registers.

For more information see link:config-sso.html[SSO configuration].

allow_google_account_upgrade
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Allow old Gerrit1 users to seamlessly upgrade from Google Accounts
on Google App Engine to OpenID authentication.  This should only be
set to true on a Gerrit2 database that was imported from a Gerrit1
database run on Google App Engine.  Having it enabled incurs an
extra database query when new Google Account users register with
the Gerrit2 server.

Its strongly encouraged to set this to 'N' once the following
query drops to 0, or close to 0:

====
  SELECT COUNT(*) FROM account_external_ids e
  WHERE e.external_id LIKE 'Google Account %'
  AND NOT EXISTS (SELECT 1
    FROM account_external_ids o
    WHERE o.account_id = e.account_id
	AND o.external_id LIKE '%.google.com%/id?id=%');
====


Not User Serviceable
--------------------

These fields generally shouldn't be modified.

xsrf_private_key
~~~~~~~~~~~~~~~~

A private key used to sign the XSRF (cross site request forgey)
protection tokens.  All RPC calls which can potentially modify
data require that the client obtain, and then later present an XSRF
token to Gerrit.  The tokens are signed with this private key.

This column is automatically generated when the database is
initialized.  Changing it to a new value would cause all current
XSRF tokens to be invalidated, forcing clients to either fail or
retry any requests in progress.

Changing it is not recommended.

account_private_key
~~~~~~~~~~~~~~~~~~~

Like xsrf_private_key, but used to sign the cookie that tells Gerrit
what account the end-user has signed into.  The key signs the cookie,
preventing a client from spoofing another account.

This column is automatically generated when the database is
initialized.  Changing it to a new value would cause all current
cookies to be invalidated, forcing clients to fail their current
requests and require the user to sign in again.

Changing it is not recommended.

admin_group_id
~~~~~~~~~~~~~~

Unique identity of the group with full privileges.  Any user who
is a member of this group may manage any other group, any project,
and other system settings over the web.

This is initialized by Gerrit to be the "Administrators" group.

Changing it is not recommended.

anonymous_group_id
~~~~~~~~~~~~~~~~~~

Unique identity of the group for anonymous (not authenticated) users.

All users are a member of this group, whether or not they are
actually signed in to Gerrit.  Any access rights assigned to
this group are inherited by all users.

This is initialized by Gerrit to be the "Anonymous Users" group.

Changing it is not recommended.

registered_group_id
~~~~~~~~~~~~~~~~~~~

Unique identity of the group for all authenticated users.

All signed-in users are a member of this group.  Any access rights
assigned to this group are inherited by all users once they have
authenticated to Gerrit.

Since account registration is open and fairly easy to obtain,
moving from the "Anonymous Users" group to this group is not
very difficult.  Caution should be taken when assigning any
permissions to this group.

This is initialized by Gerrit to be the "Registered Users" group.

Changing it is not recommended.

