= Gerrit Code Review - Contact Information

To help ensure contributor privacy, but still support gathering of
contributor agreements as necessary, Gerrit encrypts all offline
contact information gathered from users.  This data is shipped to
another server, typically at a different location, to make it more
difficult for an attacker to obtain.

This feature is optional.  If the crypto APIs aren't installed
and the `contactstore.url` setting in `gerrit.config` is not set,
Gerrit will not collect contact information from users.


== Setup

Ensure Bouncy Castle Crypto API is available in the web application's
CLASSPATH (e.g. in `'JETTY_HOME'/lib/plus` for Jetty).  Gerrit needs
both `bcprov-jdk\*-*.jar` and `bcpg-jdk\*-*.jar` to be provided
for the contact encryption to work.

* link:http://www.bouncycastle.org/latest_releases.html[Bouncy Castle Crypto API]

Ensure a proper JCE policy file is installed.  By default most
JRE installations forbid the use of a strong key, resulting in
SecurityException messages when trying to encrypt the contact data.
You need to obtain a strong JCE policy file and install it by hand.
Look for the 'Unlimited Strength Jurisdiction Policy' download.

* link:http://java.sun.com/javase/downloads/index.jsp[Java SE Downloads]

Create a public/private key pair for contact data handling.
Generate the keys on a protected system, where the resulting
private key is unlikely to fall into the wrong hands.

====
  gpg --gen-key
====

Select to use a `DSA and Elgamal` key type, as the public key will
be used for data encryption.

The information chosen for name, email and comment fields can be
anything reasonable which would identify the contact store of this
Gerrit instance.  It is probably a good idea to not use a real
person's name here, but instead some sort of organizational role.
The actual values chosen don't matter later, and are only to help
document the purpose of the key.

Choose a fairly long expiration period, such as 20 years.  For most
Gerrit instances, contact data will be written once, and rarely,
if ever, read back.

Export the public key for Gerrit to use during encryption.  The
public key must be stored in a file called `contact_information.pub`
and reside inside of the `site_config` directory.  Armoring it
during export makes it easier to transport between systems, as
you can easily copy-and-paste the text.  Gerrit can read both the
armored and unarmored formats.

====
  gpg --export --armor KEYEMAIL >$site_path/etc/contact_information.pub
====

Consider storing the private key with some sort of key escrow
service within your organization.  Without the private key it
is impossible to recover contact records.

Install a contact store implementation somewhere to receive
the contact records.  To be really paranoid, Gerrit always
ships the data to another HTTP server, preferably over HTTPS.
Existing open-source server implementations can be found in the
gerrit-contactstore project.

* link:https://code.google.com/p/gerrit/source/checkout?repo=contactstore[gerrit-contactstore]

Configure `'$site_path'/etc/gerrit.config` with the contact store's
URL (in `contactstore.url`), and if needed, APPSEC value (in
`contactstore.appsec`):

====
  git config --file $site_path/etc/gerrit.config appsec.url https://...
  git config --file $site_path/etc/gerrit.config appsec.appsec sekret
====


== Contact Store Protocol

To implement a new contact store, the following details are useful.

Gerrit connects to the contact store by sending a standard
`application/x-www-form-urlencoded` within an HTTP POST request
sent to the store URL (the exact URL that is in contactstore.url)
with the following form fields in the body:

* APPSEC
+
A shared secret "password" that should be known only to Gerrit
and the contact store.  The contact store should test this value to
deter spamming of the contact store by outside parties.  Gerrit reads
this from contactstore.appsec.

* account_id
+
Unique account_id value from the Gerrit database for the account
the contact information belongs to.  Base 10 integer.

* email
+
Preferred email address of the account.  May facilitate lookups in
the contact store at a future date.  May be omitted or the empty
string if the user hasn't chosen a preferred email.

* filed
+
Seconds since the UNIX epoch of when the contact information
was filed.  May be omitted or the empty string if Gerrit
doesn't think the supplied contact information is valid enough.

* data
+
Encrypted account data as an armored ASCII blob.  This is usually
several KB of text data as a single string, with embedded newlines
to break the lines at about 70-75 characters per line.  Data can
be decoded using GnuPG with the correct private key.

Upon successful store, the contact store application should respond
with HTTP status code `200` and a body consisting only of `OK`
(or `OK\n`).  Any other response code or body is considered to be
a failure by Gerrit.

Using `https://` for the store URL is *highly* encouraged, as it
prevents man-in-the-middle attacks from reading the shared secret
APPSEC token, or messing with the data field.

=== Data Format

Once decrypted the `data` field looks something like the following:

----
Account-Id: 1001240
Date: 2009-02-23 20:32:32.852 UTC
Full-Name: John Doe
Preferred-Email: jdoe@example.com
Identity: jd15@some-isp.com
Identity: jdoe@example.com <https://www.google.com/accounts/o8/id?id=AIt18axxafvda821aQZaHDF1k8akbalk218sak>
Identity: jdoe@example.com <http://jdoe.blogger.com/>
Address:
	123 Any Street
	Any Town, Somewhere
Country: USA
Phone-Number: +1 (555) 555-1212
Fax-Number: 555.1200
----

The fields are as follows:

* `Account-Id`
+
Value of the `account_id` field in the metadata database.  This is
a unique key for this account, and links all data records to it.

* `Date`
+
Date and time of when this contact record was submitted by the user.
Written in an ISO formatted date/time string (`YYYY-MM-DD hh:mm:ss`),
in the UTC timezone.

* `Full-Name`
+
The `full_name` field of the account record when the user submitted
the contact information.  This should be the user's given name and
family name.

* `Preferred-Email`
+
The `preferred_email` field of the account record when the user
submitted the contact information.  This should be one of the emails
listed in the `Identity` field.

* `Identity`
+
This field occurs once for each `account_external_id` record
in the database for this account.  The email address is listed,
and if the user is using OpenID authentication, the OpenID claimed
identity follows in brackets (`<...>`).  Identity lines without an
OpenID identity are usually created by sending an email containing
a unique hyperlink that the user must visit to setup the identity.

* `Address`
+
Free form text, as entered by the user.  This should describe some
location that physical documents could be sent to, but it is not
verified, so users can enter pretty much anything here.  Each line
is prefixed with a single TAB character, but is otherwise exactly
as entered.

* `Country`
+
Free form text, as entered by the user.  This should be some sort
of country name or ISO country abbreviation, but it is not verified,
so it can be pretty much anything.

* `Phone-Number`, `Fax-Number`
+
Free form text, as entered by the user.  The format here can be
anything, and as the example shows, may not even be consistent in
the same record.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
